1. 程式人生 > >RTL8723BU在I.MX6 DQ平臺上的移植

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 (2)修改/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_IPS2.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=m2.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/下面.2)修改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 \ 3)修改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 ------->新增這行4)修改device/fsl/imx6/etc/ueventd.freescale.rc,新增    /dev/rtk_btusb             0660  bluetooth  net_bt_stack5)修改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使用到在具體的測試。