RTL8723BU在I.MX6 DQ平台上的移植

摘要:

在移植时请注意,因为Realtek发布的移植代码和文档不是针对Freescale平台的,所以首先看一下,目前使用的平台是否已经支持BT和WIFI功能(可能不是我们要移植的模块)。

一般情况下,原厂发布BSP都支持BT和WIFI功能,也就是说Android OS部分已经完整的包含BT和WIFI功能,只要适配驱动和HAL即可。我们针对RTL8723BU的BT和WIFI的移植就是基于这个思路去移植的。

因为I.MX6 DQ的BSP已经支持BT模块ath3k,如果硬件使用ath3k的UART模块,那么平台的BT功能是OK的。而WIFI部分平台是支持RTL8723AS的SDIO模块,也就是说硬件使用RTL8723AS的SDIO接口的WIFI模块,那么平台是已经支持了WIFI功能。

 基于这个情况,我们将RTL8723BU的BT和WIFI二合一模块移植BT和WIFI功能,只需要适配驱动和HAL即可实现。

1. 资源的获取

   从Realtek提供的FTP上下载   

20140714_RTL8723BU_WiFi_linux_v4.3.6_11841_BT_android4.4_V2.19_P23_FW_svn12197-BTCOEX20140507-4E40文件包,里面包含:

WIFI相关的文件:

RTL8723BU_WiFi_linux_v4.3.6_11841.20140714_BTCOEX20140507-4E40.zip

BT相关的文件:

20140530_RTL8723BU_BT_android4.4_V2.19_P23_FW_svn12197-BTCOEX20140507-4E40.zip

涉及到的补丁文件

Wi-Fi_patch/

2. RTL8723BU WIFI移植

2.2 驱动部分的移植

2.2.1驱动源码文件  

减压RTL8723BU_WiFi_linux_v4.3.6_11841.20140714_BTCOEX20140507-4E40.zip,将里面的drivers/rtl8723BU_WiFi_linux_v4.3.6_11841.20140711_BTCOEX20140507-4E40.tar.gz加压到/kernel_imx/drivers/net/wireless/rtl8723bu/文件夹下面,修改驱动本身的配置和内核的配置文件,如下:

2.2.2修改驱动本身的配置

  1. 修改/kernel_imx/drivers/net/wireless/rtl8723bu/Makefile

   添加:

   CONFIG_PLATFORM_FS_MX6Q = y

   ifeq ($(CONFIG_PLATFORM_FS_MX6Q), y)

EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN

EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE

EXTRA_CFLAGS+= -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT

EXTRA_CFLAGS += -DCONFIG_P2P_IPS

ARCH := arm

CROSS_COMPILE := ~/s6000/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-

KSRc := ~/s6000/kernel_imx

MODULE_NAME := 8723bu

Endif

  1. 修改/kernel_imx/drivers/net/wireless/rtl8723bu/include/autoconf.h

使能以下配置:

#define CONFIG_IOCTL_CFG80211 1

//#define CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER

#define CONFIG_CONCURRENT_MODE 1

#define CONFIG_P2P_IPS

2.2.3修改内核配置:

修改/kernel_imx/drivers/net/wireless/Makefile文件,添加:

   obj-$(CONFIG_RTL8723BU) += rtl8723bu/

修改/kernel_imx/drivers/net/wireless/Kconfg文件,添加:

   source "drivers/net/wireless/rtl8723bu/Kconfig"

修改/kernel_imx/arch/arm/config/imx6_android_defconfig文件,添加:

   #CONFIG_RTL8192CE=m

   #CONFIG_RTL8723AS=m

   CONFIG_RTL8723BU=m

2.3 HAL层修改

修改/hardware/libhardware_legacy/wifi/wifi_unite.c,将

//#define WIFI_DRIVER_MODULE_PATH_REALTEK          "/system/lib/modules/8723as.ko"

//#define WIFI_DRIVER_MODULE_NAME_REALTEK          "8723as"

#define WIFI_DRIVER_MODULE_PATH_REALTEK          "/system/lib/modules/8723bu.ko"

#define WIFI_DRIVER_MODULE_NAME_REALTEK          "8723bu"

去掉wifi_load_driver()中的

422行  //WifiVendor = get_wifi_vendor_info();

2.4 Android OS部分的配置

修改编译内核拷贝模块修改成如下方式:

TARGET_KERNEL_MODULES        := \

                                kernel_imx/drivers/net/wireless/rtl8723bu/8723bu.ko:system/lib/modules/8723bu.ko \

                                kernel_imx/net/wireless/cfg80211.ko:system/lib/modules/cfg80211_realtek.ko

 

2.5 编译和测试

在源码的顶层目录执行

./s6000_build.sh

编译完成后下载boot.img和system.img启动系统,之后在主界面打开WIFI,就可以搜索到附件的热点了。

 

总结:因为WIFI热点部分需要3G网络的支持,目前平台的3G模块还没调试,所以等3G模块调试完毕之后,再来调试,并且我们的POS产品并没有特殊的要求WIFI热点。

3.  RTL8723BU BT移植

3.1 驱动文件的修改和内核配置

3.1.1 驱动资源文件

减压获取到的资料包中的20140530_RTL8723BU_BT_android4.4_V2.19_P23_FW_svn12197-BTCOEX20140507-4E40.zip文件,内核部分的代码20140530_RTL8723BU_BT_android4.4_V2.19_P23_FW_svn12197-BTCOEX20140507-4E40.zip/kernel/

3.1.2 合并驱动和内核驱动配置

  1. 复制获取的BT资料下面

  kernel/drivers/bluetooth/rtk_btusb.h

  kernel/drivers/bluetooth/rtk_btusb.h

到I.MX6 DQ平台的kernel_imx/drivers/bluetooth/下面.

  1. 修改kernel_imx/drivers/bluetooth/Makefile,添加

  obj-$(CONFIG_BT_RTKBTUSB) += rtk_btusb.o

  修改kernel_imx/drivers/buletooth/Kconfig,添加

  config BT_RTKBTUSB

tristate "RTK HCI USB driver"

depends on USB

help

  RTK Bluetooth HCI USB driver

修改kernel_imx/arch/arm/configs/imx6_android_defconfig

CONFIG_BT_RTKBTUSB=m

去掉UART口的ath3k蓝牙模块的驱动配置,如下:

CONFIG_BT_HCIUART is not set

CONFIG_BT_HCIUART_ATH3K is not set

编译内核,将RTL8723BU的驱动编译成rtk_btusb.ko,将rtk_btusb.ko拷贝到/device/fsl/sabresd_dq/bluetooth/目录,后面系统启动加载模块要用。

3.2 HAL层的设置

   HAL层的Realtek提供的文件在20140530_RTL8723BU_BT_android4.4_V2.19_P23_FW_svn12197-BTCOEX20140507-4E40.zip/hardware/目下。

拷贝hardware/realtek/bt到我们的hardware/realtek/bt/

修改hardware/realtek/bt/libbt-vendor/include/bt_vendor_rtk.h,如下:

  #define BLUETOOTH_UART_DEVICE_PORT      "/dev/ttyO1"  修改成

  #define BLUETOOTH_UART_DEVICE_PORT     "/dev/rtk_btusb"

复制hardware/realtek/bt/libbt-vendor/include/vnd_dalmore.txt到

     hardware/realtek/bt/libbt-vendor/include/vnd_sabresd_6dq.txt

 

修改hardware/imx/libbt-ath3k/Android.mk,如下:

   #ifneq ($(BOARD_USE_AR3K_BLUETOOTH),)

   ifeq ($(BOARD_USE_AR3K_BLUETOOTH),true)

让系统编译时,不编译ath3k的HAL层,否则会跟RTL8723BU的HAL引起冲突,编译不过去。

3.3 Android OS的配置

1) 修改device/fsl\sabresd_6dq/BoardConfig.mk,如下:

   #BOARD_USE_AR3K_BLUETOOTH := true

   BOARD_USE_AR3K_BLUETOOTH := false  ----->去掉ath3k HAL层编译

   BOARD_HAVE_BLUETOOTH_RTK := true  ------->添加RTL8723BU HAL编译

2) 修改device/fsl/imx6/sabresd_6dq.mk,添加如下:

#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/rtl8821a/device-rtl.mk)

$(call inherit-product, hardware/realtek/bt/firmware/rtl8761a/device-rtl.mk)

#realtek add end

 

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 \

  1. 修改device/fsl/imx6/imx6.mk,添加:

PRODUCT_PACKAGES += \

Email \

Bluetooth \  ------->添加这行,让系统将bluetooth.apk编译进去

PRODUCT_COPY_FILES += \

  device/fsl/justtide/gprs-3g/libhuawei-ril.so:system/lib/libhuawei-ril.so \

  device/fsl/sabresd_6dq/bluetooth/rtk_btusb.ko:system/lib/modules/rtk_btusb.ko ---->添加这行PRODUCT_DEFAULT_PROPERTY_OVERRIDES := \

persist.sys.usb.config=mtp \

ro.product.8723.bt=use ------->添加这行

  1. 修改device/fsl/imx6/etc/ueventd.freescale.rc,添加

   /dev/rtk_btusb             0660  bluetooth  net_bt_stack

  1. 修改device/fsl/imx6/etc/init.rc ,将

   # Prepare for bluetooth

    chmod 665 /sys/class/rfkill/rfkill0/state

    chown bluetooth bluetooth /sys/class/rfkill/rfkill0/state

write /sys/class/rfkill/rfkill0/state 0

 修改成:

    # Prepare for bluetooth

    #chmod 665 /sys/class/rfkill/rfkill0/state

    #chown bluetooth bluetooth /sys/class/rfkill/rfkill0/state

    #write /sys/class/rfkill/rfkill0/state 1

    

   # bluetooth realtek config init

   # change back to bluetooth from system

    chown bluetooth net_bt_stack /data/misc/bluetooth

    mkdir /data/misc/bluedroid 0770 bluetooth net_bt_stack

 

    #power up/down/ interface

    chmod 665 /sys/class/rfkill/rfkill0/state

    chmod 665 /sys/class/rfkill/rfkill0/type

    chown bluetooth net_bt_stack /sys/class/rfkill/rfkill0/state

    chown bluetooth net_bt_stack /sys/class/rfkill/rfkill0/type

    write /sys/class/rfkill/rfkill0/state 1

 

    # 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"

    

    # USB device

    insmod /system/lib/modules/rtk_btusb.ko

    chmod 0660 /dev/rtk_btusb

    chown bluetooth net_bt_stack /dev/rtk_btusb

    write /sys/class/rfkill/rfkill0/state 0    

 #end realtek configure

 

其它部分不需要修改。修改完成后回到源码的顶层目录,运行

./s6000_build.sh

命令,编译完成后下载boot.img和system.img,启动系统之后在系统主界面打开蓝牙就可以搜索到附件的蓝牙设备了,点击搜索到的蓝牙设备进行匹配即可。经过测试是匹配成功了的,并且可以接收到手机发送来的文件。到此BT就移植完成了,其它具体的一些协议等后续APP使用到在具体的测试。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值