[Linux] Ubuntu 22.04でTP-LinkのBluetoothアダプタUB500を動かす

LinuxでTP-Link製BluetoothアダプタUB500を利用するときにやったことの備忘録です。

環境

デバイスはFriendlyElec NanoPi R6C。そこそこの性能でそこそこ安価なSBC。無線関係のモジュールがないため別途用意する必要はありますが、技適云々の問題がないのでおすすめのSBCです。OSは以下の通り。

$ uname -a
Linux jete 5.10.160-rockchip #6 SMP Thu Jul 13 03:49:20 UTC 2023 aarch64 aarch64 aarch64 GNU/Linux
$ lsb_release -d
Description:    Ubuntu 22.04.2 LTS

用意したのはTP-Link UB500。Bluetooth 5.0対応の小型Bluetoothアダプタです。対応OSはWindowsのみですが、ググった感じLinuxでも動きそうだったので購入しました。ただそのまま接続しただけでは動作しなかったので、以下に動かすまでの過程をメモしておきます。以下の手順すべてが必要がどうかはわかりません。

ちなみに5.16以降のカーネルであれば何もせずに動くらしいです。もちろんWindowsで正しく動作することは確認済みです。

やったこと

現状確認

とりあえずUSBポートに挿して以下のコマンドでアダプタが認識されているか確認。

$ hciconfig -a
hci0:   Type: Primary  Bus: USB
        BD Address: XX:XX:XX:XX:XX:XX  ACL MTU: 1021:5  SCO MTU: 255:11
        UP RUNNING
        RX bytes:11546 acl:0 sco:0 events:290 errors:0
        TX bytes:35486 acl:0 sco:0 commands:195 errors:0
        Features: 0xff 0xff 0xff 0xfe 0xdb 0xfd 0x7b 0x87
        Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
        Link policy: RSWITCH HOLD SNIFF PARK
        Link mode: PERIPHERAL ACCEPT
        Name: 'jete'
        Class: 0x6c0000
        Service Classes: Rendering, Capturing, Audio, Telephony
        Device Class: Miscellaneous,
        HCI Version: 5.1 (0xa)  Revision: 0x9dc6
        LMP Version: 5.1 (0xa)  Subversion: 0xd922
        Manufacturer: Realtek Semiconductor Corporation (93)

問題なく認識されているみたいです。次にデバイスを検索してみます。bluetoothctlscan onを実行します。

$ bluetoothctl
Agent registered
[CHG] Controller XX:XX:XX:XX:XX:XX Pairable: yes
[bluetooth]# scan on

しかしデバイスは1件もヒットしません。ためしにdiscoverable onして他のデバイスから参照してみましたがリストには表示されず。

カーネルにパッチを当てる

ググったところ、UB500はカーネル5.16未満ではサポートされていないようなので、以下の手順でカーネルにパッチを当ててます。A guide on how to get the UB500 bluetooth dongle working on <5.16 linux kernels!の通りに実行すればパッチが適用されます。

ただこれだけでは上の状況は改善されませんでした。

ドライバをインストールする

調べたところ、UB500はRTL8671Bというチップセットを使っているみたいです。 /lib/firmware/rtl_btの中を見てみましたが対応するドライバは見当たりません。とりあえずlinux-firmwareをインストールして様子を見ます。

sudo apt install linux-firmware

上記コマンドを実行したあと再度/lib/firmware/rtl_btの中を見たところ、rtl8761b_config.binrtl8761b_fw.binがインストールされていました。

ただし、これらのドライバは使用されず別のドライバが使用されてしまうらしいので、以下のコマンドを叩いて正しいドライバが読み込まれるようにします。具体的にはrtl8761bを読み込むべきなのにrtl8761buが読み込まれてしまうので、rtl8761buからrtl8761bへシンボリックリンクを貼ります。

$ cd /lib/firmware/rtl_bt
$ sudo mv rtl8761bu_config.bin rtl8761bu_config.bin.old
$ sudo mv rtl8761bu_fw.bin rtl8761bu_fw.bin.old
$ sudo ln -s rtl8761b_config.bin rtl8761bu_config.bin
$ sudo ln -s rtl8761b_fw.bin rtl8761bu_fw.bin

あとは再起動して完了です。

動作確認

上記作業を行ったあと、再度bluetoothctlを実行しscan onを実行したところ、デバイスがちゃんと列挙されました。

参考にしたサイト

0 件のコメント :

コメントを投稿