ヘッダー
最初の3枚を読んだLinuxデバイスドライバ、第3版 - PDFだから、今週初めに知っていたよりも、それについて少し知っているが、まだ多くはありません。
システム
- ディストリビューション: Ubuntu 14.04.4 LTS, Trusty Tahr
- カーネル: 4.4.0-47-一般
質問
btusb
カーネルドライバをBluetopia USB BTドライバに置き換えようとしていますSS1BTUSB
(ドライバソースとビルドファイルのソースは次のとおりです)。オーロラコード)、私はBluetopia Bluetoothスタックの実装についてもっと学びたいと考えています。
SS1BTUSB
正常にカーネルモジュールをビルドしてインストールできます。
$ sudo insmod SS1BTUSBM.ko
$ lsmod | grep SS1BTUSB
SS1BTUSBM 32768 0
そして次のようにlwn.net 記事、ドライバからデバイスのバインドを解除できますbtusb
。
$ ls /sys/bus/usb/drivers/btusb
1-1.5:1.0 1-1.5:1.1 bind module new_id remove_id uevent unbind
$ sudo -i
# echo "1-1.5:1.0" > /sys/bus/usb/drivers/btusb/unbind
# echo "1-1.5:1.1" > /sys/bus/usb/drivers/btusb/unbind
-bash: echo: write error: No such device
# ls /sys/bus/usb/drivers/btusb
bind module new_id remove_id uevent unbind
2番目のデバイスのバインドを解除すると、エラーが発生する理由はわかりませんが、その結果、デバイスはbtusb
ドライバからバインド解除されます。
SS1BTUSB1
ただし、これらのデバイスをドライバにバインドしようとすると同じエラーが発生します。
# echo "1-1.5:1.1" > /sys/bus/usb/drivers/SS1BTUSB/bind
-bash: echo: write error: No such device
# echo "1-1.5:1.0" > /sys/bus/usb/drivers/SS1BTUSB/bind
-bash: echo: write error: No such device
「デバイスなし」エラーは非常に一般的で多くのことを意味する可能性があり、この問題をデバッグ/診断する方法についてアドバイスをいただきありがとうございます。
ランダムノート
(問題の診断に役立つ場合もあれば、役に立たない場合もあります)
このbtusb
ドライバは他のドライバで使用されます(関連がある可能性があります)。
$ lsmod | grep btusb
btusb 45056 0
btrtl 16384 1 btusb
btbcm 16384 1 btusb
btintel 16384 1 btusb
bluetooth 516096 25 bnep,btbcm,btrtl,btusb,rfcomm,btintel
Bluetooth USBアダプタのUSB情報...
$ lsusb
.
Bus 001 Device 003: ID 0a12:1243 Cambridge Silicon Radio, Ltd
.
実際にはBTドングルで構成されたCSR8675ヘッドフォンボードなので(わかります)ディテールがちょっと変に見えますが…
$ usb-devices
.
T: Bus=01 Lev=02 Prnt=02 Port=04 Cnt=01 Dev#= 3 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=0a12 ProdID=1243 Rev=20.32
S: Product=CSR8675 USB Headset
S: SerialNumber=ABCDEF0123456789
C: #Ifs= 3 Cfg#= 1 Atr=80 MxPwr=500mA
I: If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
I: If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
I: If#= 2 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)
.
しかし、それは完全な機能を備えたBluetooth HCIデバイスです。
答え1
したがって、Bluetopiaデバイスドライバは、SS1BTUSB
サポートしているBluetoothデバイスについて非常に具体的であることがわかりました。カーネルドライバよりも具体的ですbtusb
。
SS1BTUSB.cでBluetoothDeviceIDTable[]
...
/* CSR Module. */
{ USB_DEVICE(0x0A12, 0x0001) },
{ USB_DEVICE(0x0A12, 0x0043) },
{ USB_DEVICE(0x0A12, 0x1000) },
ボードを確認してみると、idProduct(USB製品IDコード)は0x1234です。
$ lsusb -d 0a12:
Bus 001 Device 006: ID 0a12:1234 Cambridge Silicon Radio, Ltd
0x1234はテーブルにはなく、「Cambridge Silicon Radio」デバイスにもリストされていません。www.linux-usb.org。
幸い、DevBoards USB製品IDを変更することができ、「HCI Device」を意味する0x0001に変更しました。
その結果、デバイスはBluetoothアダプタ(HCIモード)として認識されます。
$ lsusb -d 0a12:
Bus 001 Device 007: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
これで、「1-1.5:1-0」および「1-1.5:1-1」デバイスをエラーなくドライバにバインド/バインド解除できますSS1BTUSB
。
教訓を得る
- デフォルトのカーネル
btusb
ドライバは、認識しているUSB Bluetoothデバイスに対してもう少し緩いです。知るすべてのCSRデバイスはBluetoothアダプタです。 - デバイスドライバのエラーメッセージが非常に遅れます。 SS1BTUSBデバイスドライバDEBUG
printk
出力を有効にしても役に立ちません。 - いつものように、唯一の実際の文書はソースコードです。