在 Bluez 5.31 中禁用对 LE 广告随机地址的支持

Disable support for Random Address for LE Advertising in Bluez 5.31

我正在使用 BT/LE 双模式加密狗到 运行 仅 LE 模式,带有自定义制造数据(充当 OOB 介质)。 该功能在 ubuntu 桌面系统(KERNEL - 3.13.0-57-generic)中运行良好,但在 raspbian(KERNEL - 4.0.9+)中失败。我猜这与 hci 的内核实现有关,但我不确定。

在 Ubuntu 中,运行在 LE 模式下使用双模式加密狗,我可以使用 hcitool (lescan) 查看我的 mac 地址。但是如果我 运行 它在 raspbian 我可以看到随机地址广告而不是 public 地址广告。

使用 btmgmt 的 static-addr 命令也不起作用。 (仍在获取随机地址)。

那么,如何禁用随机地址或如何使用 public 地址而不是随机地址?

提前致谢。

这似乎是由激活的隐私功能触发的。

请参阅 Core 4.0 Specification 的第 10.7.1 Privacy Feature in a Peripheral 部分。

Support of the privacy feature in a Peripheral depends on the presence and the value of two characteristics: Peripheral Privacy Flag characteristic as defined in Section 12.3 and the Reconnection Address characteristic as defined in Sec- tion 12.4. When the Peripheral Privacy Flag characteristic is set to 1, privacy is enabled (also known as privacy enabled Peripheral).

另请检查 12.3 PERIPHERAL PRIVACY FLAG CHARACTERISTIC 以了解有关属性句柄和值的详细信息,也许您可​​以在您的设备中找到它。

为什么Ubuntu和Raspi有区别,我只能猜测是版本不完全一样

您也可以尝试检查 btmon 是否可以发现在广告配置中发送到蓝牙模块的 hci 命令有任何差异。

这确实是内核蓝牙驱动的功能。新实现具有随机地址功能。但这可以通过 btmgmt 给出以下命令来解决。

  1. 关闭电源(需要禁用经典 BT) 关机
  2. 打开le(必须有一个手柄才能去掉经典BT手柄)

    继续

  3. 关闭bredr

    bredr 关闭

  4. 打开电源

    开机

  5. 设置可连接(这将使 hci 驱动程序使用 public 地址而不是随机地址)

    可连接于

  6. 设置可发现(否则,bluez 将丢弃该设备,因此将无法通过 dbus api。除非您更改 bluez 实现)

    发现于

  7. 开始投放广告

    广告在

希望对您有所帮助