Bluez无法持久连接BLE遥控器 报错Function not implemented (38)求助
排查解决步骤
1. 修复BlueZ版本残留问题
你当前日志显示运行的bluetoothd版本仍为5.50,说明升级未生效,优先处理:
- 查询系统中所有已安装的bluez相关包:
dpkg -l | grep bluez - 完全卸载所有bluez包和残留配置:
apt purge -y bluez* libbluetooth3 rm -rf /etc/bluetooth /var/lib/bluetooth - 安装目标版本bluez 5.52,安装完成后验证二进制版本:
/usr/lib/bluetooth/bluetoothd --version
确认输出为5.52后再继续后续操作 - 重载systemd配置并重启蓝牙服务:
查看syslog确认bluetoothd启动版本已为5.52。systemctl daemon-reload systemctl restart bluetooth
2. 排查Function not implemented (38)错误
该错误为内核蓝牙栈缺少对应ATT/GATT功能支持,或适配器驱动异常导致:
- 检查蓝牙相关内核模块加载状态:
若存在模块加载失败,重装对应内核版本的内核头文件,重新编译蓝牙模块即可,你使用的5.10内核原生支持bluez 5.52,无需升级内核。lsmod | grep bluetooth lsmod | grep btusb # 仅USB蓝牙适配器需要检查 - 检查蓝牙适配器硬件能力:
hciconfig hci0 -a
确认输出中HCI Version≥4.0,支持BLE功能。 - 重置蓝牙适配器:
hciconfig hci0 down hciconfig hci0 up
3. 修复配对连接失败问题
确认版本和驱动无异常后,重新执行配对流程:
- 先删除原有残留的设备配对信息:
bluetoothctl remove 84:EB:18:0C:92:0F - 重新执行配对连接:
[bluetooth]# power on [bluetooth]# agent on [bluetooth]# default-agent [bluetooth]# scan on # 扫描到目标设备后执行 [bluetooth]# scan off [bluetooth]# trust 84:EB:18:0C:92:0F [bluetooth]# pair 84:EB:18:0C:92:0F # 出现PIN输入提示时输入遥控器默认PIN,通常为0000或1234 [bluetooth]# connect 84:EB:18:0C:92:0F - 若仍提示认证失败,修改
/etc/bluetooth/main.conf添加配置:JustWorksRepairing = always
保存后重启蓝牙服务重试即可。
4. 硬件兼容性验证
如果以上操作均无法解决问题,确认当前设备使用的蓝牙适配器型号与你其他正常运行的设备是否一致,部分廉价山寨蓝牙适配器固件缺少BLE设备配对所需的功能,更换适配的适配器即可解决。
内容的提问来源于stack exchange,提问作者Besi
相关产品推荐
相关产品推荐

