android 5.1 rtl8723, rlt8821的蓝牙添加,android蓝牙驱动实现,源自官方文档

Porting Realtek Bluetooth USB driver into Android 5.0 Guide
Date : 2014/12/31
Version : 1.0
安卓蓝牙驱动添加,rtl8723蓝牙,rtl

1.1 要修改的文件:

要修改到底文件如下:

  1. build

Chg build\core\product.mk

  1. device

New device\companyName\platformName\bluetooth\bdroid_buildcfg.h
Chg device\companyName\platformName\BoardConfig.mk
Chg device\companyName\platformName\platformName.mk
New device\companyName\platformName\android.hardware.bluetooth.xml
New device\companyName\platformName\android.hardware.bluetooth_le.xml
Chg device\companyName\platformName\init.platformName.rc

  1. hardware
    New hardware\realtek*

  2. kernel
    Chg kernal\arch\arm\configs\ platformName_android_defconfig
    New kernal\driver\bluetooth\rtk_btusb.c
    New kernal\driver\bluetooth\rtk_btusb.h
    Chg kernal\driver\bluetooth\Kconfig
    Chg kernal\driver\bluetooth\Makefile
    New kernal\driver\hid\uhid.c
    Chg kernal\driver\hid\Kconfig
    Chg kernal\driver\hid\Makefile
    New kernal\include\linux\uhid.h

1.12 build

1.修改的文件
1)build\core\product.mk

_product_stash_var_list += \
	BOARD_WPA_SUPPLICANT_DRIVER \
	BOARD_WLAN_DEVICE \
	BOARD_USES_GENERIC_AUDIO \
	BOARD_KERNEL_CMDLINE \
	BOARD_KERNEL_BASE \
	BOARD_HAVE_BLUETOOTH \
	BOARD_HAVE_BLUETOOTH_BCM \
	BOARD_HAVE_BLUETOOTH_QCOM \
	BOARD_HAVE_BLUETOOTH_RTK \
	BOARD_VENDOR_QCOM_AMSS_VERSION \
	BOARD_VENDOR_USE_AKMD \
	BOARD_EGL_CFG \
	BOARD_BOOTIMAGE_PARTITION_SIZE \

添加Realtek BT Chip支持的宏定义。

1.2.2 device

该目录主要用于设定不同硬件平台board配置信息。不同的子目录对应不同的硬件平台,需要根据具体硬件平台进行修改。
1.修改的文件
1)将Realtek提供的文件\bluetooth\bdroid_buildcfg.h拷贝到目录device/{vendor}/{platform}/bluetooth/下(如果该目录已有此文件,可忽略此项)
2)修改文件device\companyName\platformName\BoardConfig.mk:

#OTA
TARGET_RECOVERY_UPDATER_LIBS += libnvrecoveryupdater

BOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR ?= device/{vendor}/{platform}/bluetooth
BOARD_HAVE_BLUETOOTH := true
#BOARD_HAVE_BLUETOOTH_BCM := true//commit by realtek
#BOARD_HAVE_BLUETOOTH_QCOM := true//commit by realtek
#BLUETOOTH_HCI_USE_MCT := true
#Realtek add start
BOARD_HAVE_BLUETOOTH_RTK := true
#Realtek add end

USE_CAMERA_STUB := false

设定BOARD_HAVE_BLUETOOTH_RTK为true,表示支持Realtek BT chip。

  1. device\companyName\platformName\platformName.mk

该部分主要有两处修改,分别用于拷贝Realtek的fw文件以及配置系统支持Bluetooth以及Bluetooth LE。
a. platformName.mk文件最后添加调用的命令,用于将Realtek需要的fw文件拷贝到指定的目录。

#Realtek add start
$(call inherit-product, hardware/realtek/bt/firmware/rtl8723a/device-rtl.mk)
$(call inherit-product, hardware/realtek/bt/firmware/rtl8723b/device-rtl.mk)
$(call inherit-product, hardware/realtek/bt/firmware/rtl8761a/device-rtl.mk)
$(call inherit-product, hardware/realtek/bt/firmware/rtl8821a/device-rtl.mk)
$(call inherit-product, hardware/realtek/bt/firmware/rtl8822b/device-rtl.mk)
$(call inherit-product, hardware/realtek/bt/firmware/rtl8723d/device-rtl.mk)
$(call inherit-product, hardware/realtek/bt/firmware/rtl8821c/device-rtl.mk)
#realtek add end

b. 如果用户需要支持Bluetooth以及Bluetooth LE,需要确保有如下配置,如果已经存在,则不需要配置。

#Realtek add start
PRODUCT_COPY_FILES += \     frameworks/native/data/etc/android.hardware.bluetooth.xml:system/etc/permissions/android.hardware.bluetooth.xml \     frameworks/native/data/etc/android.hardware.bluetooth_le.xml:system/etc/permissions/android.hardware.bluetooth_le.xml
#realtek add end

同时需要确保frameworks/native/data/etc/目录有对应的文件android.hardware.bluetooth.xml以及android.hardware.bluetooth_le.xml。如果没有请拷贝Realtek提供的device\companyName\platformName\下对应的文件到frameworks/native/data/etc/目录。
4)device\companyName\platformName\init.platformName.rc

on boot

bluetooth

# change back to bluetooth from system

chown bluetooth net_bt_stack /data/misc/bluetooth
mkdir /data/misc/bluedroid 0770 bluetooth net_bt_stack

USB device

insmod /system/lib/modules/rtk_btusb.ko(根据rtk_btusb.ko所在的平台目录修改此路径!)
chmod 0660 /dev/rtk_btusb
chown bluetooth net_bt_stack /dev/rtk_btusb

    # bluetooth MAC address programming
    chown bluetooth net_bt_stack ro.bt.bdaddr_path
    chown bluetooth net_bt_stack /system/etc/bluetooth
    chown bluetooth net_bt_stack /data/misc/bluetooth
    setprop ro.bt.bdaddr_path "/data/misc/bluetooth/bdaddr"

5)修改目录device\companyName\platformName下的文件ueventd.platformName.rc,在文件末尾添加

6)修改目录 device\companyName\platformName\sepolicy下的文件file_contexts,在此文件中添加

7)检查 device\companyName\platformName\device-common.mk 文件中的变量 LOCAL_KERNEL 的值,确保指向的是正确的 Kernel 的镜像。

1.2.3hardware

将Realtek提供的/hardware/realtek/整个目录拷贝到/hardware/下。
1.3 Kernel设置
1.3.1 rtk_btusb driver

1.将Realtek提供的文件rtk_btusb.h和rtk_btusb.c拷贝到目录kernel/drivers/bluetooth/下;
2.修改目录/kernel/drivers/bluetooth/下的文件“Kconfig” and “Makefile”
在Kconfig文件中增加rtu_btusb的选项:

在Makefile文件中添加目标文件rtk_btusb.o:

1.3.2uhid driver
如果kernel不支持uhid driver,需要加入uhid driver以支持蓝牙HID以及HOGP profile.
1.将Realtek提供的文件uhid.c拷贝到目录/kernel/drivers/hid/下
2.将Realtek提供的文件uhid.h拷贝到目录/ kernel/include/linux/下
3.修改目录/kernel/drivers/hid/下的文件 “Kconfig” 和 “Makefile”
在Kconfig文件中增加uhid的选项:

在Makefile文件增加目标文件uhid.o:

1.3.3 platform configuration

需要确保平台对应的config文件中已配置支持rtk_butsb driver,该配置文件一般位于kernel/arch/arm/configs/目录下,用来配置编译kernel的选项,你可以直接修改“.config”文件或者用命令“make menuconfig”来修改kernel选项,无论选择哪种方法,最终都要确保有以下配置:

1.3.4 uinput driver

如果需要支持AVRCP功能,确保\kernel\arch\arm\configs\XXX_defconfig文件中有以下配置:

CONFIG_INPUT_UINPUT=y # User level driver support
CONFIG_INPUT_MISC=y

1.3.5 tun driver

如果需要支持Bluetooth PAN功能,确保\kernel\arch\arm\configs\XXX_defconfig文件中有以下配置:

CONFIG_TUN=y

1.4 Bluetooth patches

为了使Realtek BT chip在android5.0上能够正常工作,还需要合入下面的patch文件。需要合入的bluetooth patches文件都在patches文件夹,其内容如下:

Realtek的patch 文件都放在上面的几个目录中,其中文件夹的命名方式是以目录的方式来命名的,比如:external_bluetooth_bluedroid_patches表示这里面的patch都是合入到external/bluetooth/bluedroid/ 目录,一般情况下这些目录都会有git project,这时客户只需要将该目录下的patch文件全部合入(git am *.patch)到客户的SDK中即可。
如果该目录没有git project的话,那么需要客户自己添加这部分到客户的SDK中,方便后期维护。

1.4.1 如何合入patch

客户需要首先拷贝patch文件到指定的目录,比如对于external_bluetooth_bluedroid_patches目录下的patch文件,首先需要将这下面的patch文件全部拷贝到external\bluetooth\bluedroid目录,然后在external\bluetooth\bluedroid目录执行下面的命令打入所有的patch:
git am *.patch
当然,合入patch的方法还有很多种,客户也可以采用自己熟悉的方式。合入patch时有可能会出现冲突,如果出现冲突了,就需要客户手动来修改解决了。

1.4.2 patch文件说明

1)external_bluetooth_bluedroid_patches
该目录下目前有如下patch,都是修改bluedroid的其他问题,客户可以从git commit log中查看。

2)framwork_patches
该目录下的patch用于修正bluetooth java层的一些bug。

3)packages_apps_Bluetooth_patches
该目录下的patch用于修正bluetooth java层的一些bug。

2BT功能配置(可选)
2.1支持的Profile配置
对于有些平台应用不需要支持PBAP,HFP以及HSP,可以按照下面的配置来关闭这几个Profile,如果用户需要支持,只需把对应值设置为true即可。
packages/apps/Bluetooth/res/values/config.xml文件如下

<resources>
    <bool name="profile_supported_a2dp">truebool>
    <bool name="profile_supported_a2dp_sink">faslebool>
    <bool name="profile_supported_hdp"> false bool>
    <bool name="profile_supported_hs_hfp"> false bool>
    <bool name="profile_supported_hfpclient">faslebool>
    <bool name="profile_supported_hid">truebool>
    <bool name="profile_supported_opp">truebool>
    <bool name="profile_supported_pan">truebool>
    <bool name="profile_supported_pbap"> false bool>
    <bool name="profile_supported_gatt">truebool>
    <bool name="pbap_include_photos_in_vcard"> false bool>
    <bool name="pbap_use_profile_for_owner_vcard"> false bool>
    <bool name="profile_supported_map"> false bool>
    <bool name="profile_supported_avrcp_controller">falsebool>
resources>

2.2本地设备名称,COD以及HFP支持设定

修改BTM_DEF_LOCAL_NAME为平台需要的名称。
修改BTA_DM_COD为平台需要的COD(具体请参考SIG官方网站COD部分 https://www.bluetooth.org/zh-cn/specification/assigned-numbers/baseband),可以根据网站上COD的值来确定您需要的COD。Realtek默认的值是 #define BTA_DM_COD {0x5A, 0x01, 0x1C}。
Bluedroid 可以设定HSP/HFP的不同支持,客户可根据需求设定:

  1. 同时支持HSP/HFP,bluedroid 会默认优先使用HFP, 则在bdroid_buildcfg.h中定义
#define BTIF_HF_SERVICES (BTA_HSP_SERVICE_MASK| BTA_HFP_SERVICE_MASK)
#define BTIF_HF_SERVICE_NAMES  { BTIF_HSAG_SERVICE_NAME,BTIF_HFAG_SERVICE_NAME}

2.只支持HSP, 则在bdroid_buildcfg.h中定义

#define BTIF_HF_SERVICES (BTA_HSP_SERVICE_MASK)
#define BTIF_HF_SERVICE_NAMES  { BTIF_HSAG_SERVICE_NAME, NULL }


#ifndef _BDROID_BUILDCFG_H
#define _BDROID_BUILDCFG_H

#define BTM_DEF_LOCAL_NAME "Realtek Tablet"
// SERVICE_CLASS:0x5A (Bit17 -Networking,Bit19 - Capturing,Bit20 -Object Transfer,Bit22 -Telephony)
// MAJOR CLASS: COMPUTER
// MINOR CLASS: TABLET
#define BTA_DM_COD {0x5A, 0x01, 0x1C}
 
#define BTIF_HF_SERVICES (BTA_HSP_SERVICE_MASK)
#define BTIF_HF_SERVICE_NAMES  { BTIF_HSAG_SERVICE_NAME, NULL }

#endif

2.3 配置Extra Config文件

对于新卡片支持Extra Config文件配置config,如需使用Extra Config文件配置config,可在/data/misc/bluetooth/目录下新建rtk_btconfig.txt文档,修改文件权限为644。具体配置方式以8723bs为例说明:

1)文件首行必须为需要配置的蓝牙芯片的config文件名,如这里对8723bs config进行配置,则首行内容必须与8723bs config文件名一致,即“rtl8723bs_config”
2)从文件次行开始进行config offset及value值配置。格式为两字节offset + 一字节length + length字节value值,小端模式,以16进制设置,以空格分隔每个字节,每行设置一个offest及value。如图中次行设置即为:offst:0x015b、length:0x04 value:0x21222221
3)支持用“#”进行单行注释
4)不支持对MAC address配置
注:请不要随意使用Extra Config文件进行config内容配置,如有需要,请一定请FAE对配置内容进行review,否则容易由于异常配置导致各种问题。

3 Porting结束后的基本测试

3.1配置检查
为了进一步确保porting没有问题,在测试之前先确认fw以及config文件是否存在。
1)adb shell到测试平台的根目录,检查测试平台的/system/etc/firmware目录下是否有类似于rtl87*_fw文件是否存在。

3.2Enable Bluedroid BtSnoop log(可选)

  1. adb pull system/etc/bluetooth/bt_stack.conf
  2. 修改bt_stack.conf文件,把Debug Level从2改成6,并打开BtSnoop的LOG。
 # Enable BtSnoop logging function
 # valid value : true, false
 BtSnoopLogOutput=true

 # BtSnoop log output file
 BtSnoopFileName=/sdcard/btsnoop_hci.cfa

 # Preserve existing BtSnoop log before overwriting
BtSnoopSaveLog=false

 # 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=6
TRC_HCI=6
TRC_L5CAP=6
TRC_RFCOMM=6
TRC_OBEX=6
TRC_AVCT=6
TRC_AVDT=6
TRC_AVRC=6
TRC_AVDT_SCB=6
TRC_AVDT_CCB=6
TRC_A5D=6
TRC_SDP=6
TRC_GATT=6
TRC_SMP=6
TRC_BTAPP=6
TRC_BTIF=6
  1. adb push bt_stack.conf system/etc/bluetooth/

  2. 通过UI(Setting/bluetooth/)开关一次bluetooth,使上述更改生效

你可能感兴趣的:(技术心得以及事项)