Como posso fazer o Bluetooth funcionar no meu Lenovo Yoga 3?

6

Eu tenho um Lenovo Yoga 3 que aparentemente tem um novo dispositivo Bluetooth da Broadcom.

O bluetooth é detectado na inicialização e quando tento emparelhar algo no gnome, vejo uma lista de dispositivos, mas nenhum deles é pareado.

Como posso fazer este dispositivo funcionar?

lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 048d:8386 Integrated Technology Express, Inc.
Bus 001 Device 003: ID 5986:0535 Acer, Inc
Bus 001 Device 002: ID 0489:e07a Foxconn / Hon Hai
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
usb-devices
T:  Bus=01 Lev=01 Prnt=01 Port=03 Cnt=02 Dev#=  2 Spd=12  MxCh= 0
D:  Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=0489 ProdID=e07a Rev=01.12
S:  Manufacturer=Broadcom Corp
S:  Product=BCM20702A0
S:  SerialNumber=38B1DBE337E4
C:  #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=0mA
I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
I:  If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
I:  If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
I:  If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)
    
por drs 12.03.2015 / 19:23

2 respostas

11

A partir da versão 3.19, este dispositivo é suportado no kernel do Linux, mas você precisa fornecer manualmente o firmware do dispositivo para o kernel.

Como encontrar o firmware:

Você pode encontrar o firmware no driver do Windows do dispositivo, que pode ser baixado da Lenovo (ou do site do fabricante do seu computador). Muitos drivers podem ser descompactados, mas para este computador em particular, o driver é um arquivo .exe e deve ser extraído com wine .

wine 4ab802rf.exe

Siga as instruções de "instalação". O assistente irá extrair o arquivo .exe e na última etapa irá pedir para instalá-lo. Desmarque a opção "Instalar agora o Broadcom Bluetooth Driver":

Oarquivododriverfoiextraídopara~/.wine/driver_c/drivers/BroadcomBluetoothDriver/

Identificandooarquivocorreto

Nomeucaso,existem20a30arquivosdefirmwarenopacoteextraído.Qualdelescorrespondeaoseudispositivoéreveladoemumdosarquivosinfdodriver.EncontreoIDdoseudispositivonasaídadelsusbou,senãoestiverclaro,usb-devices.Nessecaso,ée07a.Emseguida,greposarquivosinfparadescobrirqualdelesfalasobreessedispositivo:

grep-cE07A-r--include\*.infWin32/LD/bcbtumsLD-win7x86.inf:0Win32/bcmhidnossr.inf:0Win32/btwl2cap.inf:0Win32/btwavdt.inf:0Win32/btwrchid.inf:0Win32/bcbtums-win8x86-brcm.inf:17Win32/btwaudio.inf:0Win64/LD/bcbtumsLD-win7x64.inf:0Win64/bcmhidnossr.inf:0Win64/btwl2cap.inf:0Win64/btwavdt.inf:0Win64/btwrchid.inf:0Win64/bcbtums-win8x64-brcm.inf:17Win64/btwaudio.inf:0Autorun.inf:0

Portanto,nestedriver,vocêpodeprocuraremWin32/bcbtums-win8x86-brcm.infouWin64/bcbtums-win8x64-brcm.inf.ExamineoarquivoelocalizeoarquivohexqueémencionadopertodeE07A:

;;;;;;;;;;;;;RAMUSBE07A;;;;;;;;;;;;;;;;;[RAMUSBE07A.CopyList]bcbtums.sysbtwampfl.sysBCM20702A1_001.002.014.1443.1496.hex

Portanto,ofimwareestánomesmodiretórioechamadoBCM20702A1_001.002.014.1443.1496.hex.

Convertendoecolocandoofirmware

Façaodownloadecompilea hex2hcd tool .

git clone https://github.com/jessesung/hex2hcd.git
cd hex2hcd
make

Converter o firmware para hcd :

hex2hcd BCM20702A1_001.002.014.1443.1496.hex firmware.hcd

Renomeie e mova o firmware para o subdiretório de firmware do sistema:

su -c 'mv firmware.hcd /lib/firmware/brcm/BCM20702A0-0489-e07a.hcd'

O nome deste arquivo é crítico. Os dois conjuntos de quatro caracteres, neste caso 0489-e07a , devem corresponder ao ID do fornecedor e ao ID do produto do seu dispositivo.

Carregando o Firmware

A maneira mais fácil de carregar o firmware é desligar o computador e ligá-lo novamente. Observe que o computador deve estar desligado; uma simples reinicialização pode não ser suficiente para recarregar este firmware.

    
por 12.03.2015 / 19:23
4

Seguindo os drs usando um atalho, consegui pegar o arquivo e obtive resultados possíveis. Meus dispositivos Bluetooth não puderam detectar dispositivos visíveis próximos, mas agora são.

O atalho que usei foi que, como meu computador não tem unidade óptica e tem o Windows pré-instalado, ele vem com uma partição cheia de drivers. Eu encontrei um diretório com pilhas de drivers bluetooth, mas olhando para o arquivo INF sugerido pelos drs, descobri que o dispositivo E07A estava vinculado ao arquivo do driver BCM20702A1_001.002.014.1483.1651.hex

Depois disso, eu compilei o programa de hex2hcd e convertei o arquivo para HCD. Eu tive que preservar a parte do nome BCM20702A1 ao invés de substituí-lo por BCM2070A0, conforme a mensagem "patch not found" do dmesg.

Não consegui emparelhar o meu dispositivo, mas poder analisar é definitivamente um passo em frente.

Se você precisar do arquivo HCD, por favor, envie uma mensagem para mim e esperamos enviá-lo para você em breve. Eu também vou enviá-lo para o linux bluetooth mailing list.

EDIT. Aparentemente, 1651 no nome do arquivo do driver do Windows HEX se refere ao número da compilação. Através do dmesg eu posso ver que o kernel afirma que 1651 é o número da compilação.

    
por 21.09.2015 / 19:15