1. 程式人生 > >在arm Cortex-A9開發板移植rtl8821au無線網絡卡並實現與外網通訊

在arm Cortex-A9開發板移植rtl8821au無線網絡卡並實現與外網通訊

開發板:Xilinx ZC702

嵌入式系統:linux4.4

交叉編譯器:arm-xilinx-linux-gnueabi-gcc

WIFi工具:wireless_tools.30.rtl

驅動版本:rtl8821AU_WiFi_linux_v5.2.6.2_23547.20170814_COEX20170206-6760

本文中所用的rtl8821au無線網絡卡實為藍芽無線網絡卡二合一裝置,此處只當做無線網絡卡使用。移植所使用的工具為iwlist、iwconfig等,這是以前WiFi模組中使用的舊工具,現在已經推出了新的基於nl80211的用於無線裝置的CLI配置實用程式iw,建議以後的WiFi移植使用iw和nl80211以替換iwlist和iwconfig。

rtl8821au無線網絡卡的移植包括驅動移植和工具移植兩部分,下面分別介紹

(一)驅動移植

1、修改原始碼根目錄下的Makefile:

CONFIG_PLATFORM_I386_PC = n  
CONFIG_PLATFORM_ANDROID_X86 = n  
CONFIG_PLATFORM_ARM_S3C2K4 = n  
CONFIG_PLATFORM_ARM_PXA2XX = n  
CONFIG_PLATFORM_ARM_S3C6K4 = y  
CONFIG_PLATFORM_I386_PC改為n, 將CONFIG_PLATFORM_ARM_S3C6K4改為y。

2、之後找到ifeq ($(CONFIG_PLATFORM_ARM_S

3C6K4), y)這行程式碼,修改S3C6K4編譯環境:

ifeq ($(CONFIG_PLATFORM_ARM_S3C6K4), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
ARCH := arm
CROSS_COMPILE := arm-xilinx-linux-gnueabi-
KVER  := 4.4.0
KSRC ?= /xilinx/wifi/linux-xcomm_zynq
endif
此處的KSRC是你嵌入式平臺所用Linux系統的原始碼路徑。KVER為嵌入式Linux版本。CROSS_COMPILE為交叉編譯鏈。

3、這些工作完成之後直接在當前目錄make,沒有錯誤的話會得的8821au.ko檔案。將檔案拷貝到開發板,啟動後,insmod 8821au.ko命令載入。

此時可以cat /proc/net/wireless檔案檢視是否有wlan0資訊,如下所示,如果能看到wlan0則說明驅動安裝成功。

Inter-| sta-|   Quality        |   Discarded packets               | Missed | WE  
 face | tus | link level noise |  nwid  crypt   frag  retry   misc | beacon | 22  
 wlan0: 0000    0.    0.    0.       0      0      0      0      0        0      


(二)工具移植

1、進入wireless_tools.30.rtl,修改Makefile,如下所示:


2、make,之後將生成iwlist、iwconfig、iwpriv等工具以及iwlib.so,將iwlist、iwconfig等工具拷貝到目標板/usr/bin目錄,將iwlib.so庫拷貝到目標板/lib或/usr/lib庫。

(三)工具使用方法

1、分配IP: ifconfig wlan0 192.168.43.19

2、啟動無線網絡卡: ifconfig wlan0 up

3、掃描附近WiFi熱點: iwlist wlan0 scan

4、連線WiFi: iwconfig wlan0 essid "zj"

這是無密碼WiFi的連線命令,這裡連線了一個熱點名為zj的WiFi,如果前面步驟沒有問題到這一步應該就可以連線成功。

但如果只做到這一步的話,在使用時就會發現板子WiFi只可以連線外部熱點,卻無法ping通百度,無論怎麼設定閘道器和IP都無濟於事。這時需要移植udhcpc工具以實現動態分配IP(參考http://www.yixiangzhan.com/detail/zJBnkAEJ.html)。

(四)移植udhcpc

(1)將busybox目錄下的examples/udhcp/下的simple.script檔案重新命名為default.script,並將檔案拷貝到開發板/usr/share/udhcpc下,修改許可權。

(2)執行動態分配IP地址: udhcpc -i wlan0

執行這步之後系統會自動分配IP地址,這時再ping百度即可ping通: