如何在 linux 的设备驱动程序级别实现蓝牙低功耗?
每个新蓝牙版本都有新的蓝牙堆栈代码吗?
Bluez是 Linux 蓝牙的堆栈。新版本的蓝牙导致代码发生变化,但这不是完全重写或类似的剧烈变化。较新版本的蓝牙通常是现有协议的扩展,但低功耗除外。Linux 的内核级别完全支持低能耗,但是没有很多方便的库可以与 LE 进行更高级别的交互。
由于 Bluez 与 LE 的不完整性,我不得不直接与内核代码交互以实现 LE 的功能。此外,我不得不使用 Bluez 5.x 不支持的旧内核,而不得不使用 Bluez 4.x。
Tim 和 jhonnash 已经为您的问题提供了全面的信息。但是,我想从 Android Mobile 的角度再添加一项信息。
新版本的 Android 使用 Bluedroid 作为蓝牙堆栈。这与 Bluez 完全不同。
Bluez 的功能分布在用户空间和内核空间。RFCOMM、HCI 和 L2CAP 等所有协议都是在内核级别实现的,而 Profiles 是在用户空间实现的。正如 Tim 所提到的,为了支持 Low energy,Bluez 必须在内核级别以及用户空间提供支持。这有时很难跟踪和理解。任何新的更改都可能需要修改内核以及用户空间代码。
另一方面,Bluedroid 比 Bluez 有一些优势。Bluedroid 已经在用户空间实现了它的完整功能。因此,任何新功能只需要在用户级代码中添加。不依赖内核代码。
另外,要回答您的问题“每个新蓝牙版本是否都有新的蓝牙堆栈代码?” 新版本的蓝牙不需要完全重写,因为蓝牙新版本向后兼容,所以只有那些代码部分被添加到已经存在的新堆栈中。
问候
由于您的问题并不完全清楚,这就是为什么我还尝试提供所有可能的协议来访问 linux 的蓝牙低功耗堆栈。
在UHID Driver "HoG (HID over GATT/Bluetooth-Low-Energy) 中:GATT 是在用户空间中实现的蓝牙协议。当用户空间打开与蓝牙设备的 LE(低功耗)连接时,设备可以通告通过 GATT 的 HID 功能。”
由于GATT服务已在此链接中正确定义。可以有除 GATT 之外的其他协议来访问低能耗设备。HID Over GATT 实现就是以这种方式完成的。