蓝牙Broadcom 43142无法正常工作


38

蓝牙已打开,但无法找到或被其他任何设备找到。

输出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

输出lsusb

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

我该如何解决?


类似的问题,以及对4352卡的回答,askubuntu.com / questions / 617513 /…
威尔夫,

Answers:


78

您需要安装固件。

Broadcom许可证不允许分发Broadcom固件。因此,您需要自己获取。这有点复杂,但是没有其他合法的方法。

  1. 下载Broadcom Windows 8驱动程序从此处下载。

    如果这些驱动程序中未列出您的设备,则需要在某处找到该设备的较新版本。Broadcom从他们的站点上删除了最新的驱动程序,从而使其更加困难。

    一些笔记本电脑供应商在其站点上具有蓝牙驱动程序,但其中一些并非不可解压缩。所以这是一个追求。我可以从他们的站点下载最新的Broadcom驱动程序,但是现在不存在了。

  2. 通过存档管理器打开此文件并找到该bcbtums-win8x86-brcm.inf文件。在某些驱动程序中,文件名可能有所不同。它可以bcbtums.inf位于Win32或Win64目录中。下载32位或64位无关紧要。

  3. 在此文件中搜索VID_0 0A5C&PID_ 21D7。这些数字来自您的lsusb输出

    0a5c:21d7 Broadcom Corp. BCM43142蓝牙4.0。

    注释:某些设备未在中识别为Broadcom BT lsusb。如果不确定哪个是BT设备,请运行usb-devices命令,它将提供更多详细信息。在这里您可以找到产品和供应商ID。

    您将看到一些以RAMUSB21D7结尾的

    在此文件中搜索RAMUSB21D7。您将在此处找到类似的部分:

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

    这就是我们在寻找的东西。固件文件的名称。 BCM43142A0_001.001.011.0122.0126.hex

  4. 现在,从相同的cab文件中提取该固件。

    然后,您需要将此文件从十六进制转换为hcd格式。

  5. 为此下载工具

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

    您将在主目录中找到hex2hcd文件夹。

  6. 将固件文件放入主文件夹并运行

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

    您会从lsusb中看到0a5c-21d7是您的适配器的ID 。

    重要说明:对于4.2+内核,请BCM.hcd改为调用此文件。

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

    对于内核4.8+,文件名应为BCM-<VID>-<PID>.hcd,如BCM-0a5c-21d7

    对于内核5.0,文件名再次为 BCM43142A0-0a5c-21d7.hcd

    现在只需复制BCM43142A0-0a5c-21d7.hcd,或根据内核版本将另一个文件复制到/lib/firmware/brcm目录

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

    对于内核4.2+

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

    对于内核4.8+

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

    您始终可以通过运行来检查文件名是否正确dmesg | grep -i blue。如果找不到该文件,将出现错误消息。

    如果请求的文件名与您创建的文件不匹配,请重命名该hcd文件。

  7. 关闭计算机,然后重新打开。不只是重启!

    您的适配器将获得固件,并且蓝牙应该可以工作。

所有这些看起来都很复杂,但这应该归咎于Broadcom的律师。大多数其他供应商都允许在附带许可证的情况下重新分发固件。

这使Linux维护人员可以在发行版中包含固件。

但对于Broadcom则不是。这就是为什么它没有简单的方法。

许多人可以将所有十六进制文件转换为hcd并使它们可用。或者只是将它们添加到linux-firmwareUbuntu软件包中。

但这是不合法的:-((


6
在大多数情况下,当我唤醒笔记本电脑时,由于内核堆栈跟踪,蓝牙模块的重新加载失败。如果需要蓝牙而不重启,则需要卸载蓝牙模块(sudo modprobe -r btusb),然后重新加载(sudo modprobe btusb),蓝牙才能再次工作。bugzilla.kernel.org/show_bug.cgi?id=81821
solsTiCe 2015年

1
在第6步中,必须给hex2hcd一个输出文件,例如:hex2hcd [输入文件] -o [输出文件]您能否更新答案?
米纳斯吉米娜

答案中有输出文件。还是作者更改了它。它曾经是`hex2hcd输入文件输出文件
Pilot6 '16

4
感谢@ Pilot6更新主要帖子。就我而言,我查看错误dmesg以了解我的正确文件。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 '16

5
DUALBOOT用户:请注意,您可以从Windows操作系统中提取正确的固件。为此,请转到Windows设备管理器,找到您的蓝牙设备,右键单击“属性”,“驱动程序”,“驱动程序详细信息”。在这里,您将找到.hex文件的路径,可以将其复制到Linux系统。之后,请按照步骤5-8。顺便说一句,这个答案很好。
Manu CJ

18

这是一个旨在使过程自动化的项目:https : //github.com/winterheart/broadcom-bt-firmware

根据内核将BCM复制到正确的目录/名称(如上所述)。

在4.8上,我不需要重启,只需在终端中即可:

sudo modprobe -r btusb
sudo modprobe btusb

dmesg | grep -i blu

应该显示它是否已加载。确保硬件ID与文件匹配。可以找到:

lsusb

这在我的Lenovo上显示了这一点(仅此行):

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

希望对您有所帮助:)


1
就我而言(UtechSmart USB蓝牙4.0设备ID:0a5c:21e8),Winterheart驱动程序已加载,但hcitool dev仍未显示任何设备,并且syslog中出现错误。在plugable.com/2014/06/23/…上找到了另一个有效的驱动程序。
格雷格·布雷

8

这就是您需要的全部:https//github.com/winterheart/broadcom-bt-firmware

在这个库中,您可以找到更多的信息和所需要的所有Broadcom的无线网卡驱动程序


更具体地说,我给你我写给自己的说明:

本教程旨在使无线/蓝牙网卡Broadcom Corporation BCM43142 802.11b / g / n(rev 01)(设备ID:0a5c:216d)在Linux系统上工作(我在Elementary OS 0.4.1上尝试过)在Ubuntu 16.04.3 LTS上)。

它不适用于其他设备,但与其他Broadcom设备的此过程应该相差不大。所需的Broadcom驱动程序以.hcd格式位于此GitHub的存储库文件夹中。

  1. 输入以下命令以发现引导时加载驱动器时要寻找的内核是哪个驱动器名称:

    dmesg | grep -i 'firmware load'
    

    如果找不到任何内容,请尝试以下方法:

    dmesg | grep -i 'bluetooth'
    

    结果应该是这样的:

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

    说明:在我的情况下,内核正在寻找Broadcom驱动程序所在BCM.hcd目录下的文件/lib/firmware/brcm。如果内核正在寻找其他驱动程序名称,则必须由内核将驱动程序文件(BCM43142A0-0a5c-216c.hcd在我的情况下为BCM43142(0a5c:216d))重命名为所需的名称。

  2. 将重命名的驱动程序(BCM.hcd)移动到您的主目录(/ home / YourUsername /)并运行以下命令,以将其移动到启动时内核正在查找的文件夹中:

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

    您必须根据设备使用相应的驱动程序,并根据内核要求重命名该驱动程序。

  3. 重新启动计算机,它应该可以工作!*(您可以dmesg | grep -i 'bluetooth'再次输入以查看驱动程序是否已加载)


有效!非常感谢!在我的情况下,github文件夹中没有“ BCM43142 802.11b / g / n [14e4:4365](rev 01)”版本,但我只是使用BCM43142A0-185f-2167.hcd进行了尝试,并且可以正常工作!
Sriram Kannan '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.