hci0 command 0xfc20 tx timeout(Realtek 8761B Chipset, Bluetooth 5.0)
当前使用的Linux内核版本: 4.4.189
插上USB Bluetooth 5.0 Adapter后,dmesg显示如下log:
[ 240.348480] usb 3-1.2: new full-speed USB device number 6 using ehci-platform
[ 240.437834] usb 3-1.2: New USB device found, idVendor=0bda, idProduct=8771
[ 240.438541] usb 3-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 240.439311] usb 3-1.2: Product: Bluetooth Radio
[ 240.439730] usb 3-1.2: Manufacturer: Realtek
[ 240.440124] usb 3-1.2: SerialNumber: 00E04C239987
[ 240.447374] Bluetooth: hci0: rtl: examining hci_ver=0a hci_rev=000b lmp_ver=0a lmp_subver=8761
[ 240.448393] Bluetooth: hci0: rtl: loading rtl_bt/rtl8761a_fw.bin
[ 240.451607] Bluetooth: hci0: rom_version status=0 version=1
[ 242.616194] Bluetooth: hci0 command 0xfc20 tx timeout
[ 250.612377] Bluetooth: hci0: download fw command failed (-110)
由于蓝牙适配器的芯片组较新,为Realtek RTL8761B,4.4版本的内核并不支持这个型号的蓝牙适配器,所以驱动报错。
解决办法:
1. 把较高内核版本的驱动移植到4.4.189上来:
这里我们选择 kernel4.17.19 版本的驱动,可以从这个仓库获取驱动源码: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Realtek USB bluetooth适配器的驱动文件为:
- drivers/bluetooth/btrtl.h
- drivers/bluetooth/btrtl.c
用上述btrtl.c和btrtl.h替换掉 kernel4.4.189 版本里对应的文件。
注意:这里也可以移植更高内核版本的驱动,比如 kernel5.4 版本的驱动。但是有个缺点,选择的驱动版本的跨度越大需要修改的地方就越多。
2. 修改4.17.19内核版本Realtek bluetooth驱动源码:
修改 drivers/bluetooth/btrtl.c 和 drivers/bluetooth/btrtl.h
这里我做了一个修改后的patch:support_RTL8761B_chipset_from_kernel4.4_to_kernel4.17.patch, patch内容如下:
diff --git a/kernel/drivers/bluetooth/btrtl.c b/kernel/drivers/bluetooth/btrtl.c
index 437f080..bd00d25 100644
--- a/kernel/drivers/bluetooth/btrtl.c
+++ b/kernel/drivers/bluetooth/btrtl.c
@@ -32,7 +32,7 @@
#define RTL_ROM_LMP_8723A 0x1200
#define RTL_ROM_LMP_8723B 0x8723
#define RTL_ROM_LMP_8821A 0x8821
-#define RTL_ROM_LMP_8761A 0x8761
+#define RTL_ROM_LMP_8761B 0x8761
#define RTL_ROM_LMP_8822B 0x8822 #define IC_MATCH_FL_LMPSUBV (1 << 0)
@@ -76,11 +76,11 @@ static const struct id_table ic_id_table[] = {
.fw_name = "rtl_bt/rtl8821c_fw.bin",
.cfg_name = "rtl_bt/rtl8821c_config.bin" }, - /* 8761A */
- { IC_MATCH_FL_LMPSUBV, RTL_ROM_LMP_8761A, 0x0,
+ /* 8761B */
+ { IC_MATCH_FL_LMPSUBV, RTL_ROM_LMP_8761B, 0x0,
.config_needed = false,
- .fw_name = "rtl_bt/rtl8761a_fw.bin",
- .cfg_name = "rtl_bt/rtl8761a_config.bin" },
+ .fw_name = "rtl_bt/rtl8761b_fw.bin",
+ .cfg_name = "rtl_bt/rtl8761b_config.bin" }, /* 8822B */
{ IC_INFO(RTL_ROM_LMP_8822B, 0xb),
@@ -140,10 +140,10 @@ static int rtlbt_parse_firmware(struct hci_dev *hdev, u16 lmp_subver,
{ RTL_ROM_LMP_8723A, 0 },
{ RTL_ROM_LMP_8723B, 1 },
{ RTL_ROM_LMP_8821A, 2 },
- { RTL_ROM_LMP_8761A, 3 },
{ RTL_ROM_LMP_8822B, 8 },
{ RTL_ROM_LMP_8723B, 9 }, /* 8723D */
{ RTL_ROM_LMP_8821A, 10 }, /* 8821C */
+ { RTL_ROM_LMP_8761B, 14 }, /* 8761BU */
}; ret = rtl_read_rom_version(hdev, &rom_version);
@@ -514,7 +514,7 @@ int btrtl_setup_realtek(struct hci_dev *hdev)
return btrtl_setup_rtl8723a(hdev);
case RTL_ROM_LMP_8723B:
case RTL_ROM_LMP_8821A:
- case RTL_ROM_LMP_8761A:
+ case RTL_ROM_LMP_8761B:
case RTL_ROM_LMP_8822B:
return btrtl_setup_rtl8723b(hdev, hci_rev, lmp_subver);
default:
内核编译选项:
重新编译内核和更新内核,内核重新启动后,插入RTL8761B chipset蓝牙适配器,dmesg打印log如下:
[ 13.340498] usb 4-1.2: new full-speed USB device number 4 using ehci-platform
[ 13.428053] usb 4-1.2: New USB device found, idVendor=0bda, idProduct=8771
[ 13.428738] usb 4-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 13.429457] usb 4-1.2: Product: Bluetooth Radio
[ 13.429875] usb 4-1.2: Manufacturer: Realtek
[ 13.430296] usb 4-1.2: SerialNumber: 00E04C239987
[ 13.437530] Bluetooth: hci1: rtl: examining hci_ver=0a hci_rev=000b lmp_ver=0a lmp_subver=8761
[ 13.438361] Bluetooth: hci1: rtl: loading rtl_bt/rtl8761b_config.bin
[ 13.441437] Bluetooth: hci1: rtl: loading rtl_bt/rtl8761b_fw.bin
[ 13.443434] Bluetooth: hci1: rom_version status=0 version=1
[ 13.444009] Bluetooth: hci1: cfg_sz 14, total size 11678
上述使用的固件版本rtl8761b_config.bin和rtl8761b_fw.bin可以用此仓库获得: git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git ,或者从ubuntu20.04(kernel版本>= 5.4)的/lib/firmware/rtl_bt/目录下拷贝来直接用。
如果bluetoothd程序已经启动了的话,执行 hciconfig 结果如下:
# hciconfig
hci0: Type: Primary Bus: USB
BD Address: E8:EA:6A:8C:20:ED ACL MTU: 1021:6 SCO MTU: 255:12
UP RUNNING
RX bytes:12651 acl:0 sco:0 events:414 errors:0
TX bytes:14146 acl:0 sco:0 commands:101 errors:0
执行 bluetoothctl scan on 进行扫描,结果如下:
# bluetoothctl scan on
Discovery started
[CHG] Controller E8:EA:6A:8C:20:ED Discovering: yes
[NEW] Device 52:FB:49:66:89:C0 52-FB-49-66-89-C0
[NEW] Device 4D:A3:E2:E0:D1:8A 4D-A3-E2-E0-D1-8A
[NEW] Device 5C:73:91:E3:7C:23 5C-73-91-E3-7C-23
[NEW] Device 7A:AC:FF:A1:12:49 7A-AC-FF-A1-12-49
[NEW] Device 52:EE:DB:DF:78:F1 52-EE-DB-DF-78-F1
[NEW] Device 67:6A:97:56:84:F2 67-6A-97-56-84-F2
[NEW] Device 42:B8:EB:55:82:D8 42-B8-EB-55-82-D8
[NEW] Device C8:28:32:8F:C9:96 C8-28-32-8F-C9-96
[NEW] Device 50:B3:3E:9A:94:2E 50-B3-3E-9A-94-2E
[NEW] Device 63:E1:C1:03:78:FB 63-E1-C1-03-78-FB
[NEW] Device 63:B5:8F:19:01:3E 63-B5-8F-19-01-3E
[NEW] Device 63:7E:AA:D0:47:1E 63-7E-AA-D0-47-1E
[NEW] Device 46:3C:37:25:5E:EE 46-3C-37-25-5E-EE
[NEW] Device 44:28:A3:BE:B3:A1 MI RC
[NEW] Device 47:C0:B7:D4:A8:9F 47-C0-B7-D4-A8-9F
[NEW] Device 70:28:24:F1:24:7B 70-28-24-F1-24-7B
[NEW] Device 63:F8:74:A3:4A:39 63-F8-74-A3-4A-39
[NEW] Device 5B:6E:56:B5:4F:F1 5B-6E-56-B5-4F-F1
[NEW] Device 47:B7:9C:97:E0:30 47-B7-9C-97-E0-30
[NEW] Device 4D:94:FC:E5:F8:29 4D-94-FC-E5-F8-29
[NEW] Device 68:94:22:61:95:9D 68-94-22-61-95-9D
[NEW] Device 78:35:4A:C5:99:2A 78-35-4A-C5-99-2A
从上面的扫描结果来看,蓝牙适配器已经能正常工作了。
至此,从kernel4.4到kernel.4.17版本的内核,都可以使用上述修改过的驱动来支持RTL8761B芯片组的蓝牙适配器。
hci0 command 0xfc20 tx timeout(Realtek 8761B Chipset, Bluetooth 5.0)的更多相关文章
- org.openqa.selenium.WebDriverException: f.QueryInterface is not a function Command duration or timeout:
今天偶遇一个问题,运行项目时,发现这个问题: org.openqa.selenium.WebDriverException: f.QueryInterface is not a functionCom ...
- error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\cl.exe' failed with exit status 2
安装mysql是出现这个错误. python3.和python2.两个的版本不一样,所以安装的东西也不一样:MySQLdb 安装mysql的连接包.工具安装 Python3.x版本:Pip insta ...
- RealTek WiFi 模块 RTL8710AF RTL8711AF RTL8711AM RTL8195AM
瑞昱 8710 是一个完整且自成体系的 WiFi 网络解决方案, 能够独立运行,也可以作为从机搭载于其他主机 MCU 运行. 瑞昱 8710 在搭载应用并作为设备中唯⼀的应⽤处理器时,能够直接从外接闪 ...
- driver.startActivity 启动app出现 An unknown server-side error occurred while processing the command
driver.startActivity("com.xxx.module.xxx", "com.xxx.module.xxx.hibox.ui.entry.EntryAc ...
- 0406-服务注册与发现-客户端feign-使用、配置、日志、timeout
官方地址:https://cloud.spring.io/spring-cloud-static/Edgware.SR3/single/spring-cloud.html#spring-cloud-f ...
- arcmap Command
The information in this document is useful if you are trying to programmatically find a built-in com ...
- 大熊君说说JS与设计模式之------命令模式Command
一,总体概要 1,笔者浅谈 日常生活中,我们在看电视的时候,通过遥控器选择我们喜欢的频道时,此时我们就是客户端的角色,遥控器的按钮相当于客户请求,而具体执行的对象就是命令对象, 命令模式把一个请求或者 ...
- TCPDUMP Command Examples
tcpdump command is also called as packet analyzer. tcpdump command will work on most flavors of unix ...
- How to install IIS 7.5 on Windows 7 using the Command Line
原文 How to install IIS 7.5 on Windows 7 using the Command Line On Windows Vista, to install IIS 7.0 f ...
- mysql source 报错 Unknown command '\'' 解决办法
系统:Windows2008 R2 source 导入数据总是报错. ERROR:Unknown command '\''.ERROR:Unknown command '\"'.ERROR ...
随机推荐
- 达梦数据库: SQL查询报错《不是 GROUP BY 表达式解决方法》
报错信息: ****: 第4 行附近出现错误: 不是 GROUP BY 表达式 修改办法: 达梦可以配置兼容参数,COMPATIBLE_MODE=4,静态参数,需要重启数据库后生效! sp_set_p ...
- Gin+Xterm.js实现远程Kubernetes Pod(一)
Xterm.js简介 xterm.js (https://xtermjs.org/)是一个开源的 JavaScript 库,它模拟了一个终端接口,可以在网页中嵌入一个完全功能的终端.这个库非常灵活,并 ...
- Parallel 与 ConcurrentBag<T> 这对儿黄金搭档(C#)【并发编程系列】
〇.前言 日常开发中经常会遇到数据统计,特别是关于报表的项目.数据处理的效率和准确度当然是首要关注点. 本文主要介绍,如何通过 Parallel 来并行处理数据,并组合 ConcurrentBag&l ...
- 如何操作(增、删、改、查)常见的 HTML 元素呢?(包含原生 js 和 JQuery 语法对照)
一.通用的操作示例 1.查询 根据 id 查询(结果为单个对象) // 原生 js 写法 var elementobj = document.getElementById("elementi ...
- chrome浏览器中使用adblockplus拦截广告
adblock plus是一款可以屏蔽广告以及任何你想屏蔽元素的软件,屏蔽之后的效果如下图所示,abp自动屏蔽广告,还可以自行添加屏蔽内容,右上角红色的ABP标识就是该软件 下载地址: htt ...
- nginx配置源IP访问控制
通过nginx的ngx_http_access_module模块,可实现对客户端的源IP地址进行允许或拒绝访问控制.该模块默认已编译. 允许访问指令 名称 允许访问指令 指令 allow 作用域 ht ...
- 每日一库:fsnotify简介
fsnotify是一个用Go编写的文件系统通知库.它提供了一种观察文件系统变化的机制,例如文件的创建.修改.删除.重命名和权限修改.它使用特定平台的事件通知API,例如Linux上的inotify,m ...
- torch.nn基础学习教程 | PyTorch nn Basic Tutorial
基于torch.nn搭建神经网络的基础教程大纲: 1. 引言 在我们开始深入探讨torch.nn之前,我们首先需要理解PyTorch及其神经网络库的基础知识.这一部分的内容将帮助你对PyTorch有一 ...
- 【目标检测】RCNN算法实现
一.前言 RCNN(Regions with CNN features)算法由Ross Girshick在2014年的论文"Rich feature hierarchies for accu ...
- 如何创建集成 LSP 支持多语言的 Web 代码编辑器
对于一个云开发平台来说,一个好的 Web IDE 能很大程度地提高用户的编码体验,而一个 Web IDE 的一个重要组成部分就是代码编辑器. 目前有着多款 web 上的代码编辑器可供选择,比如 Ace ...