找回密码
 立即注册
首页 业界区 安全 [linux] 双蓝牙问题修复

[linux] 双蓝牙问题修复

勉欤铅 昨天 21:30
背景

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

复制一份ubuntu上/etc/bluetooth/main.conf将其中的ControllerMode改为le:
  1. ControllerMode = le
复制代码
然后复制到rootfs-overlay对应的/etc/bluetooth/main.conf(如果没有就创建)
因为我只想让设备作为一个BLE HID设备,所以需要在启动时关闭一些不必要到插件。
找到蓝牙启动的脚本添加上不需要到插件:
  1. --noplugin=sap,audio,avrcp,headset,network,hfp,obex,objpush
复制代码
这个是bluetoothd启动时的选项可以关闭不需要的插件。
c修改后启动脚本如下(仅截取了启动部分):
  1. DAEMON="bluetoothd"
  2. PIDFILE="/var/run/$DAEMON.pid"
  3. BLUETOOTHD_ARGS="-n --noplugin=sap,audio,avrcp,headset,network,hfp,obex,objpush"
  4. # shellcheck source=/dev/null
  5. [ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON"
  6. start() {
  7.         printf 'Starting %s: ' "$DAEMON"
  8.         # shellcheck disable=SC2086 # we need the word splitting
  9.         start-stop-daemon -S -q -m -b -p "$PIDFILE" -x "/usr/libexec/bluetooth/$DAEMON" \
  10.                 -- $BLUETOOTHD_ARGS
  11.         status=$?
  12.         if [ "$status" -eq 0 ]; then
  13.                 echo "OK"
  14.         else
  15.                 echo "FAIL"
  16.         fi
  17.         return "$status"
  18. }
复制代码
配置完成后删除原来的bluez_utils重新编译系统。
再次测试发现只有一个蓝牙设备存在,连接后被识别为BLE HID设备。
遗留问题

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

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

相关推荐

您需要登录后才可以回帖 登录 | 立即注册