解决Ubuntu蓝牙搜索不到附近设备的问题
针对 Ubuntu 蓝牙搜索不到附近设备的问题,本文通过分析发现是因为缺失 BCM.hcd 文件导致的,然后给出了相应的解决方案。
解决Ubuntu蓝牙搜索不到附近设备的问题
出现的问题
打开蓝牙搜索设备无果
原因分析
终端下输入命令
1 | dmesg | grep -i blue |
BCM: Patch brcm/BCM.hcd not found
提示缺少 BCM.hcd文件
解决步骤
实测该解决方法适用于 Ubuntu 16.04 和 18.04,其它版本未测试。
安装相关软件包
1
sudo apt-get install bluez*
输入
lsusb
查看蓝牙设备信息搜索并下载相应 cab 包
https://github.com/winterheart/broadcom-bt-firmware
也可以用命令进行下载
1
wget http://download.windowsupdate.com/d/msdownload/update/driver/drvs/2015/10/200006644_5f769d5f45e68840195d3bb24ef9d1ae2c791272.cab
安装 cab 解压工具
1
sudo apt install cabextract
解压下载好的 cab 包
解压后文件有很多,需要根据具体情况选择,我的固件是
BCM43142A0
,这里我选了BCM43142A0_001.001.011.0311.0327.hex
这里我用了
0311.0327.hex
这个文件,是因为这个文件名和我的电脑在 windows 下用到的一致,实际上直接拿 windwos 下的也可以。可以在自己电脑 windows 里面的
C:Windows/System32/drivers
文件夹下搜索.hex
文件,然后放到 Ubuntu 下面编译成.hcd
文件。选择正确的 hex 文件
上面通过 Windows 查看以确定需要的 hex 文件的方法比较麻烦,这里介绍另一种选择 hex 文件的方法。
https://askubuntu.com/questions/632336/bluetooth-broadcom-43142-isnt-working/632348#632348
在解压 cab 包之后,会有一堆的 hex 文件和其它的一些文件,其中有一个文件
bcbtums.inf
是我们要用到的。在bcbtums.inf
文件中搜索RAMUSB21D7.CopyList
,你将会看到你所需要的 hex 文件,如图:INF 是 Device INFormation File 的英文缩写,是 Microsoft 公司为硬件设备制造商发布其驱动程序推出的一种文件格式,INF 文件中包含硬件设备的信息或脚本以控制硬件操作。在 INF 文件中指明了硬件驱动该如何安装到系统中,源文件在哪里、安装到哪一个文件夹中、怎样在注册表中加入自身相关信息等等。 安装监视器、调制解调器和打印机等设备所需的驱动程序,都是通过 INF 文件,正是 INF 的功劳才使得 Windows 可以找到这些硬件设备的驱动并正确安装。
下载hex2hcd
有了对应固件的 hex 文件后,需要将该 hex 文件转成 hcd 文件
1
git clone https://github.com/jessesung/hex2hcd.git
编译生成可执行文件
1
2cd hex2hcd
make将 hex 文件转成 xxx.hcd
放到 firmware 文件夹下
1
sudo mv BCM43142A0_001.001.011.0311.0327.hcd /lib/firmware/brcm/BCM.hcd
这里因为缺少BCM.hcd,所以命名为BCM.hcd
重新加载模块
1
2sudo modprobe -r btusb
sudo modprobe btusb然后就可以在蓝牙的设置里搜索到其他设备了。
References
https://github.com/winterheart/broadcom-bt-firmware
https://reasonw.github.io/blog/2017/02/13/Ubuntu-Bluetooth/
https://askubuntu.com/questions/632336/bluetooth-broadcom-43142-isnt-working/632348#632348