머리말
처음 세 장을 다 읽었다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
.
교훈을 얻으세요
- 기본 커널
btusb
드라이버는 인식하는 USB Bluetooth 장치에 대해 좀 더 느슨합니다.알다모든 CSR 장치는 Bluetooth 어댑터입니다. - 장치 드라이버 오류 메시지가 매우 지연됩니다. SS1BTUSB 장치 드라이버 DEBUG
printk
출력을 활성화해도 도움이 되지 않습니다. - 항상 그렇듯이 유일한 실제 문서는 소스 코드입니다.