O Bluetooth Broadcom 43142 não está funcionando

38

O Bluetooth está ativado, mas não pode ser encontrado ou encontrado por outros dispositivos.

Saída de sudo service bluetooth status:

● bluetooth.service - Bluetooth service
   Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset: enabled)
   Active: active (running) since ხუთ 2015-06-04 22:33:18 GET; 13min ago
 Main PID: 26678 (bluetoothd)
   CGroup: /system.slice/bluetooth.service
           └─26678 /usr/sbin/bluetoothd -n

ივნ 04 22:39:14 Rangoo bluetoothd[26678]: Endpoint registered: sender=:1.63 path=/MediaEndpoint/BlueZ4/HFPAG
ივნ 04 22:39:14 Rangoo bluetoothd[26678]: Endpoint registered: sender=:1.63 path=/MediaEndpoint/BlueZ4/HFPHS
ივნ 04 22:39:14 Rangoo bluetoothd[26678]: Endpoint registered: sender=:1.63 path=/MediaEndpoint/BlueZ4/A2DPSource
ივნ 04 22:39:14 Rangoo bluetoothd[26678]: Endpoint registered: sender=:1.63 path=/MediaEndpoint/BlueZ4/A2DPSink
ივნ 04 22:39:14 Rangoo bluetoothd[26678]: bluetoothd[26678]: Endpoint registered: sender=:1.63 path=/MediaEndpoint/BlueZ4/HFPAG
ივნ 04 22:39:14 Rangoo bluetoothd[26678]: bluetoothd[26678]: Endpoint registered: sender=:1.63 path=/MediaEndpoint/BlueZ4/HFPHS
ივნ 04 22:39:14 Rangoo bluetoothd[26678]: bluetoothd[26678]: Endpoint registered: sender=:1.63 path=/MediaEndpoint/BlueZ4/A2DPSource
ივნ 04 22:39:14 Rangoo bluetoothd[26678]: bluetoothd[26678]: Endpoint registered: sender=:1.63 path=/MediaEndpoint/BlueZ4/A2DPSink
ივნ 04 22:39:14 Rangoo bluetoothd[26678]: Adapter /org/bluez/26678/hci0 has been enabled
ივნ 04 22:39:14 Rangoo bluetoothd[26678]: bluetoothd[26678]: Adapter /org/bluez/26678/hci0 has been enabled

Saída de lsusb:

Bus 003 Device 005: ID 0a5c:21d7 Broadcom Corp. BCM43142 Bluetooth 4.0

Como posso corrigir isso?

Guja1501
fonte
Pergunta semelhante com uma resposta para o cartão 4352 askubuntu.com/questions/617513/...
Wilf

Respostas:

78

Você precisa instalar o firmware.

A distribuição do firmware da Broadcom não é permitida pela licença da Broadcom. Então você precisa obtê-lo. É um pouco complexo, mas não há outro caminho legal .

  1. Faça o download do driver do Broadcom Windows 8 ou AQUI .

    Se o seu dispositivo não estiver listado nesses drivers, você precisará encontrar uma versão mais recente em algum lugar. A Broadcom removeu os drivers mais recentes do site para torná-lo mais difícil.

    Alguns fornecedores de laptops possuem drivers Bluetooth em seus sites, mas alguns não são descompactáveis. Então é uma busca. Eu poderia baixar os drivers Broadcom mais recentes do site deles, mas ele não existe mais.

  2. Abra este arquivo pelo Archive Manager e encontre o bcbtums-win8x86-brcm.infarquivo. O nome do arquivo pode ser diferente em alguns drivers. Ele pode estar bcbtums.inflocalizado no diretório Win32 ou Win64. Não importa 32 ou 64 bits para fazer o download.

  3. Procure neste arquivo por VID_ 0A5C & PID_ 21D7 . Esses números são da sua lsusbsaída

    0a5c: 21d7 Broadcom Corp. BCM43142 Bluetooth 4.0.

    Comentário: Alguns dispositivos não são reconhecidos como Broadcom BT em lsusb. Se você não souber qual é o seu dispositivo BT, execute o usb-devicescomando, ele fornecerá informações mais detalhadas. Lá você pode encontrar IDs de produtos e fornecedores.

    Você verá alguma linha que termina com RAMUSB21D7

    Procure este arquivo por RAMUSB21D7. Você encontrará uma seção assim:

    [RAMUSB21D7.CopyList]
    bcbtums.sys
    btwampfl.sys
    BCM43142A0_001.001.011.0122.0126.hex
    

    É isso que estamos procurando. Nome do arquivo de firmware. BCM43142A0_001.001.011.0122.0126.hex

  4. Agora extraia esse firmware do mesmo arquivo de táxi.

    Então você precisa converter esse arquivo do formato hexadecimal para o hcd.

  5. Baixe a ferramenta para isso

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

    Você receberá a pasta hex2hcd em seu diretório pessoal.

  6. Coloque o arquivo de firmware na sua pasta pessoal e execute

    ~/hex2hcd/hex2hcd ~/BCM43142A0_001.001.011.0122.0126.hex ~/BCM43142A0-0a5c-21d7.hcd
    

    Você vê que 0a5c-21d7 é o ID do seu adaptador a partir de lsusb .

    Importante: para os kernels 4.2+, você chama esse arquivo como BCM.hcdalternativa.

    ~/hex2hcd/hex2hcd ~/BCM43142A0_001.001.011.0122.0126.hex ~/BCM.hcd
    

    Para os kernels, o nome do arquivo 4.8+ deve ser BCM-<VID>-<PID>.hcd, como BCM-0a5c-21d7.

    Para o kernel 5.0, o nome do arquivo é novamente BCM43142A0-0a5c-21d7.hcd

    Agora basta copiar BCM43142A0-0a5c-21d7.hcdou outro arquivo de acordo com a versão do kernel para o /lib/firmware/brcmdiretório

    sudo cp ~/BCM43142A0-0a5c-21d7.hcd /lib/firmware/brcm
    

    Para kernels 4.2+

    sudo cp ~/BCM.hcd /lib/firmware/brcm
    

    Para kernels 4.8+

    sudo cp ~/BCM-0a5c-21d7.hcd  /lib/firmware/brcm
    

    Você sempre pode verificar se o nome do arquivo está correto executando dmesg | grep -i blue. Haverá uma mensagem de erro se o arquivo não for encontrado.

    Se o nome do arquivo solicitado não corresponder ao arquivo que você criou, renomeie o hcdarquivo.

  7. Desligue e ligue o computador novamente. Não basta reiniciar!

    Seu adaptador receberá firmware e o bluetooth deve funcionar.

Tudo isso parece complicado, mas os advogados da Broadcom são os responsáveis ​​por isso. A maioria dos outros fornecedores permite redistribuir o firmware sob a condição de que seja feito acompanhado da licença.

Isso permite que os mantenedores do Linux incluam firmware nas distribuições.

Mas não no caso da Broadcom. É por isso que não é feito de maneira fácil.

Muitas pessoas podem converter todos os arquivos hexadecimais para hcd e disponibilizá-los. Ou apenas adicione-os ao linux-firmwarepacote do Ubuntu.

Mas não é legal : - ((

Pilot6
fonte
6
Na maioria das vezes, quando acordei meu laptop, o recarregamento do módulo bluetooth falha com um rastreamento de pilha do kernel. Se você precisar de bluetooth sem reiniciar, precisará descarregar o módulo bluetooth ( sudo modprobe -r btusb) e recarregá-lo ( sudo modprobe btusb) para que o blueooth funcione novamente. bugzilla.kernel.org/show_bug.cgi?id=81821
solsTiCe
11
Na etapa 6, o hex2hcd deve receber um arquivo de saída, como: hex2hcd [arquivo de entrada] -o [arquivo de saída] Você pode atualizar a resposta?
Minas Mina
Há um arquivo de saída na resposta. Ou o autor mudou isso? Ele costumava ser `arquivo de entrada hex2hcd arquivo de saída
Pilot6
4
Obrigado @ Pilot6 por atualizar a postagem principal. No meu caso, procurei o erro dmesgpara saber meu arquivo correto. Exemplo de saída do dmesg:[ 3.479417] bluetooth hci0: Direct firmware load for brcm/BCM-0a5c-6410.hcd failed with error -2 [ 3.479421] Bluetooth: hci0: BCM: Patch brcm/BCM-0a5c-6410.hcd not found
morhook 08/07
5
USUÁRIOS DO DUALBOOT: Observe que você pode extrair o firmware correto do seu sistema operacional Windows. Para fazer isso, vá para o Gerenciador de dispositivos do Windows, localize seu dispositivo Bluetooth, clique com o botão direito do mouse em Propriedades, Driver, Detalhes do driver. Lá você encontrará o caminho para o seu .hexarquivo, que pode ser copiado para o seu sistema Linux. Depois disso, siga as etapas 5 a 8. Esta resposta é excelente, a propósito.
Manu CJ
18

Aqui está um projeto que visa automatizar um pouco o processo: https://github.com/winterheart/broadcom-bt-firmware

copie o BCM para o diretório / nome correto, dependendo do kernel (como descrito acima).

No 4.8, eu não precisava de uma reinicialização, simplesmente em um terminal:

sudo modprobe -r btusb
sudo modprobe btusb

dmesg | grep -i blu

deve mostrar se está carregado. Verifique se o ID do hardware corresponde ao arquivo. Pode ser encontrado com:

lsusb

o que mostra isso no meu Lenovo (somente essa linha):

Bus 001 Device 006: ID 105b:e065 Foxconn International, Inc. BCM43142A0 Bluetooth module

Espero que ajude :)

Vincent Gerris
fonte
11
No meu caso (UtechSmart USB Bluetooth 4.0, ID do dispositivo: 0a5c: 21e8), os drivers do winterheart foram carregados, mas hcitool devainda não mostraram nenhum dispositivo, e houve um erro no syslog. Encontrei outro driver em plugable.com/2014/06/23/… que funcionou.
Greg Bray
8

É tudo o que você precisa: https://github.com/winterheart/broadcom-bt-firmware

Neste repositório, você pode encontrar mais informações e todos os drivers de placa sem fio Broadcom necessários .


Para ser mais concreto, dou as instruções que escrevi para mim:

Este tutorial pretende fazer com que a placa de rede sem fio / bluetooth Broadcom Corporation BCM43142 802.11b / g / n (rev 01) (ID do dispositivo: 0a5c: 216d) funcione em sistemas Linux (eu tentei no Elementary OS 0.4.1 Loki, com base em no Ubuntu 16.04.3 LTS).

Ele não funcionou para outros dispositivos, mas não deve variar muito deste procedimento para outros dispositivos Broadcom. Os drivers Broadcom necessários estão na pasta de repositório do GitHub no formato .hcd.

  1. Digite o seguinte comando para descobrir qual nome de driver o kernel está procurando ao carregar as unidades durante a inicialização:

    dmesg | grep -i 'firmware load'
    

    Tente este caso não encontre nada:

    dmesg | grep -i 'bluetooth'
    

    O resultado deve ser algo como isto:

    bluetooth hci0: Direct firmware load for brcm/BCM.hcd failed with error -2
    

    Explicação: no meu caso, o kernel está procurando o arquivo BCM.hcdno diretório em /lib/firmware/brcmque os drivers da Broadcom devem estar. Se o Kernel estiver procurando outro nome de driver, você deverá renomear o arquivo do driver ( BCM43142A0-0a5c-216c.hcdno meu caso, para o BCM43142 (0a5c: 216d)) como o nome exigido pelo kernel.

  2. Mova o driver renomeado (BCM.hcd) para o diretório inicial (/ home / YourUsername /) e execute o seguinte comando para movê-lo para a pasta que o kernel está visualizando durante a inicialização:

    sudo mv ~/BCM.hcd /lib/firmware/brcm
    

    Você deve usar o driver correspondente, dependendo do seu dispositivo, e renomeá-lo, se solicitado pelo kernel.

  3. Reinicie o computador e ele deve funcionar! * (Você pode entrar dmesg | grep -i 'bluetooth'novamente para verificar se o driver foi carregado)

Juan Gómez Carrillo
fonte
Funcionou! Muito obrigado! No meu caso, a versão "BCM43142 802.11b / g / n [14e4: 4365] (rev 01)" não estava disponível na pasta github, mas tentei com o BCM43142A0-185f-2167.hcd e funcionou!
Sriram Kannan