当前位置: 首页>>技术教程>>正文


drivers – 蓝牙Broadcom 43142无法正常工作

, , , ,

问题描述

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

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

我该如何解决?

最佳回答

您需要安装固件。

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

  1. 下载Broadcom Windows 8 driverFROM HERE。如果这些驱动程序中未列出您的设备,则需要在某处找到该设备的较新版本。 Broadcom从他们的站点上删除了最新的驱动程序,从而使其更加困难。一些笔记本电脑供应商在其站点上具有蓝牙驱动程序,但其中一些并非不可解压缩。所以这是一个追求。我可以从他们的站点下载最新的Broadcom驱动程序,但是现在不存在了。

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

  3. 在此文件中搜索VID_0A5C& PID_21D7。这些数字来自您的lsusb输出

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

    注释:在lsusb中,某些设备未被识别为Broadcom BT。如果不确定哪个是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
    

    您会看到0a5c-21d7是lsusb中适配器的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的律师。其他大多数供应商都允许re-distribute固件,条件是必须随许可证一起完成固件。

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

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

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

但这是不合法的:-((

次佳回答

这是一个旨在使过程自动化的项目: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

希望对您有所帮助:)

第三种回答

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

在此存储库上,您可以找到更多信息和all Broadcom wireless card drivers needed


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

本教程旨在使无线/蓝牙网卡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’s reposity folder上。

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

    dmesg | grep -i 'firmware load'
    

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

    dmesg | grep -i 'bluetooth'
    

    结果应该是这样的:

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

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

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

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

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

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/8389.html,未经允许,请勿转载。