s
1.准备20150528_RTL8723BU_BT_android5.0_V3.0_P11_FW_svn14422-BTCOEX20150119-5844.zip文件
2.将上面提供的蓝牙驱动文件rtk_btusb.h和rtk_btusb.c拷贝到kernel的drivers/bluetooth/
drivers/bluetooth/rtk_btusb.c
drivers/bluetooth/rtk_btusb.h
3.修改linux-3.4/drivers/bluetooth/Kconfig
config BT_RTKBTUSB
tristate "RTK HCI USB driver"
depends on USB
help
RTK Bluetooth HCI USB driver
3.修改linux-3.4/drivers/bluetooth/Makefile
obj-$(CONFIG_BT_RTKBTUSB) += rtk_btusb.o
4.修改linux-3.4/.config
//usb蓝牙
CONFIG_BT_RTKBTUSB=m
//hid支持
CONFIG_UHID=y
CONFIG_HID_A4TECH=y
CONFIG_HID_ACRUX=y
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_APPLE=y
CONFIG_HID_BELKIN=y
//PAN支持
CONFIG_TUN=y
// AVRCP支持
CONFIG_INPUT_UINPUT=y # User level driver support
CONFIG_INPUT_MISC=y
5.编译kernel,生成
./build.sh
out/sun8iw5p1/android/common/lib/modules/3.4.39/rtk_btusb.ko
6.修改Android device 层 init.rc 插入蓝牙驱动
1.device/softwinner/astar-d7/init.sun8i.rc
on early-fs
.....
insmod /system/vendor/modules/rtk_btusb.ko
7.编译固件后,看蓝牙驱动是否加载成功
root:/ # ls dev/rtk_btusb
dev/rtk_btusb
8.接下来让蓝牙能再hard层显示,修改BoardConfig.mk,添加对Realtek支持
vi device/softwinner/astar-d7/BoardConfig.mk
BOARD_WIFI_VENDOR := realtek
ifeq ($(BOARD_WIFI_VENDOR), realtek)
WPA_SUPPLICANT_VERSION := VER_0_8_X
BOARD_WPA_SUPPLICANT_DRIVER := NL80211
BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_rtl
BOARD_HOSTAPD_DRIVER := NL80211
BOARD_HOSTAPD_PRIVATE_LIB := lib_driver_cmd_rtl
BOARD_USR_WIFI := rtl8723bu
#BOARD_USR_WIFI := rtl8189es
include hardware/realtek/wlan/config/config.mk
..........
..........
BOARD_HAVE_BLUETOOTH := true
BOARD_HAVE_BLUETOOTH_BCM := true
BOARD_HAVE_BLUETOOTH_NAME := rtl8723bu
BOARD_HAVE_BLUETOOTH_RTK_COEX := true
BOARD_HAVE_BLUETOOTH_RTK := true
BLUETOOTH_HCI_USE_RTK_H5 := true
BOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR := device/softwinner/astar-d7/bluetooth
TARGET_USE_BOOSTUP_OPZ := true
9.修改init.sun8i.rc
device/softwinner/astar-d7/init.sun8i.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
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"
10. 修改astar_d7.mk,选择支持蓝牙固件,这里固件一般android自带的源码有,我资源里面也有
vi device/softwinner/astar-d7/astar_d7.mk
........
$(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/rtl8821a/device-rtl.mk)
$(call inherit-product, hardware/realtek/bt/firmware/rtl8761a/device-rtl.mk)
#If the customer want support LE, make sure the configure below.
#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 en
....................
11.修改ueventd.sun8i.rc 增加热插拔usb节点权限
vi device/softwinner/astar-d7/ueventd.sun8i.rc
.....
/dev/rtk_btusb 0660 bluetooth net_bt_stack
12.修改 file_contexts
vi device/softwinner/astar-common/sepolicy/file_contexts
.....
# Bluetooth
/dev/rtk_btusb u:object_r:hci_attach_dev:s0
13.修改bt_vendor.conf
vi device/softwinner/astar-d7/bluetooth/bt_vendor.conf
# UART device port where Bluetooth controller is attached
UartPort = /dev/rtk_btusb
# Firmware patch file location
FwPatchFilePath = /system/vendor/modules/
# Firmware Name
FwPatchFileName = bcm20710a1.hcd
14.修改rtkbt.conf
vi device/softwinner/astar-d7/bluetooth/rtkbt.conf
#For usb /dev/rtk_btusb
BtDeviceNode=/dev/rtk_btusb
此后编译完成后,加载蓝牙发现 hard层没有libbt-vendor_usb.so,打开蓝牙失败!
接下来hard层支持usb蓝牙库
15.将 hardware/realtek/bluetooth/libbt-vendor/下新建文件夹 uart,拷贝libbt-vendor所有文件到uart;
新建文件夹 usb,拷贝libbt-vendor/include下bt_vendor_rtk.h upio.h vnd_buildcfg.h 到usb/include;拷贝libbt-vendor/src/bt_vendor_rtk.c upio.c 到 usb/src
cd hardware/realtek/bluetooth/libbt-vendor/
Android.mk uart/ usb/
libbt-vendor$ ls uart/
Android.mk include/ src/
libbt-vendor$ ls uart/include/
bt_vendor_rtk.h upio.h userial_vendor.h vnd_buildcfg.h
libbt-vendor$ ls uart/src/
bt_vendor_rtk.c hardware.c upio.c userial_vendor.c
libbt-vendor$ ls usb/
Android.mk include/ src/
libbt-vendor$ ls usb/include/
bt_vendor_rtk.h upio.h vnd_buildcfg.h
libbt-vendor$ ls usb/src/
bt_vendor_rtk.c upio.c
16.修改usb/include/vnd_buildcfg.h 下BLUETOOTH_UART_DEVICE_PORT
#ifndef _VND_BUILDCFG_H
#define _VND_BUILDCFG_H
#define BLUETOOTH_UART_DEVICE_PORT "/dev/rtk_btusb"
#define BTVND_DBG TRUE
#define LPM_SLEEP_MODE FALSE
#endif
17.修改usb/Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
BDROID_DIR := $(TOP_DIR)system/bt
LOCAL_SRC_FILES := \
src/bt_vendor_rtk.c \
src/upio.c
LOCAL_C_INCLUDES += \
$(LOCAL_PATH)/include \
$(BDROID_DIR)/hci/include
LOCAL_SHARED_LIBRARIES := \
libcutils
LOCAL_MODULE := libbt-vendor_usb
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
include $(BUILD_SHARED_LIBRARY)
18.hardware/realtek/bluetooth/libbt-vendor/新增加Android.mk
LOCAL_PATH := $(call my-dir)
include $(call all-subdir-makefiles)
19.最后编译通过
android6.0-a33/android# mmm hardware/realtek/bluetooth/libbt-vendor/
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=6.0.1
TARGET_PRODUCT=astar_d7
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
TARGET_CPU_VARIANT=cortex-a7
TARGET_2ND_ARCH=
TARGET_2ND_ARCH_VARIANT=
TARGET_2ND_CPU_VARIANT=
HOST_ARCH=x86_64
HOST_OS=linux
HOST_OS_EXTRA=Linux-4.2.0-27-generic-x86_64-with-Ubuntu-14.04-trusty
HOST_BUILD_TYPE=release
BUILD_ID=MOB30R
OUT_DIR=out
============================================
No private recovery resources for TARGET_DEVICE astar-d7
make: Entering directory `/home/yufea/mnt/A33/blue_wifi_android6/android6.0-a33/android'
target SharedLib: libbt-vendor_usb (out/target/product/astar-d7/obj/SHARED_LIBRARIES/libbt-vendor_usb_intermediates/LINKED/libbt-vendor_usb.so)
target Pack Relocations: libbt-vendor_usb (out/target/product/astar-d7/obj/SHARED_LIBRARIES/libbt-vendor_usb_intermediates/PACKED/libbt-vendor_usb.so)
INFO: Compaction : 0 bytes
INFO: Too few relocations to pack after alignment
target Symbolic: libbt-vendor_usb (out/target/product/astar-d7/symbols/system/lib/libbt-vendor_usb.so)
target Strip: libbt-vendor_usb (out/target/product/astar-d7/obj/lib/libbt-vendor_usb.so)