[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命令(一旦使用就会找不到蓝牙适配器)。

因为不影响使用所以就没有去关注这个问题(估计和这个设备到驱动有关系)。

posted @ 2026-02-28 14:28  莫如风  阅读(40)  评论(0)    收藏  举报