1. 程式人生 > >明遠智睿IMX6Q Android4.4.2移植USBWIFI(RTL8188EUS)

明遠智睿IMX6Q Android4.4.2移植USBWIFI(RTL8188EUS)

移植過程中得到網友的不少幫助,很感謝!為了讓更多的網友不像我這樣折騰,特寫此文以做參照.過程中主要參考< Realtek_Wi-Fi_SDK_for_Android_KK_4_4.pdf >和< Quick_Start_Guide_for_Driver_Compilation_and_Installation.pdf>這兩個文件,以及論壇https://community.freescale.com/thread/322825 這篇文章,具體步驟如下:

一.核心修改

1.替換realtek資料夾

”realtek_wifi_SDK_for_android_KK_4.4_20140117.tar.gz” 解壓,然後將ANDROID_SDK /hardware/realtek覆蓋到原始碼kernel_imx/hardwar中.

2. BoardConfig.mk

在ANDROID_SDK /device/ fsl/sabresd_6dq/ BoardConfig.mk中,追加如下內容:

BOARD_WIFI_VENDOR := realtek

BOARD_WLAN_VENDOR := REALTEK

ifeq ($(BOARD_WIFI_VENDOR),realtek)

WPA_SUPPLICANT_VERSION :=VER_0_8_X

BOARD_WPA_SUPPLICANT_DRIVER :=NL80211

#CONFIG_DRIVER_WEXT :=y

CONFIG_DRIVER_NL80211 :=true

BOARD_WPA_SUPPLICANT_PRIVATE_LIB:= lib_driver_cmd_rtl

BOARD_HOSTAPD_DRIVER := NL80211

BOARD_HOSTAPD_PRIVATE_LIB :=lib_driver_cmd_rtl

BOARD_WLAN_DEVICE := rtl8192cu

#BOARD_WLAN_DEVICE := rtl8192du

#BOARD_WLAN_DEVICE := rtl8192ce

#BOARD_WLAN_DEVICE := rtl8192de

#BOARD_WLAN_DEVICE := rtl8723as

#BOARD_WLAN_DEVICE := rtl8723au

#BOARD_WLAN_DEVICE := rtl8189es

#BOARD_WLAN_DEVICE := rtl8723bs

#BOARD_WLAN_DEVICE := rtl8723bu

WIFI_DRIVER_MODULE_NAME :="wlan"

WIFI_DRIVER_MODULE_PATH := "/system/lib/modules/wlan.ko"

WIFI_DRIVER_MODULE_ARG :="ifname=wlan0 if2name=p2p0"

WIFI_FIRMWARE_LOADER :=""

WIFI_DRIVER_FW_PATH_STA :=""

WIFI_DRIVER_FW_PATH_AP :=""

WIFI_DRIVER_FW_PATH_P2P :=""

WIFI_DRIVER_FW_PATH_PARAM :=""

Endif

3. init.rc

在ANDROID_SDK /device/ fsl/sabresd_6dq/init.rc中

A.    替換如下wpa_supplican服務

 service rtw_suppl_con /system/bin/wpa_supplicant \

-ip2p0 -Dnl80211-c/data/misc/wifi/p2p_supplicant.conf \

-e/data/misc/wifi/entropy.bin -N\

-iwlan0 -Dnl80211-c/data/misc/wifi/wpa_supplicant.conf \

-O/data/misc/wifi/sockets \

[email protected]:wpa_wlan0

class main

socket wpa_wlan0 dgram 660 wifiwifi

disabled

oneshot

service rtw_suppl/system/bin/wpa_supplicant \

-iwlan0 -Dnl80211-c/data/misc/wifi/wpa_supplicant.conf \

-O/data/misc/wifi/sockets \

-e/data/misc/wifi/entropy.bin

[email protected]:wpa_wlan0

class main

socket wpa_wlan0 dgram 660 wifiwifi

disabled

oneshot

B.    追加DHCPCD服務

 service dhcpcd_wlan0 /system/bin/dhcpcd -aABDKL

class main

disabled

oneshot

service dhcpcd_p2p/system/bin/dhcpcd -aABKL

class main

disabled

oneshot

service iprenew_wlan0/system/bin/dhcpcd -n

class main

disabled

oneshot

service iprenew_p2p/system/bin/dhcpcd -n

class main

disabled

oneshot

4. libhardware_legacy

在檔案ANDROID_SDK/hardware/libhardware_legacy/wifi/Android.mk 中變更如下語句

ifeq ($(BOARD_WIFI_VENDOR),realtek)

LOCAL_SRC_FILES +=../realtek/wlan/libhardware_legacy/wifi/wifi_realtek.c

else

LOCAL_SRC_FILES += wifi/wifi.c

Endif

5. wpa_supplicant_8

將ANDROID_SDK/external/下wpa_supplicant_8備份一下,然後將驅動包裡的wpa_supplicant_8_kk_4.4_rtw名稱改為wpa_supplicant_8並替換到ANDROID_SDK/external/

6.imx6_android_defconfig

修改檔案kernel_imx/arch/arm/configs/imx6_android_defconfig,將下列專案配置成Y.

CONFIG_CFG80211=y

CONFIG_MAC80211_MESH=y

CONFIG_MAC80211=y

CONFIG_HOSTAP=y

CONFIG_RTL8192CU=y

CONFIG_USB_USBNET=y

7.許可權

out/target/product/sabresd_6dq/root/init.rc中,追加內容如下:

mkdir /system/etc/wifi 0770 wifi wifi

chmod 0770 /system/etc/wifi

chmod 0660 /system/etc/wifi/wpa_supplicant.conf

chown wifi wifi /system/etc/wifi/wpa_supplicant.conf

#wpa_supplicant control socket for android wifi.c (android privatesocket)

mkdir /data/misc/wifi 0770 wifi wifi

mkdir /data/misc/wifi/sockets 0770 wifi wifi

chmod 0770 /data/misc/wifi

chmod 0660 /data/misc/wifi/wpa_supplicant.conf

chown wifi wifi /data/misc/wifi

chown wifi wifi /data/misc/wifi/wpa_supplicant.conf

setprop wifi.interface wlan0

setprop wlan.driver.status"ok"

8資料夾刪除

out/target/product/sabresd_6dq下的system資料夾以及out/target/product/sabresd_6d/obj/EXECUTABLESwpa_supplicant_intermediates資料夾刪除.

完成以上後,編譯核心.

二.驅動編譯

1.新驅動包4.3.0.9沒有make_drv和autoconf_rtl8188e_usb_linux.h,需要從其他的驅動包中拷過來.

2.增加新的平臺

 CONFIG_PLATFORM_I386_PC = n

CONFIG_PLATFORM_NEW = y

……

ifeq($(CONFIG_PLATFORM_NEW), y)

EXTRA_CFLAGS +=-DCONFIG_LITTLE_ENDIAN

ARCH := arm

CROSS_COMPILE :=/opt/ new/toolchain/arm-eabi-4.4.3/bin/arm-eabi-

KSRC := /opt/new/kernel

MODULE_NAME := wlan

Endif

3. include/autoconf.h和autoconf_rtl8188e_usb_linux.h修改

#define CONFIG_IOCTL_CFG80211

#ifdef CONFIG_IOCTL_CFG80211

#define RTW_USE_CFG80211_STA_EVENT

//#defineCONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER

//#define CONFIG_DEBUG_CFG80211 1

#endif

#define CONFIG_CONCURRENT_MODE

#define CONFIG_P2P_IPS

4.將編譯完成核心,將kernel_imx目錄下Module.symvers檔案到驅動的根目錄覆蓋之前的檔案.

5.編譯

 A. make_drv

[email protected]_8192C_8192D_usb_linux_v3.3.0_2920.20111123#./make_drv

Please select chip type(1/2):

1) RTL8192cu

2) RTL8192du

#? 1

You have selected RTL8192cu

B.      在驅動根目錄下,執行make,然後在目錄下產生wlan.ko檔案

三.            驅動安裝與再編譯

1.將產生的wlan.ko檔案,複製到out/target/product/sabresd_6dq/system/lib/modules資料夾中。(沒有modules資料夾,自己新建)

2.使用make snod命令重新制作system.img

注意事項:

注意要先編譯安卓,再去編譯8188eus的驅動