Linux内核中“取消”命令的含义及操作方法(蓝牙适配场景)
解决UGREEN CM749(ID 33fa:0010)蓝牙适配器无法被KDE/Plasma识别的问题
问题背景
- 设备环境:NixOS系统,UGREEN CM749蓝牙5.4 USB适配器
- 异常现象:
lsusb可识别适配器为ID 33fa:0010 USB2.0-BT,但KDE/Plasma的蓝牙守护进程无法检测到设备 - 排查结论:参考相关Ubuntu bug报告,需修改内核源码中
hci_sync.c文件的hci_init2[]和hci_init3[]数组,移除hci_read_local_ext_features命令
具体操作步骤
定位目标文件
在解压后的6.15.7内核源码中,找到路径为net/bluetooth/hci_sync.c的文件修改初始化命令数组
打开文件后,找到hci_init2[]和hci_init3[]两个初始化命令数组,将其中的hci_read_local_ext_features相关条目删除或注释:- 原数组示例结构:
static const struct hci_init_cmd hci_init2[] = { { hci_read_local_ext_features, 0 }, { hci_read_bd_addr, 0 }, // 其他命令条目 { NULL, 0 } }; - 修改后结构:
static const struct hci_init_cmd hci_init2[] = { // { hci_read_local_ext_features, 0 }, // 注释或直接删除该行 { hci_read_bd_addr, 0 }, // 其他命令条目 { NULL, 0 } };
对
hci_init3[]数组执行完全相同的操作,移除其中的hci_read_local_ext_features条目- 原数组示例结构:
NixOS环境下重新编译内核
- 修改
configuration.nix配置,指定使用自定义编译的内核,或通过nix-build构建自定义内核包 - 确保编译时包含蓝牙相关模块,编译完成后替换系统内核并重启系统
- 修改
关键说明
这里的“取消命令”指的是从蓝牙控制器的初始化命令序列中移除hci_read_local_ext_features指令——这款UGREEN CM749适配器对该读取扩展特性的指令响应存在异常,导致初始化流程失败,进而无法被蓝牙守护进程识别。
内容的提问来源于stack exchange,提问作者Seth Martin
相关产品推荐
相关产品推荐

