您尚未登录。

楼主 #1 2017-12-18 09:55:14

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

在Android的Bluedroid堆栈【转载, chrome自动翻译】

在Android的Bluedroid堆栈

目录
Android中的蓝牙堆栈
Bluedroid .VS。配合bluez
Bluedroid栈的移植指南
1. Android中的蓝牙堆栈
从Android 4.2开始,谷歌使用Bluedroid栈作为其默认的蓝牙主机栈,在android 4.2之前,它的默认蓝牙主机栈是Bluez,它也是Linux发行版的默认栈。那么为什么谷歌改变了它的蓝牙栈?原因可能是Bluez stack是为桌面环境而设计的,所以为了将Bluez移植到android中,android必须解决一些依赖性问题,比如将Dbus,Linux桌面的默认IPC移植到android中。所以在android 4.2之前至少有五个供电蓝牙的程序,它们是系统,蓝牙APP,蓝牙,hciattach和Dbus。该死的东西是他们之间有bug,所以蓝牙堆栈是android系统之前android 4.2中最弱的部分,是的,这是通常的原因,android系统损坏。
那么Bluedroid和Bluez的区别是什么,Bluedroid是由一个着名的无线通信技术公司Broadcom开发的,它更适合嵌入式设备?根据以下的描述,通过使用Bluedroid堆栈,蓝牙APP进程和系统框架进程,只剩下两个驱动蓝牙子系统的进程。Bluedroid堆栈正在运行并嵌入到蓝牙应用程序进程中。我认为这个设计简化了蓝牙子系统。
+ -------------------------------------- +
| 应用程序框架|
| + ----------------------------- + |
| | BT Apps API | |
| | android.bluetooth | |
| + ----------------------------- + |
+ ----------------- ^ -------------------- +
                  |
                  | Binder
                  |
+ ----------------- v -------------------- +
| 蓝牙进程:Packages / apps / |
| 蓝牙|
| |
| + ------------------------------ + |
| | 蓝牙服务| |
| + ------------------------------ + |
| | 蓝牙配置文件| |
| + ------------------------------ + |
+ ----------------- ^ -------------------- +
                  |
                  | JNI
                  |   
+ ----------------- v -------------------- +
| HAL硬件/ libhardware / include / |
| 硬件/ |
| |
| + -------------------------------- + |
| | 蓝牙HAL接口| |
| + -------------------------------- + |
| |蓝牙配置文件HAL接口| |
| + -------------------------------- + |
+ ---------------- ^ --------------------- +
                 |
                 |
+ ---------------- v --------------------- +
| BlueDroid的堆栈/外部/蓝牙/ |
| bluedroid |
| |
| + --------------------------------- + |
| | 蓝牙应用层| |
| + --------------------------------- + |
| | 蓝牙嵌入式系统| |
| + --------------------------------- + |
| + --------------------------------- + |
| | 供应商扩展| |
| | / vendor / company / libbt-vendor | |
| + --------------------------------- + |
+ -------------------------------------- +

2. Bluedroid .VS。配合bluez
Bluedroid和Bluez的实现细节的主要区别在于Bluedroid中包含了HCI层。HCI是主机控制接口的缩写,是主机堆栈和控制堆栈之间的通信协议,它在Linux内核中有一个实现,所以它被排除在Linux的传统蓝牙堆栈Bluez之外。除了HCI层之外,Bluedroid还排除了任何IPC机制,这意味着它不再在独立的守护进程中运行,而是必须嵌入到您的系统中。

3. Bluedroid栈的移植指南
那么如何在你的系统中使用Bluedroid?是的,我已经知道Bluedroid是Broadcom的蓝牙主机栈,它是一个非常稳定的蓝牙主机栈,所以如果我想将Bluedroid栈移植到另一个系统。
这个问题有两个部分,或者我把这个问题分为两个阶段。
如何将Bluedroid栈移植到除android以外的其他操作系统?
如何驱动另一个蓝牙硬件而不是Bluedroid的Broadcom?
问题一:关键部分是Bluedroid源代码中的btif目录,我不得不重新实现bluedroid堆栈的btif部分,幸运的是,在btif中已经有了一个android实现,这是一个很好的参考。
问题二:有一个名为bt_vendor的模块,其职责包括重置通信总线,电源管理和配置固件。所以我需要调整bt_vendor模块来驱动新的硬件。





离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn