新しいBluetoothデバイスドライバのバインド解除/バインディング - Ubuntu 14.04 Trust Tahr

新しいBluetoothデバイスドライバのバインド解除/バインディング - Ubuntu 14.04 Trust Tahr

ヘッダー

最初の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

教訓を得る

  1. デフォルトのカーネルbtusbドライバは、認識しているUSB Bluetoothデバイスに対してもう少し緩いです。知るすべてのCSRデバイスはBluetoothアダプタです。
  2. デバイスドライバのエラーメッセージが非常に遅れます。 SS1BTUSBデバイスドライバDEBUGprintk出力を有効にしても役に立ちません。
  3. いつものように、唯一の実際の文書はソースコードです。

関連情報