Debian 中 BCM43142 蓝牙无法使用问题
判断系统中是否安装了相应的驱动程序
执行 dmesg | grep bluetooth 发现存在下面的错误:
bluetooth hci0: firmware: failed to load brcm/BCM43142A0-04ca-2006.hcd (-2)
hcd 后缀表明缺少主机控制器驱动。这个 hcd 的全称是 “Host Controller Driver” 。从这里我发现我的系统中缺少蓝牙驱动。这时我并不清楚我的系统中是否存在这个文件,无法加载也可能是路径问题。因此我执行 locate BCM43142A0-04ca-2006.hcd 命令在系统中查找该文件,没有查找到文件。于是开始 google 查询。在查询的结果中定位到一个github项目——broadcom-bt-firmware 项目,在该项目中我找到了我缺少的硬件驱动文件,将后缀名为 hcd 的文件下载到了本地。
在 /lib/firmware 目录中创建 brcm 文件夹,然后将下载的驱动文件复制到该文件夹下并重启电脑。重启后我检查 dmesg 中的信息如下:
bluetooth hci0: firmware: direct-loading firmware brcm/BCM43142A0-04ca-2006.hcd
上面的信息表明系统已经成功加载驱动文件,解决了缺少驱动的问题。
执行 hciconfig 启动 hci0 设备
[longyu@debian:16:47:20] firmware $ sudo hciconfig hci0 up
Can’t init device hci0: Operation not possible due to RF-kill (132)
启动设备失败,google 发现原来要使用 rfkill 来 unblock hci0,以 root 权限执行 rfkill list 发现系统中并未安装此命令。于是通过 apt-get install rfkill 安装这个包。
安装成功后执行命令
sudo rfkill unblock bluetooth
sudo rfkill list
rfkill 的部分输出结果如下:
11: hci0: Bluetooth
Soft blocked: no
Hard blocked: no
从上面的信息中可以发现,bluetooth 的状态已经变为开启。这里需要注意的是,只有当 Soft blocked 与 Hard blocked 的状态都解锁后才能正常使用蓝牙设备。
这之后,重新执行 hciconfig hci0 up 命令,成功开启并初始化蓝牙设备。执行 hciconfig -a 命令,输出如下:
[longyu@debian:17:31:36] firmware $ hciconfig -a
hci0: Type: BR/EDR Bus: USB
BD Address: 30:10:B3:1C:EC:03 ACL MTU: 1021:8 SCO MTU: 64:1
UP RUNNING PSCAN
RX bytes:1237 acl:0 sco:0 events:75 errors:0
TX bytes:1656 acl:0 sco:0 commands:74 errors:0
Features: 0xff 0xfe 0xcf 0xfe 0xdb 0xff 0x7b 0x87
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
Link policy: RSWITCH HOLD SNIFF
Link mode: SLAVE ACCEPT
Name: ‘debian’
Class: 0x10010c
Service Classes: Object Transfer
Device Class: Computer, Laptop
HCI Version: 4.0 (0x6) Revision: 0x147
LMP Version: 4.0 (0x6) Subversion: 0x210b
Manufacturer: Broadcom Corporation (15)
至此,就解决了bcm43142蓝牙无法使用的问题。
Sunday, 26. August 2018 05:47PM