我正在使用BT / LE双模式加密狗以LE模式运行并使用自定义制造数据(充当OOB介质)。 该功能在ubuntu桌面系统(KERNEL - 3.13.0-57-generic)中运行良好,但在raspbian(KERNEL - 4.0.9+)中失败。我猜它与hci的内核实现有关,但我不确定。
在Ubuntu中,在仅LE模式下运行双模加密狗我可以使用hcitool(lescan)查看我的mac地址。但如果我用raspbian运行它,我可以看到随机地址广告而不是公共广告。
同样使用btmgmt的static-addr命令无法正常工作。 (仍然得到随机地址)。
那么,如何禁用随机地址或如何使用公共地址而不是随机地址?
提前致谢。
答案 0 :(得分:1)
这似乎是由激活的隐私功能触发的。
请参阅Core 4.0 Specification的10.7.1 Privacy Feature in a Peripheral
部分。
支持外设中的隐私功能取决于存在 和两个特征的价值:周边隐私标志 第12.3节和重新连接地址中定义的特性 第12.4节中定义的特性。当外围设备 隐私标志特征设置为1,启用隐私(也是 称为隐私启用外围设备)。
同时检查12.3 PERIPHERAL PRIVACY FLAG CHARACTERISTIC
以获取有关属性句柄和值的详细信息,也许您可以在设备中找到它。
为什么Ubuntu和Raspi之间存在差异,我只能猜测版本不完全相同。
如果您能发现广告配置中发送到蓝牙模块的hci命令有任何差异,您也可以尝试查看btmon
。
答案 1 :(得分:1)
这确实是内核蓝牙驱动程序的功能。新实现具有随机地址功能。但是这可以通过给出以下命令来修复btmgmt。
打开文件(您必须有一个控制器才能删除经典的BT控制器)
le on
关闭bredr
bredr off
打开电源
打开电源
设置可连接(这将使hci驱动程序使用公共地址而不是随机地址)
可连接
设置可发现(如果没有这个,bluez将丢弃该设备,因此无法通过dbus api获得。除非您更改bluez实现)
开始投放广告
广告
希望这有帮助