打印
[嵌入式linux]

iTOP-4412开发板-Android4.4-Bluetooth移植文档(二)

[复制链接]
629|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1.5 HAL  层移植
Bluetooth 的 HAL 层主要有 Bluedroid 协议栈与 MT6620 vendor 提供底层库文件组成。
需要我们重点关注的有 bluetooth.default.so 该动态库文件提供了 Framework 层调用 HAL
层的 API 接口,同时向下调用 libbt-hci.so 。
bluetooth.default.so 包含两个静态库:libbt-brm_stack.a libbt-brm_bta.a . libbt-brm_stack.a 提
供 Bluetooth 各种 profiles 的支持, 比如 a2dp,hid,pan 等等, libbt-brm_bta.a 用于与
framdwork 层进行通信.
libbt-hci.so 该动态库提供 bluetooth.default.so 的底层支持,另外他会调用 libbt-vendor.so 接口,
通过串口发送,接收命令,数据的操作也是通过该动态库实现的。他位于 bluedroid 源码目录
hci 文件夹下。
libbt-vendor.so 厂 商 库 文 件 , 用 于 实 现 厂 商 提 供 的 蓝 牙 模 块 特 性 支 持 , 库 文 件 位 于
android4.4/iTop4412_KK4.4/hardware/mediatek/bt/combo_mt66 目录下。
1.5.1 Bluedroid
从 Android 4.2 开始,Bluetooth stack 发生了重大改变:从 Bluez 换成了由 Google 和 Broadcom
联合开发的 Bluedroid(当然,核心的部分还是 Broadcom 的,Google 主要是做了和上层 Framework
相关的部分)。
Bluedroid 和 Bluez 相比,有如下优点:
■ 层次结构清晰。各个 profile 对上层接口统一,便于增加新的 profile;
■ 增加了 HAL 层,便于移植。
■ 去掉了 DBus,Framework 的 Java 代码直接调用到 Bluedroid 的 Native 代码。
但是 Android 4.2 中的 Bluedroid 与 Android 4.0 中的 Bluez 相比,功能要少,例如不支持 AVRCP
1.3, Bug较多,例如某些蓝牙耳机不能重拨最后一个电话。最重要的是4.2的Bluedroid不支持BLE。
不过在刚刚发布的 Android 4.3 中已经有了很多改进,AVRCP 1.3 和 BLE 都得到了支持。
目前有一些Android 4.1或4.2的设备是支持BLE的,但是都是采用的Vendor自己的解决方案,
比如 Bluetooth stack 采用 Bluez 5.x,再提供 Vendor BLE Android SDK. 现在 Android 4.4 已经发布,
从未来发展趋势来看,如果有人要学习 Bluetooth in Android,建议不要再研究 Bluez,最好转向
Bluedroid。
以下是 Android 4.4 中 Bluetooth 相关代码之分布:
笔者在进行 Bluetooth 的调试过程中,使用 Logcat 命令输出 Android 的调试信息,在 Android
的Setting界面开启蓝牙功能,根据打印信息的输出,发现Enable Bluetooth的过程中出现了问题,
最后查找原因是因为 MT6620 芯片工作前需要需要下载固件补丁,这个过程需要花费一定的时间,
然后 bluetooth.default.so 库文件代码中对开启 Bluetooth 有一定的时间限制,默认情况下是 3000
毫秒的超时时间,超时后会 disable 蓝牙,后经笔者修改为 20 000 毫秒,这样即可 enable 蓝牙
芯片,从而进入工作状态.
修改文件: iTop4412_KK4.4/external/bluetooth/bluedroid/Android.mk
1.5.2 init.connectivity.rc  文件
init.connectivity.rc 文件路径:
iTop4412_KK4.4/hardware/mediatek/config/combo_mt66xx/ init.combo_mt66xx.rc
原始文件名称为 init.combo_mt66xx.rc,拷贝到 ramdisk 的 root 目录下面名称变更为
init.connectivity.rc 文件 。
我们在该文件增加了加载驱动模块库操作,运行 wmt_lanucher 服务操作,另外需要注意
文件原有的创建 bluetooth 相关目录操作,及修改权限,变更拥有者,这些 command 非常
的重要,比如:
# Load Blue module
insmod /system/lib/modules/mtk_stp_bt.ko
chmod 0660 /dev/stpbt
chown bluetooth system /dev/stpbt
mkdir /data/bluetooth 0711 bluetooth bluetooth
mkdir /data/misc/bluedroid 0771 bluetooth bluetooth
1.5  总结
用户在移植 HAL 层之前可以先使用 MTK 提供的蓝牙测试工具 autobt 进行测试,该测试
工具脱落复杂的 HAL 层,直接调用 libbt-vendor.so 也就是厂商自己的库文件,在 Android 的
命令行中执行即可,可以使用该命令查询其他的蓝牙设备,发送,接收文件等等。是判断蓝
牙硬件是否正常工作的有力工具,使用autobt测试通过后,再调试Android HAL及上层部分。
autobt 工具的源码位于:
iTop4412_KK4.4/hardware/mediatek/utility/hw_test_tool/bluetooth/src/tool
另外 MTK 官方提供了 Bluetooth 的多个补丁,路径:
APEX_Android_4.4_MP_SW_package_V2.0/Document/BT_patch_description(must read)
这些补丁是比较重要的,有关于蓝牙基础连接方面的,也有关于蓝牙文件发送接收,蓝
牙鼠标,蓝牙耳机方面的,需要根据您的产品需求打对应的补丁,我们发布的 Android4.4
代码中已经打上了蓝牙基础连接,和文件发送接收方面的补丁,其他的补丁未处理.

HAL 层修改完成后在 Android4.4 的 Setting 里面打开 Bluetooth,就可以扫描到其他蓝牙
设备,然后进行配对,配对完成后就可以进行文件的传输操作了,笔者仅测试了蓝牙的文件
发送与接收功能,其他的蓝牙功能比如蓝牙耳机,蓝牙鼠标的使用均未进行测试,不过有了
文件发送接收的测试基本说明了蓝牙的 Porting 是 OK 的,如果您有兴趣或者需求,可以移
植蓝牙其他更丰富的功能与应用。

使用特权

评论回复

相关帖子

沙发
zeshoufx| | 2020-6-11 11:30 | 只看该作者
谢谢分享,,,,,,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

636

主题

716

帖子

1

粉丝