在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添加该节点的设置
蓝牙打印的开启,主要是通过bt_stack.conf 配置来开启对应模块
# Enable BtSnoop logging function # valid value : true, false BtSnoopLogOutput=true # BtSnoop log output file BtSnoopFileName=/data/data/btsnoop_hci.log # Preserve existing BtSnoop log before overwriting BtSnoopSaveLog=true # Enable trace level reconfiguration function # Must be present before any TRC_ trace level settings TraceConf=true # Trace level configuration # BT_TRACE_LEVEL_NONE 0 ( No trace messages to be generated ) # BT_TRACE_LEVEL_ERROR 1 ( Error condition trace messages ) # BT_TRACE_LEVEL_WARNING 2 ( Warning condition trace messages ) # BT_TRACE_LEVEL_API 3 ( API traces ) # BT_TRACE_LEVEL_EVENT 4 ( Debug messages for events ) # BT_TRACE_LEVEL_DEBUG 5 ( Full debug messages ) # BT_TRACE_LEVEL_VERBOSE 6 ( Verbose messages ) - Currently supported for TRC_BTAPP only. TRC_BTM=5 TRC_HCI=5 TRC_L2CAP=2 TRC_RFCOMM=5 TRC_OBEX=2 TRC_AVCT=2 TRC_AVDT=2 TRC_AVRC=2 TRC_AVDT_SCB=2 TRC_AVDT_CCB=2 TRC_A2D=5 TRC_SDP=5 TRC_GATT=2 TRC_SMP=2 TRC_BTAPP=5 TRC_BTIF=5配置文件打印控制部分在文件bte_logmsg.c中解析。