How to Fix Cm390 Ble Adaptor for Ubuntu

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

( [ [ [ [ [ [ [ [ [ [ ( h b b c B D R T F P L L a a i D O X X e a i i s 4 4 4 4 4 4 4 4 4 4 s 0 W a c n n e 0 0 0 0 0 0 0 0 0 1 e : A N b b t k k k ) 6 6 6 6 6 6 6 6 8 6 ) d y y u e . . . . . . . . . . T d t t r t p m 6 6 6 6 6 6 6 6 7 7 y r e e e o o 3 3 3 4 4 4 4 4 2 8 p e s s s t l d 4 4 4 6 7 7 7 7 5 9 e s : : : y i e ~ 8 8 8 2 2 2 3 3 6 3 ~ : s 4 1 p c : 0 0 0 1 0 1 1 3 0 2 : 2 5 0 e y d 1 2 3 5 9 2 2 9 1 2 h P 7 0 x : : S m ] ] ] ] ] ] ] ] ] ] c r 0 5 0 L e i i 0 a 0 0 D A s u u u B B B B B B B c m : c M V g s s s l l l l l l l o a 0 l a 0 1 E b b b u u u u u u u n r 0 : c x | e e e e e e e f y : 0 l 0 D A 1 1 1 t t t t t t t i 0 : 0 H C t - - - o o o o o o o g 0 s 0 1 C a 1 1 1 o o o o o o o B : c 0 E i 2 2 2 t t t t t t t - u 0 o s x H P l . . . h h h h h h h a s 0 : c 0 V T 4 4 4 : : : : : : : : : 0 o 0 1 - . . . 0 : f 2 2 2 h h h h h h h U 0 e 0 0 : : : c c c c c c c S : v x i i i i i i i B 0 e c 0 P M S 0 0 0 0 0 0 0 0 n o 0 r a e : : : : : : : t m o n r s m 0 d u i R R R R R c R A : a x u f a T T T T T o T C 6 n 0 c a l L L L L L m L L 0 d 0 t c N : : : : : m : s : t u a M e : 0 u m e r l l c n d T r 6 x B r b x o o o f d o U r 1 0 l e e a m a a g w : o 0 u r r m _ d d _ 0 n r e e : : i v i i s x l 0 s r 0 t n e n n z f o : : r x o R 0 i r g g c a 0 0 o 0 o e 0 n s 4 2 d r 0 t a E g i r r 4 0 s h l 0 o t t , f S : 0 t 4 h n l l t w C 0 x R e C c _ _ t x O 0 a k 2 i s b b o c 0 d 3 _ t t t t t o M i 9 v a / / a i m T o 9 e t r r l m m U 8 r u t t e a : 7 = s l l s o n 0 = 8 8 z u d 0 a 0 7 7 t : 6 6 1 f 0 h v 1 1 4 a c e a a 8 i i r _ _ 0 l _ s f c 8 e r i w o d e o . n v n b f = = i i - 0 1 n g 1 0 . 1 0 b 0 b i ) n l m p _ v e r = 0 a l m p _ s u b v e r = 8 7 6 1

虽然log中显示的型号是rtl8761a,但是不知道识别得是否正确,这个型号信息有可能不是它的真实型号。网上查不到关于这个cm390的更多的芯片信息。

百般查找,发现这个蓝牙适配器芯片的型号为:rtl8761buv!!!

尝试了一种取巧的办法,就是将找到的rtl8761bu的firmware改名,改成rtl8761a,但是加载的时候报错“unknow project id 14”,使用hcitool操作的时候也报错,显然这种办法也是不行的。

[ [ [ [ [ [ [ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 8 8 8 8 8 8 8 5 5 5 5 6 6 6 . . . . . . . 8 8 8 8 4 4 4 0 0 0 1 3 3 3 9 9 9 0 0 0 0 1 1 9 0 0 0 0 7 9 1 5 0 1 4 7 7 1 1 1 6 6 ] ] ] ] ] ] ] B B B B B B B l l l l l l l u u u u u u u e e e e e e e t t t t t t t o o o o o o o o o o o o o o t t t t t t t h h h h h h h : : : : : : : h h h h B B B c c c c N N N i i i i E E E 0 0 0 0 P P P : : : : ( f s R R R R E i o T T T T t l c L L L L h t k : : : : e e e r r t r r r u n s o t t n e : l m l l k t a _ : : n p y v o E r e e l l w m o r r o o n u t s a a l o i i d d p a c n o i i r t o i n n n o i l t g g j o i s e n m a t r r c ) u l a t t t l i t l l v t z u _ _ i e i e s b b d r c d = t t a 0 / / 1 1 s r r 4 . t v t t 3 e l l r 8 8 s 7 7 i 6 6 o 1 1 n a a = _ _ 1 f c w o . n b f i i n g . b i n

“hci0: RTL: unknown project id 14”所以,log中显示出来加载rtl8761a的firmware明显是不对的。之所以识别不正确,从网上可以查到的信息来看,是因为kernel的驱动btusb.c中有bug,需要修改后重新编译安装。

接下来下载我的kernel版本对应的源码。

u 5 g n . i a 4 t m . e 0 c - l - 8 o a 0 n - e g e g n i e t r : i / c / k # e 9 r 0 n ~ e 1 l 8 . . u 0 b 4 u . n 1 t - u U . b c u o n m t / u u b u n t u / u b u n t u - b i o n i c . g i t

checkout与我的内核版本一致的tag,然后主要参照下面两篇文章,问题搞定。

https://github.com/torvalds/linux/blob/master/drivers/bluetooth/btrtl.c

https://gist.github.com/rometsch/dfd24fb09c85c1ad2f25223dc1481aaa

在第二个地址中,它解决的是rtl8761b芯片的驱动,直接照着改还是不行的,因为我的芯片是rtl8761bu,所以将firmware改正确就好了,然后编译,替换,重启,蓝牙适配器插上

( [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ b a 1 s 2 e 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 0 ) 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 . . . . . . . . . . . . . . . . . . . 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 8 8 8 4 4 7 7 7 7 7 8 8 8 8 8 2 2 2 9 6 6 6 6 7 7 7 7 7 7 5 6 6 6 6 1 1 1 7 9 9 9 3 ~ 0 8 8 8 8 8 1 1 1 4 5 0 0 0 2 2 2 2 5 8 2 4 4 4 4 2 2 2 8 6 4 5 5 2 6 6 6 3 d 2 7 5 7 8 9 4 7 8 7 0 9 0 2 8 2 7 9 8 m ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] e s u B B B B B B B B B B B B B B B B B B g s l l l l l l l l l l l l l l l l l l | b u u u u u u u u u u u u u u u u u u g e e e e e e e e e e e e e e e e e e r 1 t t t t t t t t t t t t t t t t t t e - o o o o o o o o o o o o o o o o o o p 1 o o o o o o o o o o o o o o o o o o 2 t t t t t t t t t t t t t t t t t t " . h h h h h h h h h h h h h h h h h h B 4 : : : : : : : : : : : : : : : : : : l . u 2 C H H L S h h h h h B B B h R R R h e : o C C 2 C c c c c c N N N c F F F c t r I I C O i i i i i E E E i C C C i o P e A 0 0 0 0 0 P P P 0 O O O 0 o r d s P s : : : : : : M M M : t o v e o o ( f s M M M h d e v c s c R R R R R E i o R h " u r i k o k T T T T T t l c T T s v a c c e c e L L L L L h t k L T o e r t 2 e t k t : : : : : e e e : Y c r d : . e r r t k w 2 a l t l e r l l c n s f l e 1 a B 2 n a a x o o o f e : l w a t . r l d y l y a m a a g t a y 1 e u e a e m _ d d _ p y v e l 1 e c r y r i v i i s E r e e r a e t o e n e n n z m o r r y r o n i r i i r g g u t s i e r o n n n n s 6 l o i i n r o t e i i i g i r r , a c n o i r h c t n t o t t t o i n t i t i i i h n l l t i l t i n 0 R i a t a c _ _ o o i 0 a i x a o l i l i s b b t n m a x l t 3 d n i a i _ t t t a ) u l 0 i i 3 i z l z v a / / l l i 9 z a o m e i e e t r r v t z 9 e l a d z d r u t t s e i e 9 d i n e = s l l z r c d 6 z a d 0 = 8 8 a 4 e g a 0 7 7 2 1 s 6 d e 6 6 0 . t b r h v 1 1 5 3 c e b b 2 i i r u u 2 n _ s _ _ i r i f c t e o w o i v n . n a = = b f l 0 1 i i i 0 n g z 0 . e b b d i l n m p _ v e r = 0 a l m p _ s u b v e r = 8 7 6 1

可以看到蓝牙适配器正常驱动起来了,使用Bluetooth Manager程序搜索一下,成功发现N多蓝牙设备,试了一下与我的手环链接,都是正常的。到此结束。


Table of Contents