博客 / 詳情

返回

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

因為不影響使用所以就沒有去關注這個問題(估計和這個設備到驅動有關係)。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.