Linux WIFI 驱动实验

目录

  • WIFI 驱动添加与编译
    • 向Linux 内核添加WIFI 驱动
    • 配置Linux 内核
    • 编译WIFI 驱动
    • 驱动加载测试
  • wireless tools 工具移植与测试
    • wireless tools 移植
    • wireless tools 工具测试
  • wpa_supplicant 移植
    • openssl 移植
    • libnl 库移植
    • wpa_supplicant 移植
  • WIFI 联网测试
    • RTL8188 USB WIFI 联网测试
    • RTL8189 SDIO WIFI 联网测试

WIFI 的使用已经很常见了,手机、平板、汽车等等,虽然可以使用有线网络,但是有时候
很多设备存在布线困难的情况,此时WIFI 就是一个不错的选择。正点原子I.MX6U-ALPHA 开
发板支持USB 和SDIO 这两种接口的WIFI,本章我们就来学习一下如何在I.MX6U-ALPHA 开
发板上使用USB 和SDIO 这两种WIFI。

WIFI 驱动添加与编译

正点原子的I.MX6U-ALPHA 开发板目前支持两种接口的WIFI:USB 和SDIO,其中USB WIFI 使用的芯片为RTL8188EUS 或RTL8188CUS,SDIO 接口的WIFI 使用芯片为RTL8189FS,
也叫做RTL8189FTV。这两个都是realtek 公司出品的WIFI 芯片。WIFI 驱动不需要我们编写,
因为realtek 公司提供了WIFI 驱动源码,因此我们只需要将WIFI 驱动源码添加到Linux 内核
中,然后通过图形化界面配置,选择将其编译成模块即可。
正点原子I.MX6U-ALPHA开发板默认会赠送一个RTL8188EUS/CUS USB WIFI,如图70.1.1
所示:
Linux WIFI 驱动实验_第1张图片
另外,正点原子还有一款采用RTL8189FTV 芯片的SDIO WIFI,如图70.1.2 所示:
Linux WIFI 驱动实验_第2张图片

向Linux 内核添加WIFI 驱动

1、rtl81xx 驱动文件浏览
WIFI 驱动源码已经放到了开发板光盘中,路径为:1、例程源码->5、模块驱动源码->1、
RTL8XXX WIFI 驱动源码-> realtek。realtek 目录下就存放着RTL8188EUS 和RTL8189FS 这两
个芯片的驱动源码,如图70.1.1.1 所示:
Linux WIFI 驱动实验_第3张图片

其中rtl8188EUS 下存放着RTL8188EUS 驱动,RTL8189FS 存放着RTL8189FS/FTV 的驱动
文件,rtl8192CU 下存放着RTL8188CUS 和RTL8192CU 的驱动,注意!正点原子ALPHA 开发
板赠送的USB WIFI 模块分为RTL8188EUS 和RTL8188CUS 两种,这两种USB WIFI 驱动是不一样的!Kconfig 文件是WIFI 驱动的配置界面文档,这样可以通过Linux 内核图形化配置界面
来选择是否编译WIFI 驱动,Kconfig 文件内容如下所示:

示例代码70.1.1.1 Kconfig 文件内容
1 menuconfig REALTEK_WIFI
2 tristate "Realtek wifi"
3
4 if REALTEK_WIFI
5
6 choice
7 prompt "select wifi type"
8 default RTL8189FS
9
10 config RTL8189FS
11 depends on REALTEK_WIFI
12 tristate "rtl8189fs/ftv sdio wifi"
13
14 config RTL8188EUS
15 depends on REALTEK_WIFI
16 tristate "rtl8188eus usb wifi"
17
18 config RTL8192CU
19 depends on REALTEK_WIFI
20 tristate "Realtek 8192C USB WiFi"
21
22 endchoice
23 endif

Makefile 文件内容如下所示

示例代码70.1.1.2 Makefile 文件内容
1 obj-$(CONFIG_RTL8188EUS) += rtl8188EUS/
2 obj-$(CONFIG_RTL8189FS) += rtl8189FS/
3 obj-$(CONFIG_RTL8192CU) += rtl8192CU/

2、删除linux 内核自带的RTL8192CU 驱动
本教程所使用的linux 内核已经自带了RTL8192CU/8188CUS 驱动,但是经过测试,linux
内核自带的驱动不稳定!因此不建议大家使用。最好使用图70.1.1.1 中我们提供的rtl8192CU 驱
动。在编译之前要先将内核自带的驱动屏蔽掉,否则可能导致编译出错,方法很简单。打开
drivers/net/wireless/rtlwifi/Kconfig,找到下面所示内容然后删除掉:

示例代码70.1.1.3 drivers/net/wireless/rtlwifi/Kconfig 文件内容
1 config RTL8192CU
2 tristate "Realtek RTL8192CU/RTL8188CU USB Wireless Network Adapter"
3 depends on USB
4 select RTLWIFI
5 select RTLWIFI_USB
6 select RTL8192C_COMMON
7 ---help---
8 This is the driver for Realtek RTL8192CU/RTL8188CU 802.11n USB
9 wireless network adapters.
10
11 If you choose to build it as a module, it will be called rtl8192cu

将示例代码70.1.1.2 中的1~11 行内容从drivers/net/wireless/rtlwifi/Kconfig 中删除掉。
继续打开drivers/net/wireless/rtlwifi/Makefile,找到下面这样:

示例代码70.1.1.4 drivers/net/wireless/rtlwifi/Makefile 文件内容
1 obj-$(CONFIG_RTL8192CU) += rtl8192cu/

将示例代码70.1.1.3 中这一行从drivers/net/wireless/rtlwifi/Makefile 中屏蔽掉,至此,linux
内核自带的RTL8192CU/8188CU 驱动就屏蔽掉了。
3、将rtl81xx 驱动添加到Linux 内核中
将realtek 整个目录拷贝到ubuntu 下Linux 内核源码中的drivers/net/wireless 目录下,此目
录下存放着所有WIFI 驱动文件。拷贝完成以后此目录如图70.1.1.1 所示:
Linux WIFI 驱动实验_第4张图片
图70.1.1.1 中框选出来的就是我们刚刚拷贝进来的realtek 目录。
4、修改drivers/net/wireless/Kconfig
打开drivers/net/wireless/Kconfig,在里面加入下面这一行内容:

source "drivers/net/wireless/realtek/Kconfig"

添加完以后的Kconfig 文件内容如下所示:

示例代码70.1.1.5 drivers/net/wireless/Kconfig 文件内容
1 #
2 # Wireless LAN device configuration
3 #
4
5 menuconfig WLAN
......
286 source "drivers/net/wireless/rsi/Kconfig"
287 source "drivers/net/wireless/realtek/Kconfig"
286
289 endif # WLAN

第287 行就是添加到drivers/net/wireless/Kconfig 中的内容,这样WIFI 驱动的配置界面才
会出现在Linux 内核配置界面上。

5、修改drivers/net/wireless/Makefile
打开drivers/net/wireless/Makefile,在里面加入下面一行内容:

obj-y += realtek/

修改完以后的Makefile 文件内容如下所示:

示例代码70.1.1.6 drivers/net/wireless/Makefile 文件内容
1 #
2 # Makefile for the Linux Wireless network device drivers.
3 #
4
5 obj-$(CONFIG_IPW2100) += ipw2x00/
......
62 obj-$(CONFIG_CW1200) += cw1200/
63 obj-$(CONFIG_RSI_91X) += rsi/
64
65 obj-y += realtek/

第65 行,编译realtek 中的内容,至此,Linux 内核要修改的内容就全部完成了。

配置Linux 内核

在编译RTL8188 和RTL8189 驱动之前需要先配置Linux 内核。
1、配置USB 支持设备
配置路径如下:

-> Device Drivers
	-> <*> USB support
		-> <*> Support for Host-side USB
		-> <*> EHCI HCD (USB 2.0) support
		-> <*> OHCI HCD (USB 1.1) support
		-> <*> ChipIdea Highspeed Dual Role Controller
			-> [*] ChipIdea device controller
			-> [*] ChipIdea host controller

2、配置支持WIFI 设备
配置路径如下:

-> Device Drivers
	-> [*] Network device support
		-> [*] Wireless LAN
			-> <*> IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP)
				-> [*] Support downloading firmware images with Host AP driver
				-> [*] Support for non-volatile firmware download

配置完如图70.1.2.1 所示:
Linux WIFI 驱动实验_第5张图片
3、配置支持IEEE 802.11
配置路径如下:

-> Networking support
	-> -*- Wireless
		-> [*] cfg80211 wireless extensions compatibility
		-> <*> Generic IEEE 802.11 Networking Stack (mac80211)

配置完如图70.1.2.2 所示:
Linux WIFI 驱动实验_第6张图片
配置好以后重新编译一下Linux 内核,得到新的zImage,后面使用新编译出来的zImage 启
动系统。

编译WIFI 驱动

执行“make menuconfig”命令,打开Linux 内核配置界面,然后按照如下路径选择将rtl81xx
驱动编译为模块:

-> Device Drivers
	-> Network device support (NETDEVICES [=y])
		-> Wireless LAN (WLAN [=y])
			-> Realtek wifi (REALTEK_WIFI [=m])
				-> rtl8189ftv sdio wifi
					-> rtl8188eus usb wifi
					-> Realtek 8192C USB WiFi

配置结果如图70.1.3.1 所示:
Linux WIFI 驱动实验_第7张图片
图70.1.3.1 中的配置界面就是我们添加进去的WIFI 配置界面,选中“rtl8189fs/ftv sdio wifi”、
“rtl8188eus usb wifi”和“Realtek 8192C USB WiFi”,将其编译为模块。执行如下命令编译模
块:

make modules -j12 //编译驱动模块

编译完成以后就会在rtl8188EUS、rtl8189FS 和rtl8192CU 文件夹下分别生成8188eu.ko、
8189fs.ko 和8192cu.ko 这三个.ko 文件,结果如图70.1.3.2 所示:
Linux WIFI 驱动实验_第8张图片
图70.1.3.2 中的8188eu.ko、8189fs.ko 和8192cu.ko 就是我们需要的RTL8188EUS、
RTL8189FS 和RTL8188CUS/8192CU 的驱动模块文件,将这三个文件拷贝到

rootfs/lib/modules/4.1.15 目录中,命令如下:

sudo cp 8189fs.ko /home/zuozhongkai/linux/nfs/rootfs/lib/modules/4.1.15/ -rf
sudo cp 8188eu.ko /home/zuozhongkai/linux/nfs/rootfs/lib/modules/4.1.15/ -rf
sudo cp 8192cu.ko /home/zuozhongkai/linux/nfs/rootfs/lib/modules/4.1.15/ -rf

因为我们重新配置过Linux 内核,因此也需要使用新的zImage 启动,将新编译出来的zImage
镜像文件拷贝到Ubuntu 中的tftpboot 目录下,命令如下:

cp arch/arm/boot/zImage /home/zuozhongkai/linux/tftpboot/ -f

然后重启开发板!!!

驱动加载测试

1、RTL8188 USB WIFI 驱动测试
重启以后我们试着加载一下8188eu.ko、8189fs.ko 和8192cu.ko 这三个驱动文件,首先测试
一下RTL8188 的驱动文件,将RTL8188 WIFI 模块插到开发板的USB HOST 接口上。进入到目
录lib/modules/4.1.15 中,输入如下命令加载8188eu.ko 这个驱动模块:

depmod //第一次加载驱动的时候需要运行此命令
modprobe 8188eu.ko //RTL8188EUS 模块加载8188eu.ko 模块
modprobe 8192cu.ko //RTL8188CUS 模块加载8192cu.ko 模块

如果驱动加载成功的话如图70.1.4.1 所示:
Linux WIFI 驱动实验_第9张图片

输入“ifconfig -a”命令,查看wlanX(X=0….n)网卡是否存在,一般都是wlan0,除非板子
上有多个WIFI 模块在工作,结果如图70.1.4.2 所示:
Linux WIFI 驱动实验_第10张图片
从图70.1.4.2 中可以看出,当前开发板有一个叫做“wlan0”的网卡,这个就是RTL8188 对
应的网卡。
2、RTL8189 SDIO WIFI 驱动测试
测试完RTL8188 以后,再来测试一下RTL8189 这个SDIO WIFI,因为I.MX6U-ALPHA 开
发板的SDIO WIFI 接口与SD 卡公用一个SDIO 接口。因此SD 卡和SDIO WIFI 只能二选其一,
一次只能一个工作,所以测试RTL8189 SDIO WIFI 的时候需要拔插SD 卡。SDIO WIFI 接口原
理图如图70.1.4.3 所示:
Linux WIFI 驱动实验_第11张图片
测试开始之前要先将SD 卡拔出,然后将RTL8189 SDIO WIFI 模块插入到SDIO WIFI 座子
上,如图70.1.4.4 所示:
Linux WIFI 驱动实验_第12张图片
SDIO WIFI 与开发板连接好以后就可以测试了,输入如下命令加载8189fs.ko 这个驱动模
块:

depmod //第一次加载驱动的时候需要运行此命令
modprobe 8189eu.ko //加载驱动模块

如果驱动加载成功的话如图70.1.4.5 所示:
Linux WIFI 驱动实验_第13张图片
从70.1.4.5 可以看出,RTL8189 SDIO WIFI 驱动加载成功,同样使用“ifconfig -a”命令查
看一下是否有wlanX(X=0…n)网卡存在,如果有的话就说明RTL8189 SDIO WIFI 驱动工作正常。
不管是RTL8188 USB WIFI 还是RTL8189 SDIO WIFI,驱动测试都工作正常,但是我们得
能联网啊,不能联网的话要他有什么用呢?WIFI 要想联网,需要移植一些其他第三方组件,否
则无法连接路由器,接下来我们就移植这些第三方组件。

wireless tools 工具移植与测试

wireless tools 移植

wireless tools 是操作WIFI 的工具集合,包括一下工具:
①、iwconfig:设置无线网络相关参数。
②、iwlist:扫描当前无线网络信息,获取WIFI 热点。
③、iwspy:获取每个节点链接的质量。
④、iwpriv:操作WirelessExtensions 特定驱动。
⑤、ifrename:基于各种静态标准命名接口。
我们最常用的就是iwlist 和iwconfig 这两个工具,首先获取到相应的源码包,这里我们已
经放到了开发板光盘中,路径为:1、例程源码-》7、第三方库源码-》iwlist_for_visteon-master.tar.bz2。
将iwlist_for_visteon-master.tar.bz2 拷贝到Ubuntu 中前面创建的tool 目录下,拷贝完成以后将其
解压,生成iwlist_for_visteon-master 文件夹。进入到iwlist_for_visteon-master 文件夹里面,打开
Makefile 文件,修改Makefile 中的CC、AR 和RANLIB 这三个变量,修改后的值如图70.2.1.1
所示:
Linux WIFI 驱动实验_第14张图片
图70.2.1.1 中CC、AR 和RANLIB 这三个变量为所使用的编译器工具,将其改为我们所使
用的arm-linux-gnueabihf-xxx 工具即可。修改完成以后就可以使用如下命令编译:

make clean //先清理一下工程
make //编译

编译完成以后就会在当前目录下生成iwlist、iwconfig、iwspy、iwpriv、ifrename 这5 个工
具,另外还有很重要的libiw.so.29 这个库文件。将这5 个工具拷贝到开发板根文件系统下的
/usr/bin 目录中,将libiw.so.29 这个库文件拷贝到开发板根文件系统下的/usr/lib 目录中,命令如
下:

sudo cp iwlist iwconfig iwspy iwpriv ifrename /home/zuozhongkai/linux/nfs/rootfs/usr/bin/ -f
sudo cp libiw.so.29 /home/zuozhongkai/linux/nfs/rootfs/usr/lib/ -f

拷贝完成以后可以测试iwlist 是否工作正常。

wireless tools 工具测试

这里我们主要测试一下iwlist 工具,要测试iwlist 工具,先测试一下iwlist 工具能不能工作,
输入iwlist 命令,如果输出图70.2.2.1 所示信息就表明iwlist 工具工作正常。
Linux WIFI 驱动实验_第15张图片
正式测试iwlist 之前得先让WIFI 模块工作起来。RTL8188 或RTL8189 都可以,以RTL8188 USB WIFI 为例,先将RTL8188 WIFI 模块插到开发板的USB HOST 接口上,然后加载RTL8188
驱动模块8188eu.ko,驱动加载成功以后在打开wlan0 网卡,命令如下:

modprobe 8188eu.ko //加载RTL8188 驱动模块
ifconfig wlan0 up //打开wlan0 网卡

wlan0 网卡打开以后就可以使用iwlist 命令查找当前环境下的WIFI 热点信息,也就是无线
路由器,输入如下命令:

iwlist wlan0 scan

上述命令就会搜索当前环境下的所有WIFI 热点,然后将这些热点的信息信息答应出来,
包括MAC 地址、ESSID(WIFI 名字)、频率、速率,信号质量等等,如图70.2.2.2 所示:
Linux WIFI 驱动实验_第16张图片
在扫描到的所有热点信息中找到自己要连接的WIFI 热点,比如我要连接到“ZZK”这个热
点上,这个WIFI 热点信息如图70.2.2.3 所示:
Linux WIFI 驱动实验_第17张图片
可以看出,“ZZK”这个热点信息已经被扫描到了,因此可以连接。要想连接到指定的WIFI
热点上就需要用到wpa_supplicant 工具,所以接下来就是移植此工具。

wpa_supplicant 移植

openssl 移植

wpa_supplicant 依赖于openssl,因此需要先移植openssl,openssl 源码已经放到了开发板光
盘中,路径为:1、例程源码-》7、第三方库源码-》openssl-1.1.1d.tar.gz。将openssl 源码压缩包
拷贝到Ubuntu 中前面创建的tool 目录下,然后使用如下命令将其解压:

tar -vxzf openssl-1.1.1d.tar.gz

解压完成以后就会生成一个名为openssl-1.1.1d 的目录,然后在新建一个名为“openssl”的
文件夹,用于存放openssl 的编译结果。进入到解压出来的openssl-1.1.1d 目录中,然后执行如
下命令进行配置:

./Configure linux-armv4 shared no-asm --prefix=/home/zuozhongkai/linux/IMX6ULL/tool/openssl CROSS_COMPILE=arm-linux-gnueabihf-

上述配置中“linux-armv4”表示32 位ARM 凭条,并没有“linux-armv7”这个选项。
CROSS_COMPILE 用于指定交叉编译器。配置成功以后会生成Makefile,输入如下命令进行编
译:

make
make install

编译安装完成以后的openssl 目录内容如图70.3.1.1 所示:
在这里插入图片描述
将图70.3.1.1 中的lib 目录是我们需要的,将lib 目录下的libcrypto 和libssl 库拷贝到开发
板根文件系统中的/usr/lib 目录下,命令如下:

sudo cp libcrypto.so* /home/zuozhongkai/linux/nfs/rootfs/lib/ -af
sudo cp libssl.so* /home/zuozhongkai/linux/nfs/rootfs/lib/ -af

libnl 库移植

在编译libnl 之前先安装biosn 和flex,命令如下:

sudo apt-get install bison
sudo apt-get install flex

wpa_supplicant 也依赖于libnl,因此还需要移植一下libnl 库,libnl 源码已经放到了开发板
光盘中,路径为:1、例程源码-》7、第三方库源码-》libnl-3.2.23.tar.gz。将libnl 源码压缩包拷
贝到Ubuntu 中前面创建的tool 目录下,然后使用如下命令将其解压:

tar -vxzf libnl-3.2.23.tar.gz

得到解压完成以后会得到libnl-3.2.23 文件夹,然后在新建一个名为“libnl”的文件夹,用
于存放libnl 的编译结果。进入到libnl-3.2.23 文件夹中,然后执行如下命令进行配置:

./configure --host=arm-linux-gnueabihf --prefix=/home/zuozhongkai/linux/IMX6ULL/tool/libnl/

–host 用于指定交叉编译器的前缀,这里设置为“arm-linux-gnueabihf”,–prefix 用于指定编
译结果存放目录,这里肯定要设置为我们刚刚创建的libnl 文件夹。配置完成以后就可以执行如
下命令对libnl 库进行编译、安装:

make -j12 //编译
make install //安装

编译安装完成以后的libnl 目录如图70.3.2.1 所示:

我们需要图70.3.2.1 中lib 目录下的libnl 库文件,将lib 目录下的所有文件拷贝到开发板根
文件系统的/usr/lib 目录下,命令如下所示:

sudo cp lib/* /home/zuozhongkai/linux/nfs/rootfs/usr/lib/ -rf

wpa_supplicant 移植

接下来移植wpa_supplicant,wpa_supplicant 源码我们已经放到了开发板光盘中,路径为:
1、例程源码->7、第三方库源码->wpa_supplicant-2.7.tar.gz,将wpa_supplicant-2.7.tar.gz 拷贝到
Ubuntu 中,输入如下命令进行解压:

tar -vxzf wpa_supplicant-2.7.tar.gz

解压完成以后会得到wpa_supplicant-2.7 文件夹,进入到此文件夹中,wpa_supplicant-2.7 目
录内容如图70.3.3.1 所示:
在这里插入图片描述

进入到图70.3.3.1 中的wpa_supplicant 目录下,然后进行配置,wpa_supplicant 的配置比较
特殊,需要将wpa_supplicant 下的defconfig 文件拷贝一份并重命名为.config,命令如下:

cd wpa_supplicant/
cp defconfig .config

完成以后打开.config 文件,在里面指定交叉编译器、openssl、libnl 库和头文件路径,设置
如下:

示例代码70.3.3.1 .config 文件需要添加的内容
1 CC = arm-linux-gnueabihf-gcc
2
3 #openssl库和头文件路径
4 CFLAGS += -I/home/zuozhongkai/linux/IMX6ULL/tool/openssl/include
5 LIBS += -L/home/zuozhongkai/linux/IMX6ULL/tool/openssl/lib -lssl
		-lcrypto
6
7 #libnl库和头文件路径
8 CFLAGS += -I/home/zuozhongkai/linux/IMX6ULL/tool/libnl/include/libnl3
9 LIBS += -L/home/zuozhongkai/linux/IMX6ULL/tool/libnl/lib

CC 变量用于指定交叉编译器,这里就是arm-linux-gnueabihf-gcc,CFLAGS 指定需要使用
的库头文件路径,LIBS 指定需要用到的库路径。编译wap_supplicant 的时候需要用到openssl 和
libnl 库,所以示例代码70.3.3.1 中指定了这两个的库路径和头文件路径。上述内容在.config 中
的位置见图70.3.3.2:
Linux WIFI 驱动实验_第18张图片
.config 文件配置好以后就可以编译wpa_supplicant 了,使用如下命令编译:

export PKG_CONFIG_PATH=/home/zuozhongkai/linux/IMX6ULL/tool/libnl/lib/pkgconfig:
		$PKG_CONFIG_PATH 	//指定libnl 库pkgconfig 包位置
make -j12 					//编译

首先我们使用export 指定了libnl 库的pkgconfig 路径,环境变量PKG_CONFIG_PATH 保
存着pkgconfig 包路径。在tool/libnl/lib/下有个名为“pkgconfig”的目录,如图70.3.3.3 所示:
Linux WIFI 驱动实验_第19张图片
编译wpa_supplicant 的时候是需要指定libnl 的pkgconfig 路径,否则会提示“libnl-3.0”或
者“libnl-3.0.pc”找不到等错误。编译完成以后就会在本目录下生成wpa_supplicant 和wpa_cli
这两个软件,如图70.3.3.3 所示:
Linux WIFI 驱动实验_第20张图片
将图70.3.3.3 中的wpa_cli 和wpa_supplicant 这两个文件拷贝到开发板根文件系统的/usr/bin
目录中,命令如下:

sudo cp wpa_cli wpa_supplicant /home/zuozhongkai/linux/nfs/rootfs/usr/bin/ -f

拷贝完成以后重启开发板!输入“wpa_supplicant -v”命令查看一下wpa_supplicant 版本号,
如果wpa_supplicant 工作正常的话就会打印出版本号,如图70.3.3.4 所示:
在这里插入图片描述
从图70.3.3.4 可以看出,wpa_supplicant 的版本号输出正常,说明wpa_supplicant 移植成
功,接下来就是使用wpa_supplicant 将开发板的WIFI 链接到路由器上,实现WIFI 上网功能。

WIFI 联网测试

不管是USB WIFI 还是SDIO WIFI,联网的操作步骤如下所示:
①、插上WIFI 模块,如果是板子集成的就不需要这一步。如果是SDIO WIFI 的话确保WIFI
所使用的SDIO 接口没有插其他的模块,比如SD 卡,防止其他模块对SDIO WIFI 造成影响。
②、加载RTL8188 或者RTL8189 驱动模块。
③、使用ifconfig 命令打开对应的无线网卡,比如wlan0 或wlan1……
④、无线网卡打开以后使用iwlist 命令扫描一下当前环境下的WIFI 热点,一来测试一下
WIFI 工作是否正常。二来检查一下自己要连接的WIFI 热点能不能扫描到,扫描不到的话肯定
就没法连接了。
当上述步骤确认无误以后就可以使用wpa_supplicant 来将WIFI 连接到指定的热点上,实现
联网功能。

RTL8188 USB WIFI 联网测试

注意!RTL8188EUS 请使用8188eu.ko 驱动,RTL8188CUS 请使用8192cu.ko 驱动!
首先测试一下RTL8188 USB WIFI 联网测试,确保RTL8188 能扫描出要连接的WIFI 热点,
比如我要连接“ZZK”这个WIFI,iwlist 扫描到的此WIFI 热点信息如图70.4.1.1 所示:
Linux WIFI 驱动实验_第21张图片
要连接的WIFI 热点扫描到以后就可以连接了,先在开发板根文件系统的/etc 目录下创建一
个名为“wpa_supplicant.conf”的配置文件,此文件用于配置要连接的WIFI 热点以及WIFI 秘
密,比如我要连接到“ZZK”这个热点上,因此wpa_supplicant.conf 文件内容如下所示:

示例代码70.4.1.1 wpa_supplicant.conf 文件内容
1 ctrl_interface=/var/run/wpa_supplicant
2 ap_scan=1
3 network={
4 ssid="ZZK"
5 psk="xxxxxxxx"
6 }

第4 行,ssid 是要连接的WIFI 热点名字,这里我要连接的是“ZZK”这个WIFI 热点。
第5 行,psk 就是要连接的WIFI 热点密码,根据自己的实际情况填写即可。
注意,wpa_supplicant.conf 文件对于格式要求比较严格,“=”前后一定不能有空格,也不要
用TAB 键来缩进,比如第4 行和5 行的缩进应该采用空格,否则的话会出现wpa_supplicant.conf
文件解析错误!最重要的一点!wpa_supplicant.conf 文件内容要自己手动输入,不要偷懒复制粘
贴!!!
wpa_supplicant.conf 文件编写好以后再在开发板根文件系统下创建一个
“/var/run/wpa_supplicant”目录,wpa_supplicant 工具要用到此目录!命令如下:

mkdir /var/run/wpa_supplicant -p

一切准备好以后就可以使用wpa_supplicant 工具让RTL8188 USB WIFI 连接到热点上,输
入如下命令:

wpa_supplicant -D wext -c /etc/wpa_supplicant.conf -i wlan0 &

当RTL8188 连接上WIFI 热点以后会输出如图70.4.1.2 所示的信息:
图70.4.1.2 连接成功

从图70.4.1.2 可以看出,当RTL8188 连接到WIFI 热点上以后会输出“wlan0: CTRL-EVENT-
CONNECTED”字样。接下来就是最后一步了,设置wlan0 的IP 地址,这里使用udhcpc 命令
从路由器申请IP 地址,输入如下命令:

udhcpc -i wlan0 //从路由器获取IP 地址

IP 地址获取成功以后会输出如图70.4.2.2 所示信息:
Linux WIFI 驱动实验_第22张图片
从图70.4.2.2 可以看出,wlan0 的IP 地址获取成功,IP 地址为192.168.1.126。可以输入如
下命令查看一下wlan0 网卡的详细信息:

ifconfig wlan0

结果如图70.4.2.3 所示:
Linux WIFI 驱动实验_第23张图片
可以通过电脑ping 一下wlan0 的192.168.1.126 这个IP 地址,如果能ping 通就说明RTL8188 USB WIFI 工作正常。也可以直接在开发板上使用wlan0 来ping 一下百度网站,输入如下命令:

ping -I 192.168.1.126 www.baidu.com

-I 是指定执行ping 操作的网卡IP 地址,我们要使用wlan0 去ping 百度网站,因此要通过
“-I”指定wlan0 的IP 地址。如果WIFI 工作正常的话就可以ping 通百度网站,如图70.4.2.4
所示:
Linux WIFI 驱动实验_第24张图片
至此RTL8188 USB WIFI 我们就完全驱动起来了,大家就可以使用WIFI 来进行网络通信
了。

RTL8189 SDIO WIFI 联网测试

RLT8189 SDIO WIFI 的测试和RTL8188 USB WIFI 的测试方法基本一致,如果插了SD 卡
的话先将SD 卡从I.MX6U-ALPHA 开发板上拔出,因为I.MX6U-ALPHA 开发板的SD 卡和
SDIO WIFI 公用一个SDIO 接口。插入RTL8189 SDIO WIFI 模块,然后加载RTL8189 驱动,并
且打开对应的wlan0(如果只有RTL8189 一个WIFI 的话)网卡,使用iwlist 命令搜索要连接的
WIFI 热点是否存在,如果存在的话就可以连接了。

RTL8189 SDIO WIFI 同样使用wpa_supplicant 来完成热点连接工作,因此同样需要创建
/etc/wpa_supplicant.conf 文件,具体过程参考70.4.1 小节。一切准备就绪以后输入如下命令来完
成WIFI 热点连接:

wpa_supplicant -Dnl80211 -c /etc/wpa_supplicant.conf -i wlan0 &

注意红色字体,使用RTL8189 的话应该使用“-Dnl80211”,这里不要填错了!WIFI 热点连
接成功以后会输出如图70.4.2.1 所示信息:
Linux WIFI 驱动实验_第25张图片

使用udhcpc 命令获取IP 地址,命令如下:

udhcpc -i wlan0

IP 地址获取过程如图70.4.2.2 所示:
Linux WIFI 驱动实验_第26张图片
从图70.4.2.2 可以看出,wlan0 的IP 地址为192.168.1.118,大家可以使用“ifconfig wlan0”
查看一下wlan0 网卡的详细信息。可以通过电脑ping 一下192.168.1.118 测试WIFI 是否工作正
常,或者在开发板上使用wlan0 网卡ping 一下百度网址来测试一下WIFI 工作是否正常,输入
如下命令:

ping -I 192.168.1.118 www.baidu.com

如果ping 成功的话结果如图70.4.2.3 所示:
在这里插入图片描述
至此,如何在I.MX6U-ALPHA 开发板上使用WIFI 就全部讲解完了,包括USB WIFI 和
SDIO WIFI。其实不管是在I.MX6U 上,还是在其他的SOC 上,USB WIFI 和SDIO WIFI 的驱动都是类似的,大家可以参考本章教程讲RTL8188、RTL8189 这两款WIFI 的驱动移植到芯片或者开发板上。

你可能感兴趣的:(正点IMX6ULL驱动开发,linux)