蓝牙已打开,但无法找到其他设备,也无法被任何其他设备找到。
输出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
我该如何修复它?
答案1
您需要安装固件。
Broadcom 许可证不允许分发 Broadcom 固件。因此您需要自己获取。这有点复杂,但没有其他合法的方式。
下载Broadcom Windows 8 驱动程序或者从这里。
如果您的设备未在这些驱动程序中列出,则您需要在某处找到它的较新版本。 Broadcom 从其站点中删除了最新的驱动程序,这使其变得更加困难。
一些笔记本电脑供应商在其网站上提供了蓝牙驱动程序,但其中一些无法解压。所以这是一个任务。我可以从他们的网站上下载最新的 Broadcom 驱动程序,但现在不再有。
通过存档管理器打开此文件并找到该
bcbtums-win8x86-brcm.inf
文件。文件的名称在某些驱动程序中可能有所不同。它可以bcbtums.inf
位于 Win32 或 Win64 目录中。下载 32 位或 64 位并不重要。在此文件中搜索 VID_0A5C&PID_21D7。这些数字来自您的
lsusb
输出0a5c:21d7Broadcom 公司 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
现在从同一个 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您的适配器的 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
文件。关闭计算机并重新打开。不只是重启!
您的适配器将获得固件并且蓝牙可以工作。
这一切看起来很复杂,但事实确实如此博通律师应该为此负责。大多数其他供应商允许重新分发固件,但必须附有许可证。
这允许 Linux 维护者在发行版中包含固件。
但 Broadcom 的情况并非如此。这就是为什么这件事很难做到。
许多人可以将所有 hex 文件转换为 hcd 并使其可用。或者只是将它们添加到linux-firmware
Ubuntu 的软件包中。
但这并不合法:-((
答案2
这是一个旨在使该过程稍微自动化的项目: https://github.com/winterheart/broadcom-bt-firmware
根据内核将 BCM 复制到正确的目录/名称(如上所述)。
在 4.8 上我不需要重新启动,只需在终端中:
sudo modprobe -r btusb
sudo modprobe btusb
dmesg | grep -i blu
应该会显示是否已加载。确保硬件 ID 与文件匹配。可以使用以下方法找到它:
lsusb
我的联想电脑上显示了这一点(只有那一行):
Bus 001 Device 006: ID 105b:e065 Foxconn International, Inc. BCM43142A0 Bluetooth module
希望对您有帮助:)
答案3
这就是你所需要的:https://github.com/winterheart/broadcom-bt-firmware
在此存储库中,您可以找到更多信息和需要所有 Broadcom 无线网卡驱动程序。
为了更具体地说明,我给你我为自己写的说明:
本教程旨在使无线/蓝牙网卡 Broadcom Corporation BCM43142 802.11b/g/n (rev 01)(设备 ID:0a5c:216d)在 Linux 系统上运行(我在基于 Ubuntu 16.04.3 LTS 的 Elementary OS 0.4.1 Loki 上尝试过)。
它可能不适用于其他设备,但对于其他 Broadcom 设备,此过程应该不会有太大差异。所需的 Broadcom 驱动程序位于此GitHub 的存储库文件夹.hcd 格式。
输入以下命令来发现内核在启动时加载驱动器时寻找哪个驱动程序名称:
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
目录下的文件。如果内核正在寻找另一个驱动程序名称,则必须将驱动程序文件(在我的例子中为 BCM43142 (0a5c:216d))重命名为内核所需的名称。/lib/firmware/brcm
BCM43142A0-0a5c-216c.hcd
将重命名的驱动程序(BCM.hcd)移动到您的主目录(/home/YourUsername/)并运行以下命令将其移动到内核在启动时查看的文件夹:
sudo mv ~/BCM.hcd /lib/firmware/brcm
您必须根据您的设备使用相应的驱动程序,并根据内核的要求重命名它。
重新启动计算机,它应该就可以工作了!*(您可以
dmesg | grep -i 'bluetooth'
再次输入以查看驱动程序是否已加载)
答案4
仍然面临固件错误吗?
尝试后上述答案中的这个解决方案很多次,无法创建 hex2hcd 文件。
我的错误如下:
$ dmesg | egrep -i 'blue|firm'
[ 0.108524] Spectre V2 : Enabling Restricted Speculation for firmware calls
[ 0.144995] ACPI: [Firmware Bug]: BIOS _OSI(Linux) query ignored
[ 4.768278] thinkpad_acpi: ThinkPad firmware release H1EC34WW doesn't match the known patterns
[ 4.808333] thinkpad_acpi: rfkill switch tpacpi_bluetooth_sw: radio is unblocked
[ 5.267304] Bluetooth: Core ver 2.22
[ 5.267329] Bluetooth: HCI device and connection manager initialized
[ 5.267333] Bluetooth: HCI socket layer initialized
[ 5.267335] Bluetooth: L2CAP socket layer initialized
[ 5.267339] Bluetooth: SCO socket layer initialized
[ 5.405755] Bluetooth: hci0: BCM: chip id 70
[ 5.406559] Bluetooth: hci0: BCM: features 0x06
[ 5.422570] Bluetooth: hci0: BCM43142A
[ 5.422575] Bluetooth: hci0: BCM43142A0 (001.001.011) build 0000
[ 5.424415] Bluetooth: hci0: BCM: firmware Patch file not found, tried:
[ 5.424420] Bluetooth: hci0: BCM: 'brcm/BCM43142A0-105b-e065.hcd'
[ 5.424421] Bluetooth: hci0: BCM: 'brcm/BCM-105b-e065.hcd'
[ 7.441899] Bluetooth: hci0: command 0x1003 tx timeout
[ 7.443566] Bluetooth: hci0: unexpected event for opcode 0x1003
[ 17.500493] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[ 17.500496] Bluetooth: BNEP filters: protocol multicast
[ 17.500501] Bluetooth: BNEP socket layer initialized
[ 38.846123] Bluetooth: RFCOMM TTY layer initialized
[ 38.846129] Bluetooth: RFCOMM socket layer initialized
[ 38.846136] Bluetooth: RFCOMM ver 1.11
- 我刚刚发现了另一种方法听到
方法是:
- 下载brcm/BCM43142A0-105b-e065.hcd文件来自broadcom-bt-固件
- 并粘贴到
/lib/firmware/brcm
文件夹。 - 为此,请使用以下命令。
命令:
sudo apt-get update && sudo apt-get install wget
sudo wget https://github.com/winterheart/broadcom-bt-firmware/raw/master/brcm/BCM43142A0-105b-e065.hcd -P /lib/firmware/brcm
- 重新启动你的电脑:)