새 Bluetooth 장치 드라이버 바인딩 해제/바인딩 - Ubuntu 14.04 Trust Tahr

새 Bluetooth 장치 드라이버 바인딩 해제/바인딩 - Ubuntu 14.04 Trust Tahr

머리말

처음 세 장을 다 읽었다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

두 번째 장치 바인딩을 해제하면 오류가 발생하는 이유가 확실하지 않지만 결과적으로 장치가 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로 변경했습니다.

결과적으로 해당 기기는 블루투스 어댑터(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 장치 드라이버 DEBUG printk출력을 활성화해도 도움이 되지 않습니다.
  3. 항상 그렇듯이 유일한 실제 문서는 소스 코드입니다.

관련 정보