三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

linux 蓝牙调试相关指令

linux 蓝牙调试相关指令

一.背景

由于第一次做linux蓝牙项目,需要将常用指令进行记录,本次文档适合蓝牙linux初学者

二.蓝牙初始化和进程启动相关操作

依次执行如下命令,对蓝牙功能进行初始化操作,启动相关进程与工具:

adb shell //进入shell sh-5.0# bt_init.sh //启用蓝牙初始化脚本,对蓝牙进行初始化 sh-5.0# /usr/libexec/bluetooth/bluetoothd -d -C -n & //启用bluetoothd守护进程 sh-5.0# bluetoothctl //启用bluetoothctl工具

bt_init.sh脚本包含如下步骤:

killall rtk_hciattach //停止rtk_hciattach进程 echo 0 > /sys/class/rfkill/rfkill0/state echo 0 > /proc/bluetooth/sleep/btwrite sleep 0.5 //如上三行命令关闭蓝牙电源并延时0.5毫秒 echo 1 > /sys/class/rfkill/rfkill0/state echo 1 > /proc/bluetooth/sleep/btwrite sleep 0.5 //如上三行命令为开启蓝牙电源并延时0.5毫秒 insmod /usr/lib/modules/hci_uart.ko //加载蓝牙串口驱动 rtk_hciattach -n -s 115200 /dev/ttyS1 rtk_h5 & //进行蓝牙初始化 hciconfig hci0 up //打开蓝牙

启用bluetoothctl工具的命令执行情况详见下图示例:

三.蓝牙基本操作

bluetoothctl工具中执行以下命令可操作蓝牙:

[bluetooth]#power on //打开蓝牙 [bluetooth]#power off //关闭蓝牙 [bluetooth]#discoverable on //开启蓝牙可被搜索发现 [bluetooth]#discoverable off //关闭蓝牙可被搜索发现 [bluetooth]#pairable on //开启蓝牙可配对 [bluetooth]#pairable off //关闭蓝牙可配对 [bluetooth]#scan on //开始扫描周边蓝牙设备 [bluetooth]#scan off //停止扫描周边蓝牙设备 [bluetooth]#devices //查看扫描到的蓝牙设备 [bluetooth]#system-alias XX //设置本地蓝牙设备别名,XX为蓝牙设备别名 [bluetooth]#reset-alias //清除本地蓝牙设备别名 [bluetooth]#pair xx:xx:xx:xx:xx:xx //模块与扫描到的蓝牙设备MAC地址配对,xx:xx:xx:xx:xx: xx为MAC地址 [bluetooth]#paired-devices //查看已配对的蓝牙设备,注意新版本中此命令没有作用,也是devices命令 [bluetooth]#remove xx:xx:xx:xx:xx:xx //根据MAC地址清除配对列表中已配对的蓝牙设备 [bluetooth]#trust 30:A9:98:54:0B:E2 //信任该设备 [bluetooth]# remove 30:A9:98:54:0B:E2 //清除设备 [bluetooth]# info 30:A9:98:54:0B:E2 //查看耳机的详细信息

上述trust是信任该设备的作用,就是后续可以自动回连,如下是详细讲解

一、 trust <MAC> 的核心作用是什么?

简单来说,trust 的核心作用是:允许该设备在未来主动向您的开发板发起连接(回连)时,开发板会自动无条件接受,无需人工确认。

  • 典型场景
    当您把耳机从充电盒里拿出来戴上时,耳机内部的芯片会主动向您的开发板发送连接请求。

    • 如果设备处于Trusted: yes状态:开发板的蓝牙守护进程会直接放行,耳机瞬间自动回连成功。

    • 如果设备处于Trusted: no状态:开发板会认为这是一个“未经授权的外部设备主动呼叫”,为了安全可能会直接拒绝连接,或者在后台弹窗等待用户手动点击“允许”(而在没有屏幕的嵌入式终端里,这就意味着连接会直接失败)。


二、 为什么有时候不执行 trust 也能连接成功?

主要有以下两个原因:

原因 1:您是主动发起连接的一方(Active Connection)

当您在终端输入 connect 30:A9:98:54:0B:E2 时,是开发板主动去呼叫耳机
因为这个连接指令是您(管理员)手动下达的,系统不需要再去校验“该设备是否安全/是否被信任”(因为您已经明确指示要连它)。因此,只要耳机和板子之前已经完成了pair(配对),连接就能100%成功,无需 trust。

原因 2:配对成功后,系统自动将其设为了信任(Auto-Trust)

在现代的 BlueZ 蓝牙协议栈中,当您使用默认代理(default-agent)成功执行pair建立安全绑定后,系统在底层经常会自动、顺便将该设备标记为 Trusted: yes

  • 您可以尝试在刚配对完、还没输入 trust 时,运行 info <MAC> 查看。您会发现其 Trusted: 字段可能已经自动变成了 yes。这种情况下,再手动输入 trust 就属于重复操作,但完全无害。


总结与开发建议

  • pair解决了“两台设备互相认不认识、数据传不传输”的问题(安全加密)。

  • trust解决了“未来耳机开机,能不能自动连回板子”的问题(自动化回连)。

在编写嵌入式开机自动连接、或者自动化量产测试脚本时,强烈建议依然保留 trust <MAC> 这一步。这能确保您的开发板在无人值守、没有屏幕交互的情况下,100% 能够稳定地接受耳机的自动回连请求。

← 返回列表