Bluetooth Broadcom 43142 no funciona

38

Bluetooth está activado pero ningún otro dispositivo puede encontrarlo ni encontrarlo.

Salida 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

Salida de lsusb:

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

¿Cómo puedo arreglarlo?

Guja1501
fuente
Pregunta similar con una respuesta para la tarjeta 4352 askubuntu.com/questions/617513/…
Wilf

Respuestas:

78

Necesitas instalar el firmware.

La distribución de firmware Broadcom no está permitida por la licencia Broadcom. Entonces necesitas obtenerlo tú mismo. Es un poco complejo, pero no hay otra forma legal .

  1. Descargue el controlador Broadcom Windows 8 o DESDE AQUÍ .

    Si su dispositivo no figura en la lista de estos controladores, deberá encontrar una versión más nueva en algún lugar. Broadcom eliminó los últimos controladores de su sitio para hacerlo más difícil.

    Algunos proveedores de computadoras portátiles tienen controladores Bluetooth en sus sitios, pero algunos de ellos no son descomprimibles. Entonces es una búsqueda. Podría descargar los últimos controladores de Broadcom de su sitio, pero ya no está allí.

  2. Abra este archivo con Archive Manager y busque el bcbtums-win8x86-brcm.infarchivo. El nombre del archivo puede diferir en algunos controladores. Se puede bcbtums.infubicar en el directorio Win32 o Win64. No importa 32 o 64 bits para descargar.

  3. Busque este archivo para VID_ 0A5C y PID_ 21D7 . Estos números son de su lsusbsalida

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

    Comentario: algunos dispositivos no se reconocen como Broadcom BT in lsusb. Si no está seguro de cuál es su dispositivo BT, ejecute el usb-devicescomando, le dará información más detallada. Allí puede encontrar identificaciones de productos y proveedores.

    Verá alguna línea que termina con RAMUSB21D7

    Busque este archivo para RAMUSB21D7. Encontrará una sección así:

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

    Eso es lo que estamos buscando. Nombre del archivo de firmware. BCM43142A0_001.001.011.0122.0126.hex

  4. Ahora extraiga ese firmware del mismo archivo de cabina.

    Luego debe convertir este archivo de formato hexadecimal a hcd.

  5. Descargue la herramienta para eso

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

    Obtendrá hex2hcd carpeta en su directorio personal.

  6. Coloque el archivo de firmware en su carpeta de inicio y ejecute

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

    Verá que 0a5c-21d7 es la identificación de su adaptador de lsusb .

    Importante: Para los núcleos 4.2+ llama a este archivo como en su BCM.hcdlugar.

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

    Para los núcleos 4.8+, el nombre del archivo debe ser BCM-<VID>-<PID>.hcd, como BCM-0a5c-21d7.

    Para el kernel 5.0, el nombre del archivo es nuevamente BCM43142A0-0a5c-21d7.hcd

    Ahora solo copie BCM43142A0-0a5c-21d7.hcdu otro archivo de acuerdo con la versión del kernel al /lib/firmware/brcmdirectorio por

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

    Para granos 4.2+

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

    Para granos 4.8+

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

    Siempre puedes consultar si el nombre del archivo es correcto ejecutando dmesg | grep -i blue. Habrá un mensaje de error si no se encuentra el archivo.

    Si el nombre del archivo solicitado no coincide con el archivo que creó, cambie el nombre del hcdarchivo.

  7. Apague y encienda su computadora nuevamente. ¡No solo reiniciar!

    Su adaptador obtendrá firmware y Bluetooth debería funcionar.

Todo esto parece complicado, pero es Broadcom culpa de los abogados de . La mayoría de los otros proveedores permiten redistribuir el firmware con la condición de que se haga junto con la licencia.

Eso permite a los mantenedores de Linux incluir firmware en las distribuciones.

Pero no en el caso de Broadcom. Por eso no se hace de una manera fácil.

Muchas personas podrían convertir todos los archivos hexadecimales a hcd y ponerlos a disposición. O simplemente agréguelos al linux-firmwarepaquete de Ubuntu.

Pero no es legal : - ((

Piloto6
fuente
66
La mayoría de las veces cuando desperté mi computadora portátil, la recarga del módulo bluetooth falla con un seguimiento de la pila del kernel. Si necesita bluetooth sin reiniciar, deberá descargar el módulo bluetooth ( sudo modprobe -r btusb) y volver a cargarlo ( sudo modprobe btusb) para que blueooth vuelva a funcionar. bugzilla.kernel.org/show_bug.cgi?id=81821
solsticio de
1
En el paso 6, a hex2hcd se le debe dar un archivo de salida, como: hex2hcd [input-file] -o [output-file] ¿Puede actualizar la respuesta?
Minas Mina
Hay un archivo de salida en la respuesta. ¿O el autor lo cambió? Solía ​​ser `hex2hcd input-file output-file
Pilot6 el
44
Gracias @ Pilot6 por actualizar la publicación principal. En mi caso busqué el error dmesgpara saber mi archivo correcto. Ejemplo de salida de 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
55
USUARIOS DUALBOOT: Tenga en cuenta que puede extraer el firmware correcto de su sistema operativo Windows. Para hacerlo, vaya al Administrador de dispositivos de Windows, busque su dispositivo Bluetooth, haga clic con el botón derecho, Propiedades, Controlador, Detalles del controlador. Allí encontrará la ruta a su .hexarchivo, que puede copiar a su sistema Linux. Después de eso, siga los pasos 5-8. Esta respuesta es excelente, por cierto.
Manu CJ
18

Aquí hay un proyecto que tiene como objetivo automatizar un poco el proceso: https://github.com/winterheart/broadcom-bt-firmware

copie el BCM en el directorio / nombre correcto según el núcleo (como se describió anteriormente).

En 4.8 no necesitaba reiniciar, simplemente en un terminal:

sudo modprobe -r btusb
sudo modprobe btusb

dmesg | grep -i blu

debería mostrar si está cargado. Asegúrese de que la identificación del hardware coincida con el archivo. Se puede encontrar con:

lsusb

que muestra esto en mi Lenovo (solo esa línea):

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

Espero que eso ayude :)

Vincent Gerris
fuente
1
En mi caso (UtechSmart USB Bluetooth 4.0 Id. Del dispositivo: 0a5c: 21e8) los controladores de heartheart se cargaron pero hcitool devtodavía no mostraban ningún dispositivo y hubo un error en syslog. Encontré otro controlador en plugable.com/2014/06/23/… que funcionó.
Greg Bray
8

Eso es todo lo que necesitas: https://github.com/winterheart/broadcom-bt-firmware

En este repositorio puede encontrar más información y todos los controladores de tarjeta inalámbrica Broadcom necesarios .


Para ser más concreto, te doy las instrucciones que escribí para mí:

Este tutorial está destinado a hacer que la tarjeta de red inalámbrica / bluetooth Broadcom Corporation BCM43142 802.11b / g / n (rev 01) (ID de dispositivo: 0a5c: 216d) funcione en sistemas Linux (lo probé en Elementary OS 0.4.1 Loki, basado en Ubuntu 16.04.3 LTS).

No podría funcionar para otros dispositivos, pero no debería variar demasiado de este procedimiento para otros dispositivos Broadcom. Los controladores Broadcom necesarios están en la carpeta de reposo de este GitHub en formato .hcd.

  1. Ingrese el siguiente comando para descubrir qué nombre de controlador busca el núcleo al cargar las unidades durante el arranque:

    dmesg | grep -i 'firmware load'
    

    Pruebe este si no encuentra nada:

    dmesg | grep -i 'bluetooth'
    

    El resultado debería ser algo como esto:

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

    Explicación: en mi caso, el núcleo está buscando el archivo BCM.hcden el directorio /lib/firmware/brcmdonde se espera que estén los controladores de Broadcom. Si el núcleo está buscando otro nombre de controlador, debe cambiar el nombre del archivo del controlador ( BCM43142A0-0a5c-216c.hcden mi caso para el BCM43142 (0a5c: 216d)) al nombre requerido por el núcleo.

  2. Mueva el controlador renombrado (BCM.hcd) a su directorio de inicio (/ home / YourUsername /) y ejecute el siguiente comando para moverlo a la carpeta que el núcleo está mirando durante el arranque:

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

    Debe usar el controlador correspondiente según su dispositivo y cambiarle el nombre si se lo solicita para el núcleo.

  3. ¡Reinicie su computadora y debería funcionar! * (Puede ingresar dmesg | grep -i 'bluetooth'una vez más para ver si el controlador se ha cargado)

Juan Gómez Carrillo
fuente
¡Funcionó! ¡Muchas gracias! En mi caso, la versión "BCM43142 802.11b / g / n [14e4: 4365] (rev 01)" no estaba disponible en la carpeta github, ¡pero acabo de probarla con BCM43142A0-185f-2167.hcd y funcionó!
Sriram Kannan