This article describes how to port the Realek RTL8723A Linux Wifi driver in Linux 3.10.
Prerequisites
Hardware Platform: Atmel SAMA5
Software Platform: Linux 3.10 + Android 4.4
Wifi module: RTL8723AU (USB Interface)
Realtek RTL8723A Wi-Fi Software & Driver for Linux and Android
Rtl8723a_wifi_linux_v4.1.6_7336.201301__ccc02.zip
Directory structure
Liaops @ ubuntu-server:/media/android/liaops/temp/RTL8723A_WiFi_linux_v4.1.6_7336.20130426 $ tree-L 2
.
── Android_ref_codes_JB_4.1
│ ── Linux-3.0.42_STATION_INFO_ASSOC_REQ_IES.diff.
│ ── Realtek_wifi_SDK_for_android_JB_4.1_20130306.tar.gz
│ ── Realtek_Wi-Fi_SDK_for_Android_JB_4_1.pdf.
── Android_ref_codes_JB_4.2 // transplantation of Android JB 4.2 Realtek Wifi
│ ── Linux-3.0.42_STATION_INFO_ASSOC_REQ_IES.diff.
│ ── Realtek_wifi_SDK_for_android_JB_4.2_20130208.tar.gz
│ └─Realtek_wi-fi_sdk_for_android_jb_4_2.pdf // transplant the document
── Android_reference_codes
│ ── Realtek_wifi_SDK_for_android_20120618.tar.gz
│ ── Realtek_wifi_SDK_for_android.txt
── Android_reference_codes_ICS_nl80211
│ ── Realtek_wifi_SDK_for_android_ICS_20120621.tar.gz
│ ── Realtek_Wi-Fi_SDK_for_Android_ICS.pdf.
── Document
│ ── HowTo_enable_driver_to_support_80211d.pdf
│ ├─%Howto_enable_driver_to_support_wifi_certification_testication
│ ── Howto_enable_the_power_saving_functionality #
│ ── HowTo_support_more_VidPids.pdf
│ ── _Dhcp_server_notes.txt
│ ├ ── Quick_start_guide_for_bridge=
│ ├─Quick_start_guide_for_driver_compilation_and_installation.pdf
│ ├ ── Quick_Start_Guide_for_SoftAP.pdf
│ ├ ── Quick_Start_Guide_for_Station_Mode.pdf
│ ── Realtek_WiFi_concurrent_mode_Introduction.pdf .pdf
│ ── RTK_P2P_WFD_Programming_guide.pdf
│ ├ ── SoftAP_Mode_features.pdf
│ ── Wireless_tools_porting_guide.pdf
│ ── Wpa_cli_with_wpa_supplicant.pdf
── Driver
│ └─Rtl8723a_wifi_linux_v4.1.6_7336.201301__ccc02.tar.gz // Realek RTL8723A Linux Wifi driver
── Hardware_wps_pbc
│ ── Readme.txt
│ ── Sample. c
── Install. sh
── Mp_tools
│ ── RTL8723A_MPDoc
── Readme.txt
── ReleaseNotes.pdf
── WiFi_Direct_User_Interface
│ ── Android. mk
│ ── Install. sh
│ ── P2p_api_test_linux.c
│ ── P2p_test.h
│ ── P2p_ui_test_linux.c
│ ── Start_Guide_P2P_User_Interface_Linux.pdf .pdf
├ ── Wireless_tools
│ └─Wireless_tools.30.rtl.tar.gz // a tool for configuring wireless networks in Linux, including iwlist, iwpriv, and iwconfig.
── Wpa_supplicant_hostapd
── P2p_hostapd.conf
── Rtl_hostapd_2G.conf
── Rtl_hostapd_5G.conf
── Wpa_0_8.conf
├──Wpa_supplicant_8_jb_4.20.rtw_r7281.201302.16.tar.gz
├──Wpa_supplicant_8_jb_4.2_rtw_r7279.201302.16.tar.gz
└──Wpa_supplicant_hostapd-0.8_rtw_r7048.201302.16.tar.gz
Kernel configuration
Ensure Linux configuration before kernel Compilation
# Make menuconfig
Enable WLAN Network support:
[*] Networking support --->
-*-Wireless --->
Enable Wireless LAN Device Driver:
Device Drivers --->
[*] Network device support --->
[*] Wireless LAN --->
Enable RealTekRTL8712U wireless NIC Driver:
Device Drivers --->
[*] Staging drivers --->
RealTek RTL8712U (RTL8192SU) Wireless LAN NICdriver
The purpose is to enable CONFIG_WIRELESS_EXT = y and CONFIG_WEXT_PRIV = y
The preceding operations enable the following CONFIG options in the kernel:
CONFIG_WIRELESS = y
CONFIG_WLAN = y
CONFIG_WIRELESS_EXT = y
CONFIG_WEXT_CORE = y
CONFIG_WEXT_PROC = y
CONFIG_WEXT_PRIV = y
Enable USB Host Support:
Device Drivers --->
[*] USB support --->
<*> Support for Host-side USB
<*> Ehci hcd (USB 2.0) support
Compile the kernel
Compile the kernel according to the preceding Kernel configuration.
Wifi driver configuration and compilation
Decompress the driver source code: rtl8723a_wifi_linux_v4.1.6_7336.201301__ccc02.tar.gz
Go to the driver source code directory:
── Autoconf_rtl8723a_sdio_linux.h
── Autoconf_rtl8723a_usb_linux.h
── Clean
── Core
── Hal
── Ifcfg-wlan0
── Include
── Kconfig
── Kconfig_rtl8723a_sdio_linux
── Kconfig_rtl8723a_usb_linux
── Make_drv
── Makefile
── OS _dep
── Runwpa
── Wlan0dhcp
Modify Makefile and add AT91 platform support
@-44,7 + 44,7 @ CONFIG_EXT_CLK = n
CONFIG_FTP_PROTECT = n
CONFIG_WOWLAN = n
-Config_platform_i1__pc = y
+ Config_platform_i1__pc = n
CONFIG_PLATFORM_ANDROID_X86 = n
CONFIG_PLATFORM_ARM_S3C2K4 = n
CONFIG_PLATFORM_ARM_PXA2XX = n
@-75,6 + 75,7 @ CONFIG_PLATFORM_ARM_SUN6I = n
Config_platform_actions_atm 702x = n
CONFIG_PLATFORM_MN10300 = n
CONFIG_PLATFORM_ACTIONS_ATV5201 = n
+ CONFIG_PLATFORM_ARM_AT91 = y
CONFIG_DRVEXT_MODULE = n
@-651,6 + 652,14 @ KVER: =$ (KERNEL_VER)
KSRC: = $ (kernel DIR)/.../../kernel/linux-$ (KERNEL_VER)
Endif
+ Ifeq ($ (CONFIG_PLATFORM_ARM_AT91), y)
+ EXTRA_CFLAGS + =-DCONFIG_LITTLE_ENDIAN
+ ARCH: = arm
+ CROSS_COMPILE: =/usr/local/CodeSourcery/Sourcery_G ++ _ Lite/bin/arm-none-eabi-
+ KSRC: =/media/android/liaops/miura/kernel
+ MODULE_NAME: = wlan
+ Endif
+
Ifneq ($ (USER_MODULE_NAME ),)
MODULE_NAME: = $ (USER_MODULE_NAME)
Endif
Modify autoconf_rtl8723a_usb_linux.h to enable Stas + P2P coexistence mode:
@-50, 7 + 50, 7 @@
# DefineSUPPORT_HW_RFOFF_DETECTED
-// # Defineconfig_ioctl_201780211
+ # Defineconfig_ioctl_201780211
# IfdefCONFIG_PLATFORM_ARM_SUNxI
# Ifndef config_ioctl_201780211
# Define config_ioctl_201780211
@-59,7 + 59,7 @@
# Ifdefconfig_ioctl_201780211
// # Define rtw_use_201780211_sta_event/* Indecate new sta asoc through1_80211_new_sta */
-# Define config_201780211_force_compatible_2_6_37_under
+ // # Define config_201780211_force_compatible_2_6_37_under
// # Define config_debug_201780211
# Define CONFIG_SET_SCAN_DENY_TIMER
# Endif
@-86,7 + 86,7 @@
// # Define CONFIG_DBG_P2P
# Define CONFIG_P2P_PS
-// # Define CONFIG_P2P_IPS
+ # Define CONFIG_P2P_IPS
# Endif
// Added by Kurt20110511
@-102,7 + 102,7 @@
# DefineCONFIG_LAYER2_ROAMING
# DefineCONFIG_LAYER2_ROAMING_RESUME
-// # DefineCONFIG_CONCURRENT_MODE
+ # DefineCONFIG_CONCURRENT_MODE
# IfdefCONFIG_CONCURRENT_MODE
# Define CONFIG_TSF_RESET_OFFLOAD // For 2 port tsf sync.
// # Define CONFIG_HWPORT_SWAP // Port0-> Sec, Port1-> Pri
Compilation driver
Make KSRC = <内核源代码码路径>
The Wifi driver module is obtained in the current directory: wlan. ko
Compile Android source code
Compile wireless_tools wireless network management tool
Decompress wireless_tools.30.rtl.tar.gz to the Android source code external/directory.
(1) tar zxvf wireless_tools.30.rtl.tar.gz
(2) cp wireless_tools.30.rtl/external/
(3) cd
(4) make iwconfig iwlist iwpriv
Install the Wifi Driver Module
Copy wlan. ko to the out/target/product/sama5d3/system/lib/modules directory of the Android file system.
ProductionAndroidRoot file system and download to Development Board
Test
USB Wifi module inserted after startup
Usb 1-2: newhigh-speed USB device number 2 using atmel-ehci
Usb 1-2: NewUSB device found, idVendor = 0133, idProduct = 0724
Usb 1-2: NewUSB device strings: Mfr = 1, Product = 2, SerialNumber = 3
Usb 1-2: Product: 802.11n WLAN Adapter
Usb 1-2: Manufacturer: Realtek
Usb 1-2: SerialNumber: 00e04c000001
Before loading a module
Root @ sama5d3:/# netcfg
Eth0 UP 0.0.0.0/0 0x0000000033a: 1f: 34: 08: 54: 54
Can0 DOWN 0.0.0.0/0 0x0000008000: 00: 00: 00: 00: 00
Sit0 DOWN 0.0.0.0/0 0x0000008000: 00: 00: 00: 00: 00
Lo UP 127.0.0.1/8 0x0000004900: 00: 00: 00: 00: 00
Load Module
Root @ sama5d3:/# insmod/system/lib/modules/wlan. ko
Usbcore: registered new interface driver rtl8723au
After the module is loaded
Root @ sama5d3:/# netcfg
Wlan0 DOWN 0.0.0.0/0 0x00001002 00: 02: 72: 3c: 0c: c1
Wlan1 DOWN 0.0.0.0/0 0x00001002 02: 02: 72: 3c: 0c: c1
Eth0 UP 0.0.0.0/0 0 0x00001043 3a: 1f: 34: 08: 54: 54
Can0 DOWN 0.0.0.0/0 0 0x00000080 00: 00: 00: 00: 00: 00
Sit0 DOWN 0.0.0.0/0 0 0x00000080 00: 00: 00: 00: 00: 00
Lo UP 127.0.0.1/8 0x00000049 00: 00: 00: 00: 00: 00
We can see two more interfaces: wlan0 and wlan1.
Open wlan0
Root @ sama5d3:/# netcfg wlan0 up
IPv6: ADDRCONF (NETDEV_UP): wlan0: link is not ready
RTL871X: nolinked power save enter
Run the command iwlist wlan0 scanning to search for available wireless APs.
Some results are as follows:
Root @ sama5d3:/# iwlist wlan0 scanning
RTL871X: nolinked power save leave
Wlan0Scan completed:
Cell 01-Address: D8: 15: 0D: D9: 1F: F0
ESSID: "Intest_Hardware"
Protocol: IEEE 802.11bgn
Mode: Master
Frequency: 2.412 GHz (Channel 1)
Encryption key: on
Bit Rates: 300 Mb/s
Extra: wpa_ie = dd160050f201010950f204010950f204010950f202
IE: WPA Version 1
Group Cipher: CCMP
Pairwise Ciphers (1): CCMP
Authentication Suites (1): PSK
Extra: rsn_ie = 30140100000fac040100000fac040100000fac020000
IE: IEEE 802.11i/WPA2 Version 1
Group Cipher: CCMP
Pairwise Ciphers (1): CCMP
Authentication Suites (1): PSK
IE: Unknown: dd180050f204254a00011010440001021049000600372a000120
Quality = 0/100 Signal level =-74 dBm
Cell 02-Address: A8: 57: 4E: FC: 4B: 3E
ESSID: "\ xBE \ xDE \ xC3 \ xC0 \ xB9 \ xFA \ xBC \ xCA"
Protocol: IEEE 802.11bgn
Mode: Master
Frequency: 2.437 GHz (Channel 6)
Encryption key: on
Bit Rates: 300 Mb/s
Extra: wpa_ie = dd160050f201010950f204010950f204010950f202
IE: WPA Version 1
Group Cipher: CCMP
Pairwise Ciphers (1): CCMP
Authentication Suites (1): PSK
Extra: rsn_ie = 30140100000fac040100000fac040100000fac020000
IE: IEEE 802.11i/WPA2 Version 1
Group Cipher: CCMP
Pairwise Ciphers (1): CCMP
Authentication Suites (1): PSK
IE: Unknown
Quality = 0/100 Signal level =-71 dBm
Cell 03-Address: 1C: BD: B9: C7: 84: 98
ESSID: "hikvision"
Protocol: IEEE 802.11bgn
Mode: Master