在android平台中,经常出现外围设备的移植,其中涉及到比较多模块的修改,比如kernnel, android(hardware, external, package)等模块都可能需求动。
(1)驱动的添加
厂商一般都会给各自的蓝牙器件添加驱动文件(eg:rtk_btusb.c,rtk_btusb.h),添加到drivers/bluetooth/目录即可,如果涉及到uhid模块的话,添加到对应目录即可。
接着修改Kconfig,Makefile加入刚才的模块和文件,通常编译生成KO方便android动态库加载
(2)编译模块的添加
build/core/product.mk : _product_stash_var_list 添加 BORAD_HAVE_BTUETOOTH_RTK
device/{vendor}/{platform}/BoardConfig.mk: 定义BORAD_HAVE_BTUETOOTH_RTK := true ;
BOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR ?= device/{vendor}/{platform}/bluetooth
device/{vendor}/{platform}/{platformName}.mk: 添加hardware层蓝牙厂商libbt-vendor_xxx.so以及bluetooth.xxx.so 动态库的编译
如:$(call inherit-product, hardware/realtek/bt/firmware/rtl8723a/device-rtl.mk)指定makefie
编译完之后重写PRODUCT_COPY_FILES ,拷贝frameworks/native/data/etc/android.hardware.bluetooth.xml
frameworks/native/data/etc/android.hardware.bluetooth_le.xml
(3)驱动的加载
编译完成kernel,hardware,各层的驱动库和动态库之后,修改init.{platformName}.rc脚本来加载驱动 ,修改属主和属组;
修改uevent.{platfromName}.rc 修改新增蓝牙设备节点权限
在系统安全上下文文件file_contexts添加该节点的设置