Desassociar / ligar novo driver de dispositivo Bluetooth - Ubuntu 14.04 Trust Tahr

0

Prefácio

Eu conheço meu caminho em torno de um shell bash ... um pouco ... mas eu sou um n00b quando se trata de hackers Kernal e drivers de dispositivos Linux. Eu engoli os primeiros 3 capítulos dos Drivers de Dispositivos Linux, Edição 3 - PDF , então eu sei um pouco mais sobre isso do que Eu fiz no início da semana, mas ainda não muito.

Por favor, se você declarar 'apenas faça x e então y ', onde x é algo como 'baixe o kernel mais recente' e y é algo como 'construí-lo', gentilmente link para um tutorial ou guia sobre como fazer x e y , porque n00b.

Sistema

  • Distribuição: Ubuntu 14.04.4 LTS, Trusty Tahr
  • Kernel: 4.4.0-47-genérico

Problema

Estou tentando substituir o driver btusb do kernel pelo driver Bluetopia USB BT SS1BTUSB (fonte de driver e arquivos de compilação de CodeAurora ), porque eu estou tentando aprender mais sobre a implementação da pilha Bluetopia Bluetooth, e este é o primeiro passo para ser capaz de fazer isso.

Eu posso criar com sucesso o módulo SS1BTUSB Kernel e instalá-lo.

$ sudo insmod SS1BTUSBM.ko

$ lsmod | grep SS1BTUSB
SS1BTUSBM              32768  0

E, seguindo as instruções do artigo do lwn.net , posso desvincular os dispositivos anexados ao driver 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

Não sei por que a desativação do segundo dispositivo causa o erro, mas o resultado é que os dispositivos não são vinculados ao driver btusb .

No entanto, quando tento vincular esses dispositivos ao driver SS1BTUSB1 , recebo o mesmo erro.

# 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

Parece que o erro "No such device" é razoavelmente genérico e pode significar várias coisas, sugestões sobre como depurar / diagnosticar este problema seriam muito apreciadas.

Notas aleatórias

(pode ou não ajudar a diagnosticar o problema).

O driver btusb é usado por outros drivers - pode estar relacionado.

$ 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

Informações USB no dongle USB Bluetooth ...

$ lsusb
.
Bus 001 Device 003: ID 0a12:1243 Cambridge Silicon Radio, Ltd
.

Na verdade, é uma placa de desenvolvimento de fone de ouvido CSR8675 configurada como um dongle BT (esse bit eu conheço), então os detalhes parecem um pouco malucos ...

$ 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)
.

Mas é um dispositivo Bluetooth HCI funcional.

    
por Simon Peverett 23.11.2016 / 11:58

1 resposta

0

Então, acontece que o driver do dispositivo Bluetopia SS1BTUSB é muito específico sobre os dispositivos Bluetooth que ele suporta. Muito mais específico que o driver btusb do kernel.

Do SS1BTUSB.c BluetoothDeviceIDTable[] ...

   /* CSR Module.                                             */
   { USB_DEVICE(0x0A12, 0x0001) },
   { USB_DEVICE(0x0A12, 0x0043) },
   { USB_DEVICE(0x0A12, 0x1000) },

Eu verifiquei minha placa de desenvolvedor ... e seu idProduct (código de ID do produto USB) é 0x1234.

$ lsusb -d 0a12:
Bus 001 Device 006: ID 0a12:1234 Cambridge Silicon Radio, Ltd

0x1234 não está na tabela ou está listado para qualquer dispositivo 'Cambridge Silicon Radio' em www.linux-usb .org .

Felizmente, posso alterar a ID do Produto USB DevBoards, por isso alterei-a para 0x0001 - para 'dispositivo HCI'.

O resultado, o dispositivo é reconhecido como um Dongle Bluetooth (modo HCI)

$ lsusb -d 0a12:
Bus 001 Device 007: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)

E agora posso vincular / desvincular os dispositivos "1-1.5: 1-0" e "1-1.5: 1-1" ao driver SS1BTUSB sem erros.

Lições Aprendidas

  1. O driver% kernel btusb padrão é muito mais permissivo sobre os dispositivos Bluetooth USB que ele reconhece, talvez saiba que todos os dispositivos CSR são dongles Bluetooth.
  2. As mensagens de erro do driver de dispositivo são bastante obtusas. Mesmo ativar o driver de dispositivo SS1BTUSB DEBUG printk output não ajudou.
  3. Como sempre, a única documentação real é o código-fonte.
por 24.11.2016 / 16:02