1. 问题描述
打开蓝牙搜索设备无果
2. 问题症结
终端下输入命令
dmesg | grep -i blue
BCM: Patch brcm/BCM.hcd not found
提示缺少BCM.hcd文件
3. 解决办法
-
安装相关软件包
sudo apt-get install bluez*
-
输入
lsusb
查看蓝牙设备信息
-
搜索并下载相应cab包
https://github.com/winterheart/broadcom-bt-firmware
也可以用命令进行下载wget http://download.windowsupdate.com/d/msdownload/update/driver/drvs/2015/10/200006644_5f769d5f45e68840195d3bb24ef9d1ae2c791272.cab
-
安装cab解压工具
sudo apt install cabextract
-
解压下载好的cab包
解压后文件有很多,需要根据具体情况选择,我的固件是BCM43142A0
,这里我选了BCM43142A0_001.001.011.0311.0327.hex
你可能会问了,这么多hex文件,你怎么就知道要用那一个呢。其实我这里用了0311.0327.hex
这个文件,是因为这个文件名和我的电脑在windows下用到的一致,实际上直接拿windwos下的也可以。 -
选择正确的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文件git clone https://github.com/jessesung/hex2hcd.git
编译生成可执行文件
cd hex2hcd make
-
将hex文件转成xxx.hcd
放到firmware文件夹下sudo mv BCM43142A0_001.001.011.0311.0327.hcd /lib/firmware/brcm/BCM.hcd
这里因为缺少BCM.hcd,所以命名为BCM.hcd
-
重新加载模块
sudo 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