勉欤铅 发表于 2026-2-28 21:30:10

[linux] 双蓝牙问题修复

背景

在嵌入式上开发蓝牙BLE HID发现在启动HID服务后,使用一些手机会扫描到两个同名到设备。
分析UUID发现一个是经典蓝牙,一个是低功耗蓝牙(BLE HID)。
找蓝牙配置发现,压根没有蓝牙配置(恼)。
解决方法

复制一份ubuntu上/etc/bluetooth/main.conf将其中的ControllerMode改为le:
ControllerMode = le然后复制到rootfs-overlay对应的/etc/bluetooth/main.conf(如果没有就创建)
因为我只想让设备作为一个BLE HID设备,所以需要在启动时关闭一些不必要到插件。
找到蓝牙启动的脚本添加上不需要到插件:
--noplugin=sap,audio,avrcp,headset,network,hfp,obex,objpush这个是bluetoothd启动时的选项可以关闭不需要的插件。
c修改后启动脚本如下(仅截取了启动部分):
DAEMON="bluetoothd"
PIDFILE="/var/run/$DAEMON.pid"
BLUETOOTHD_ARGS="-n --noplugin=sap,audio,avrcp,headset,network,hfp,obex,objpush"

# shellcheck source=/dev/null
[ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON"

start() {
        printf 'Starting %s: ' "$DAEMON"
        # shellcheck disable=SC2086 # we need the word splitting
        start-stop-daemon -S -q -m -b -p "$PIDFILE" -x "/usr/libexec/bluetooth/$DAEMON" \
                -- $BLUETOOTHD_ARGS
        status=$?
        if [ "$status" -eq 0 ]; then
                echo "OK"
        else
                echo "FAIL"
        fi
        return "$status"
}配置完成后删除原来的bluez_utils重新编译系统。
再次测试发现只有一个蓝牙设备存在,连接后被识别为BLE HID设备。
遗留问题

这样修改后蓝牙是能正常使用,不过不能使用bluetoothctl命令(一旦使用就会找不到蓝牙适配器)。
因为不影响使用所以就没有去关注这个问题(估计和这个设备到驱动有关系)。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

唐嘉懿 发表于 2026-3-7 12:32:03

懂技术并乐意极积无私分享的人越来越少。珍惜

晁红叶 发表于 2026-3-10 19:46:32

收藏一下   不知道什么时候能用到

梢疠 发表于 2026-3-10 21:46:16

收藏一下   不知道什么时候能用到

吟氅 发表于 2026-3-11 11:06:35

新版吗?好像是停更了吧。
页: [1]
查看完整版本: [linux] 双蓝牙问题修复