修复 Ubuntu 蓝牙(BCM43142)

Broadcom BCM43142 是 Wi-Fi 蓝牙二合一的适配器,在 Ubuntu 的附加驱动里已经提供了无线网络的私有驱动,但是蓝牙的驱动还是个问题。默认情况下打开蓝牙并不能搜索到设备或被搜索到,无法正常使用。

Drivers

上网搜索了一番,发现了解决方案。

首先使用 lsusb 命令,结果如下。

1
2
3
4
5
6
7
8
9
Bus 004 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 003: ID 04f2:b3aa Chicony Electronics Co., Ltd
Bus 003 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 24ae:2000
Bus 001 Device 002: ID 1532:0042 Razer USA, Ltd
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

没有描述的那一行,即为 BCM43142 设备。在部分机器上结果略有不同,有些描述会写明 Broadcom Corp. BCM43142 Bluetooth 4.0

接下来需要获取 Windows 下 .hex 格式驱动文件,到 C:\windows\system32\drivers 下寻找,文件名类似 BCM43xxxxxxx.hex。也可以到设备管理器,蓝牙属性里的驱动详情查看文件位置。

还需要将获取到的 hex 文件转换为 hcd 文件。

1
2
3
4
5
6
$ cd ~/bt
$ git clone git://github.com/jessesung/hex2hcd.git
$ cd hex2hcd
$ make
$./hex2hcd ../BCM43142A0_001.001.011.0161.0172.hex BCM43142A0-24ae-2000.hcd
$ sudo cp BCM43142A0-24ae-2000.hcd /lib/firmware

最后重启机器。

注意

以上方法为原参考链接提供,针对 Ubuntu 14.04.2。在 Ubuntu 15.10 上测试时打开蓝牙,终端 dmesg 信息显示:

1
Bluetooth: Direct firmware load for brcm/BCM.hcd failed with error -2

需将 hcd 文件的文件名改为 BCM.hcd,并且上面最后一步应改为将 BCM.hcd 文件拷贝到 /lib/firmware/brcm 文件夹中,重启即可。

It works

It works!

Update: 有时会遇到蓝牙无法打开的问题,原因未知,错误信息:

1
2
Bluetooth: hci0 command 0x1001 tx timeout
Bluetooth: hci0: BCM: Reading local version info failed (-110)

使用 rfkill unblock bluetooth 命令可成功启用蓝牙,原理不明,欢迎指教。


参考链接:Fix dell bluetooth on ubuntu 14.04