[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)
問題なく認識されているみたいです。次にデバイスを検索してみます。bluetoothctl
でscan 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.bin
とrtl8761b_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
を実行したところ、デバイスがちゃんと列挙されました。
参考にしたサイト
- https://github.com/tedboudros/tplink-ub500-linux-patch-guide
- https://forums.linuxmint.com/viewtopic.php?t=382807
- https://forums.linuxmint.com/viewtopic.php?t=368114
0 件のコメント :
コメントを投稿