Words:
2382
·
Reading:
12 min
ubuntu18.04 rtl8761bu bluetooth driver
最近想给我的台式机上加个蓝牙适配器,蓝牙5.0那种,支持BLE设备,这样我就可以基于我的手环以及手机之类的BLE设备做一些东西玩玩。不幸的是,蓝牙适配器买回来后没法驱动,dmesg | tail -f 可以看到加载/lib/firmware/rtl_bt/下面的firmware失败了,我进目录看了下,并没有现成的firmware。Google了一下,在linux git repo中找到了需要的文件,然后就是下载解压复制,重新插拔usb蓝牙适配器,提示加载firmware成功了,hciconfig -a也可以看到hci0设备了,但是执行部分指令的时候失败,blueman也无法操作蓝牙适配器。
蓝牙适配器型号是:
uGreen Bluetooth 5.0 USB Adapter CM390
虽然log中显示的型号是rtl8761a,但是不知道识别得是否正确,这个型号信息有可能不是它的真实型号。网上查不到关于这个cm390的更多的芯片信息。
百般查找,发现这个蓝牙适配器芯片的型号为:rtl8761buv!!!
尝试了一种取巧的办法,就是将找到的rtl8761bu的firmware改名,改成rtl8761a,但是加载的时候报错“unknow project id 14”,使用hcitool操作的时候也报错,显然这种办法也是不行的。
“hci0: RTL: unknown project id 14”所以,log中显示出来加载rtl8761a的firmware明显是不对的。之所以识别不正确,从网上可以查到的信息来看,是因为kernel的驱动btusb.c中有bug,需要修改后重新编译安装。
接下来下载我的kernel版本对应的源码。
checkout与我的内核版本一致的tag,然后主要参照下面两篇文章,问题搞定。
https://github.com/torvalds/linux/blob/master/drivers/bluetooth/btrtl.c
https://gist.github.com/rometsch/dfd24fb09c85c1ad2f25223dc1481aaa
在第二个地址中,它解决的是rtl8761b芯片的驱动,直接照着改还是不行的,因为我的芯片是rtl8761bu,所以将firmware改正确就好了,然后编译,替换,重启,蓝牙适配器插上
可以看到蓝牙适配器正常驱动起来了,使用Bluetooth Manager程序搜索一下,成功发现N多蓝牙设备,试了一下与我的手环链接,都是正常的。到此结束。