在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_S3C6K4), 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通:

在arm Cortex-A9开发板移植rtl8821au无线网卡并实现与外网通信_第1张图片

你可能感兴趣的:(zynq)