问题描述
蓝牙已打开,但无法找到或被其他任何设备找到。
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固件。因此,您需要自己获取。这有点复杂,但是没有其他合法的方法。
-
下载Broadcom Windows 8 driver或FROM HERE。如果这些驱动程序中未列出您的设备,则需要在某处找到该设备的较新版本。 Broadcom从他们的站点上删除了最新的驱动程序,从而使其更加困难。一些笔记本电脑供应商在其站点上具有蓝牙驱动程序,但其中一些并非不可解压缩。所以这是一个追求。我可以从他们的站点下载最新的Broadcom驱动程序,但是现在不存在了。
-
通过存档管理器打开此文件,然后找到
bcbtums-win8x86-brcm.inf
文件。在某些驱动程序中,文件名可能有所不同。它可以是位于Win32或Win64目录中的bcbtums.inf
。下载32位或64位无关紧要。 -
在此文件中搜索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
-
现在,从相同的cab文件中提取该固件。然后,您需要将此文件从十六进制转换为hcd格式。
-
为此下载工具
git clone git://github.com/jessesung/hex2hcd.git cd hex2hcd make
您将在主目录中找到hex2hcd文件夹。
-
将固件文件放入主文件夹并运行
~/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
文件。 -
关闭计算机,然后重新打开。不只是重启!您的适配器将获得固件,并且蓝牙应该可以工作。
所有这些看起来都很复杂,但这应该归咎于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上。
-
输入以下命令,以发现引导时加载驱动器时要寻找的内核是哪个驱动器名称:
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
)。 -
将重命名的驱动程序(BCM.hcd)移动到您的主目录(/home /YourUsername /)并运行以下命令,以将其移动到启动时内核正在查找的文件夹中:
sudo mv ~/BCM.hcd /lib/firmware/brcm
您必须根据设备使用相应的驱动程序,并根据内核的要求对其进行重命名。
-
重新启动计算机,它应该可以工作!*(您可以再次输入
dmesg | grep -i 'bluetooth'
以查看驱动程序是否已加载)