Bluetooth Broadcom 43142 funktioniert nicht

38

Bluetooth ist aktiviert, kann aber von keinem anderen Gerät gefunden werden.

Ausgabe von 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

Ausgabe von lsusb:

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

Wie kann ich es reparieren?

Guja1501
quelle
Ähnliche Frage mit einer Antwort für die 4352 Karte askubuntu.com/questions/617513/…
Wilf

Antworten:

78

Sie müssen die Firmware installieren.

Die Weitergabe der Broadcom-Firmware ist gemäß der Broadcom-Lizenz nicht zulässig. Sie müssen es sich also selbst besorgen. Es ist ein bisschen komplex, aber es gibt keinen anderen legalen Weg.

  1. Laden Sie den Broadcom Windows 8-Treiber herunter oder HIER .

    Wenn Ihr Gerät in diesen Treibern nicht aufgeführt ist, müssen Sie irgendwo eine neuere Version finden. Broadcom hat die neuesten Treiber von ihrer Site entfernt, um dies zu erschweren.

    Einige Laptop-Anbieter haben Bluetooth-Treiber auf ihren Websites, einige können jedoch nicht entpackt werden. Es ist also eine Suche. Ich könnte die neuesten Broadcom-Treiber von ihrer Website herunterladen, aber es ist nicht mehr da.

  2. Öffnen Sie diese Datei mit dem Archiv-Manager und suchen Sie sie bcbtums-win8x86-brcm.inf. Der Name der Datei kann in einigen Treibern abweichen. Es kann bcbtums.infsich im Win32- oder Win64-Verzeichnis befinden. Das Herunterladen von 32 oder 64 Bit spielt keine Rolle.

  3. Durchsuchen Sie diese Datei nach VID_ 0A5C & PID_ 21D7 . Diese Zahlen stammen aus Ihrer lsusbAusgabe

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

    Kommentar: Einige Geräte werden in nicht als Broadcom BT erkannt lsusb. Wenn Sie sich nicht sicher sind, welches Ihr BT-Gerät ist, führen Sie den usb-devicesBefehl aus, um detailliertere Informationen zu erhalten. Dort finden Sie Produkt- und Lieferanten-IDs.

    Sie werden eine Zeile sehen, die mit RAMUSB21D7 endet

    Durchsuchen Sie diese Datei nach RAMUSB21D7. Dort finden Sie einen Abschnitt wie diesen:

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

    Das suchen wir. Name der Firmware-Datei. BCM43142A0_001.001.011.0122.0126.hex

  4. Extrahieren Sie nun diese Firmware aus derselben CAB-Datei.

    Dann müssen Sie diese Datei von hex in das hcd-Format konvertieren.

  5. Laden Sie das Tool dafür herunter

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

    Sie erhalten den hex2hcd- Ordner in Ihrem Home-Verzeichnis.

  6. Legen Sie die Firmware-Datei in Ihren Home-Ordner und führen Sie sie aus

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

    Sie sehen, dass 0a5c-21d7 die ID Ihres Adapters von lsusb ist .

    Wichtig: Für Kernel 4.2+ rufen Sie diese Datei BCM.hcdstattdessen als auf .

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

    Für Kernel 4.8+ sollte der Name der Datei BCM-<VID>-<PID>.hcdwie folgt lauten BCM-0a5c-21d7.

    Für Kernel 5.0 lautet der Dateiname erneut BCM43142A0-0a5c-21d7.hcd

    Jetzt einfach kopieren BCM43142A0-0a5c-21d7.hcd, oder eine andere Datei entsprechend der Kernelversion ins /lib/firmware/brcmVerzeichnis kopieren

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

    Für Kernel 4.2+

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

    Für Kernel 4.8+

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

    Sie können jederzeit überprüfen, ob der Dateiname korrekt ist, indem Sie ausführen dmesg | grep -i blue. Es wird eine Fehlermeldung angezeigt, wenn die Datei nicht gefunden wird.

    Wenn der angeforderte Dateiname nicht mit der von Ihnen erstellten Datei übereinstimmt, benennen Sie die hcdDatei um.

  7. Schalten Sie Ihren Computer aus und wieder ein. Nicht nur neustarten!

    Ihr Adapter erhält Firmware und Bluetooth sollte funktionieren.

All dies sieht kompliziert aus, aber es sind die Anwälte von Broadcom , die dafür verantwortlich sind. Die meisten anderen Anbieter gestatten die Weiterverteilung von Firmware unter der Bedingung, dass dies zusammen mit der Lizenz erfolgt.

Dadurch können Linux-Maintainer Firmware in Distributionen einbinden.

Aber nicht bei Broadcom. Deshalb ist es nicht einfach.

Viele Leute könnten alle Hex-Dateien in hcd konvertieren und verfügbar machen. Oder füge sie einfach dem linux-firmwareUbuntu-Paket hinzu.

Aber es ist nicht legal : - ((

Pilot6
quelle
6
In den meisten Fällen, in denen ich meinen Laptop aufgeweckt habe, schlägt das Neuladen des Bluetooth-Moduls mit einem Kernel-Stack-Trace fehl. Wenn Sie Bluetooth ohne Neustart benötigen, müssen Sie das Bluetooth-Modul entladen ( sudo modprobe -r btusb) und neu laden ( sudo modprobe btusb), damit Blueooth wieder funktioniert. bugzilla.kernel.org/show_bug.cgi?id=81821
solsTiCe
1
In Schritt 6 muss hex2hcd eine Ausgabedatei zugewiesen werden, z. B .: hex2hcd [Eingabedatei] -o [Ausgabedatei] Können Sie die Antwort bitte aktualisieren?
Minas Mina
Die Antwort enthält eine Ausgabedatei. Oder hat der Autor das geändert? Es war `hex2hcd Input-Datei Output-Datei
Pilot6
4
Vielen Dank an @ Pilot6 für die Aktualisierung des Hauptbeitrags. In meinem Fall habe ich nach dem Fehler gesucht dmesg, um meine korrekte Datei zu ermitteln. Beispiel dmesg Ausgabe:[ 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
5
DUALBOOT-BENUTZER: Beachten Sie, dass Sie die richtige Firmware von Ihrem Windows-Betriebssystem extrahieren können. Wechseln Sie dazu zum Windows-Geräte-Manager, suchen Sie Ihr Bluetooth-Gerät, klicken Sie mit der rechten Maustaste auf Eigenschaften, Treiber, Treiberdetails. Dort finden Sie den Pfad zu Ihrer .hexDatei, den Sie auf Ihr Linux-System kopieren können. Folgen Sie danach den Schritten 5-8. Diese Antwort ist übrigens hervorragend.
Manu CJ
18

Hier ist ein Projekt, das darauf abzielt, den Prozess ein wenig zu automatisieren: https://github.com/winterheart/broadcom-bt-firmware

Kopieren Sie das BCM je nach Kernel in das richtige Verzeichnis / den richtigen Namen (wie oben beschrieben).

Auf 4.8 brauchte ich keinen Neustart, einfach in einem Terminal:

sudo modprobe -r btusb
sudo modprobe btusb

dmesg | grep -i blu

sollte anzeigen, ob es geladen ist. Stellen Sie sicher, dass die Hardware-ID mit der Datei übereinstimmt. Es kann gefunden werden mit:

lsusb

Das zeigt dies auf meinem Lenovo (nur diese Zeile):

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

Ich hoffe das hilft :)

Vincent Gerris
quelle
1
In meinem Fall (UtechSmart USB Bluetooth 4.0 Geräte-ID: 0a5c: 21e8) wurden die winterheart-Treiber geladen, es wurden jedoch hcitool devnoch keine Geräte angezeigt , und im Syslog ist ein Fehler aufgetreten. Auf plugable.com/2014/06/23/… wurde ein anderer Treiber gefunden , der funktioniert hat.
Greg Bray
8

Das ist alles was Sie brauchen: https://github.com/winterheart/broadcom-bt-firmware

In diesem Repository finden Sie weitere Informationen und alle benötigten Treiber für Broadcom-Funkkarten .


Um genauer zu sein, gebe ich Ihnen die Anweisungen, die ich für mich selbst geschrieben habe:

Mit diesem Tutorial soll die Funk- / Bluetooth-Netzwerkkarte Broadcom Corporation BCM43142 802.11b / g / n (Version 01) (Geräte-ID: 0a5c: 216d) auf Linux-Systemen (ich habe sie auf Elementary OS 0.4.1 Loki ausprobiert) funktionieren auf Ubuntu 16.04.3 LTS).

Es könnte nicht für andere Geräte funktionieren, aber es sollte nicht zu sehr von diesem Verfahren für andere Broadcom-Geräte abweichen. Die benötigten Broadcom-Treiber befinden sich im Reposity-Ordner dieses GitHubs im .hcd-Format.

  1. Geben Sie den folgenden Befehl ein, um herauszufinden, nach welchem ​​Treibernamen der Kernel sucht, wenn Sie die Laufwerke beim Booten laden:

    dmesg | grep -i 'firmware load'
    

    Versuchen Sie dies, wenn es nichts findet:

    dmesg | grep -i 'bluetooth'
    

    Das Ergebnis sollte ungefähr so ​​aussehen:

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

    Erläuterung: In meinem Fall sucht der Kernel nach der Datei BCM.hcdin dem Verzeichnis, /lib/firmware/brcmin dem sich die Broadcom-Treiber befinden sollen. Wenn der Kernel nach einem anderen BCM43142A0-0a5c-216c.hcdTreibernamen sucht, müssen Sie die Treiberdatei ( in meinem Fall für das BCM43142 (0a5c: 216d)) vom Kernel in den erforderlichen Namen umbenennen.

  2. Verschieben Sie den umbenannten Treiber (BCM.hcd) in Ihr Home-Verzeichnis (/ home / YourUsername /) und führen Sie den folgenden Befehl aus, um ihn in den Ordner zu verschieben, auf den der Kernel beim Booten zugreift:

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

    Sie müssen den entsprechenden Treiber abhängig von Ihrem Gerät verwenden und ihn umbenennen, wenn Sie für den Kernel dazu aufgefordert werden.

  3. Starten Sie Ihren Computer neu und es sollte funktionieren! * (Sie können erneut eingeben dmesg | grep -i 'bluetooth', um zu sehen, ob der Treiber geladen wurde)

Juan Gómez Carrillo
quelle
Es funktionierte! Vielen Dank! In meinem Fall war die Version "BCM43142 802.11b / g / n [14e4: 4365] (rev 01)" nicht im Ordner "github" verfügbar, aber ich habe es gerade mit BCM43142A0-185f-2167.hcd versucht und es hat funktioniert!
Sriram Kannan