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
所示:
另外,正点原子还有一款采用RTL8189FTV 芯片的SDIO WIFI,如图70.1.2 所示:
向Linux 内核添加WIFI 驱动
1、rtl81xx 驱动文件浏览
WIFI 驱动源码已经放到了开发板光盘中,路径为:1、例程源码->5、模块驱动源码->1、
RTL8XXX WIFI 驱动源码-> realtek。realtek 目录下就存放着RTL8188EUS 和RTL8189FS 这两
个芯片的驱动源码,如图70.1.1.1 所示:
其中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 所示:
图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 所示:
3、配置支持IEEE 802.11
配置路径如下:
-> Networking support-> -*- Wireless-> [*] cfg80211 wireless extensions compatibility-> <*> Generic IEEE 802.11 Networking Stack (mac80211)
配置完如图70.1.2.2 所示:
配置好以后重新编译一下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 所示:
图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 所示:
图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 所示:
输入“ifconfig -a”命令,查看wlanX(X=0….n)网卡是否存在,一般都是wlan0,除非板子
上有多个WIFI 模块在工作,结果如图70.1.4.2 所示:
从图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 所示:
测试开始之前要先将SD 卡拔出,然后将RTL8189 SDIO WIFI 模块插入到SDIO WIFI 座子
上,如图70.1.4.4 所示:
SDIO WIFI 与开发板连接好以后就可以测试了,输入如下命令加载8189fs.ko 这个驱动模
块:
depmod //第一次加载驱动的时候需要运行此命令
modprobe 8189eu.ko //加载驱动模块
如果驱动加载成功的话如图70.1.4.5 所示:
从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
所示:
图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 工具工作正常。
正式测试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 所示:
在扫描到的所有热点信息中找到自己要连接的WIFI 热点,比如我要连接到“ZZK”这个热
点上,这个WIFI 热点信息如图70.2.2.3 所示:
可以看出,“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:
.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 所示:
编译wpa_supplicant 的时候是需要指定libnl 的pkgconfig 路径,否则会提示“libnl-3.0”或
者“libnl-3.0.pc”找不到等错误。编译完成以后就会在本目录下生成wpa_supplicant 和wpa_cli
这两个软件,如图70.3.3.3 所示:
将图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 所示:
要连接的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 可以看出,当RTL8188 连接到WIFI 热点上以后会输出“wlan0: CTRL-EVENT-
CONNECTED”字样。接下来就是最后一步了,设置wlan0 的IP 地址,这里使用udhcpc 命令
从路由器申请IP 地址,输入如下命令:
udhcpc -i wlan0 //从路由器获取IP 地址
IP 地址获取成功以后会输出如图70.4.2.2 所示信息:
从图70.4.2.2 可以看出,wlan0 的IP 地址获取成功,IP 地址为192.168.1.126。可以输入如
下命令查看一下wlan0 网卡的详细信息:
ifconfig wlan0
结果如图70.4.2.3 所示:
可以通过电脑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
所示:
至此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 所示信息:
使用udhcpc 命令获取IP 地址,命令如下:
udhcpc -i wlan0
IP 地址获取过程如图70.4.2.2 所示:
从图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 的驱动移植到芯片或者开发板上。
相关文章:

Linux WIFI 驱动实验
目录WIFI 驱动添加与编译向Linux 内核添加WIFI 驱动配置Linux 内核编译WIFI 驱动驱动加载测试wireless tools 工具移植与测试wireless tools 移植wireless tools 工具测试wpa_supplicant 移植openssl 移植libnl 库移植wpa_supplicant 移植WIFI 联网测试RTL8188 USB WIFI 联网测…...

UART驱动情景分析-write
一、write过程分析 App写: 使用行规程来写数据最终存入uart_state->xmit的buffer里 硬件发送: 使用硬件驱动中uart_ops->start_tx开始发送具体的发送方式有两种:通过DMA、通过中断 中断方式: 方法1:直接使能tx …...

Metasploit入门到高级【第四章】
来自公粽号:Kali与编程预计更新第一章:Metasploit 简介 Metasploit 是什么Metasploit 的历史和发展Metasploit 的组成部分 第二章:Kali Linux 入门 Kali Linux 简介Kali Linux 安装和配置常用命令和工具介绍 第三章:Metasploi…...

java 继承super
在java继承中,如果子类继承父类,在子类中要给用构造器给父类的属性赋值,需要用到 super 举例,Son类继承Father 类,便于理解 在 new Son(String name, int age) 传入name,和age的值 将会调用Son这个构造器…...

Java学习笔记——多态
2.1 概述 引入 多态是继封装、继承之后,面向对象的第三大特征。 生活中,比如跑的动作,小猫,小狗和大象,跑起来都是不一样的。再比如飞的动作,昆虫、鸟类和飞机,飞起来是不一样的。可见&#x…...

Python处理JSON数据
Python和JSON JavaScript Object Notation (JSON) 是一种轻量级的数据交换格式,通常用于Web应用程序之间的数据交换。JSON的设计使得它非常易于人和机器阅读和编写。JSON数据格式与Python数据结构非常相似,因此Python中提供了一个json模块,用…...

JVM信息查询命令
1、查询jar包运行进程 jps #通过jps命令找出jar的进程IDps -ef|grep xxxx #通过包名找出进程ID2、查询JVM的堆信息 jmap -heap pid #通过jmap命令查询堆信息rootd57bff9f-c8nvn:/apps# jmap -heap 6 Picked up JAVA_TOOL_OPTIONS: -Xloggc:/data/tsf_apm/monitor/jvm…...

redis 面试题
🍕 redis 面试题常规问题什么是 Redis?为什么要使用 Redis?Redis 一般有哪些使用场景?Redis 为什么快?数据类型和数据结构Redis有哪些数据类型?常用操作和应用Bitmaps (位图) | 二进制计数与过滤计数器记录…...

SpringCloud微服务技术栈.黑马跟学(十二)
SpringCloud微服务技术栈.黑马跟学 十二今日目标服务异步通信-高级篇1.消息可靠性1.1.生产者消息确认1.1.1.修改配置1.1.2.定义Return回调1.1.3.定义ConfirmCallback1.2.消息持久化1.2.1.交换机持久化1.2.2.队列持久化1.2.3.消息持久化1.3.消费者消息确认1.3.1.演示none模式1.3…...

HashMap集合存储学生对象并遍历
需求:创建一个HashMap集合,键是学生对象(Student),值是居住地。存储多个键值对元素,并遍历。 要求保证键的唯一性:如果学生对象的成员变量值相同,我们就认为是同一个对象 思路: 定义…...

“提效”|教你用ChatGPT玩数据
ChatGPT与数据分析(二) 上文给简单聊了一下为什么ChatGPT不能取代数据分析师,本文我们来深入感受一下如何让GPT帮助数据分析师“提效”。 场景一:SQL取数 背景:多数数据分析师都要用SQL语言从数据库中提取数据&#x…...

https://app.hackthebox.com/machines/Inject
https://app.hackthebox.com/machines/Inject Ref: 1.https://blog.csdn.net/qq_58869808/article/details/129505388 2.https://blog.csdn.net/m0_73998094/article/details/129474782 info collecting ┌──(kwkl㉿kwkl)-[~/HODL/htb/Inject] └─$ nmap -A …...

Java Web 实战 15 - 计算机网络之网络编程套接字
文章目录一 . 网络编程中的基本概念1.1 网络编程1.2 客户端(client) / 服务器(server)1.3 请求(request) / 响应(response)1.4 客户端和服务器之间的交互数据1.4.1 一问一答1.4.2 多问一答1.4.3 一问多答1.4.4 多问多答二 . socket 套接字2.1 UDP 的 Socket API2.1.1 引子2.1.2…...

基于pdf2docx模块Python实现批量将PDF转Word文档(安装+完整代码教程)
PDF文件是一种常见的文档格式,但是在编辑和修改时不太方便,因为PDF本质上是一种静态的文档格式。因此,有时候我们需要将PDF文件转换成Word格式,以便更好地编辑和修改文档。在本篇文章中,我们将介绍如何使用Python实现P…...

3.21~3.22
识编程语言中的,局部变量,全局变量,以及变量生存周期,整形,浮点型数据的内存表示,od的内存窗口的使用 先看一个代码样例 #include<windows.h> #include<stdio.h>#pragma warning(disable:499…...

Chromium 改造实录:增加 MPEG TS 格式支持
在《选择最新 Chromium,支持 H264 / H265》一文中,记录了我通过升级 Chromium 版本解决了 H264 / H265 视频支持难题。然而难题接踵而至,这次的难题是 MPEG TS 流的支持。MPEG2-TS 传输流广泛应用于数字电视广播系统,所以是一个不…...

性能优化之-事件代理
js中的事件委托或是事件代理简单理解 事件委托也叫事件代理,“事件代理”即是把原本需要绑定在子元素的响应事件(click、keydown…)委托给父元素,让父元素担当事件监听的职务。事件代理的原理是DOM元素的事件冒泡。 概述&#x…...

MSDS 即化学品安全说明书
MSDS 即化学品安全说明书,亦可译为化学品安全技术说明书或化学品安全数据说明书,是化学品生产商和进口商用来阐明化学品的理化特性(如PH值,闪点,易燃度,反应活性等)以及对使用者的健康ÿ…...

真人手办没法实现网购?我有一个好办法!
记得以前在网上看到过一个冷笑话式的问答,问的是中国最早的手办是什么,有网友回答是秦始皇兵马俑,这个抖机灵式的回答简直妙得让人会心一笑。 你接触过手办吗? 提到手办,大家第一时间想到的,肯定都会是各…...

2019湖南省大学生程序设计竞赛题解(D)
D-Modulo Nine 很妙的类似区间dp, 我自己是想不到,本题解题思路来自学长的博客: 长沙橘子猫 题意 有一个长度为 nnn 的序列,你可以给每个位置填 0∼90\sim90∼9 的一个数,有 mmm 个限制,每个限制 [li,ri…...

【开发】中间件——RocketMQ
分布式消息系统 RocketMQ概念,用途,特性安装RocketMQ掌握RocketMQ的api使用对producer、consumer进行详解了解RocketMQ的存储特点 简介及相关概念JavaAPISpringBoot整合RocketMQ消息的顺序收发消息系统的事务、存储、重试策略消息系统的集群 RocketMQ R…...

36 UnitTest框架 - 参数化
目录 一、参数化环境准备 1、方式一:在终端(cmd)安装parameterized 2、方式二:在Pycharm中安装parameterized 二、参数化 1、什么事参数化? 2、参数化引入案例 (1)需求 (2&a…...

Qt源码阅读(四) 事件循环
事件系统 文章为本人理解,如有理解不到位之处,烦请各位指正。 文章目录事件系统什么是事件循环?事件是如何产生的?sendEventpostEvent事件是如何处理的?事件循环是怎么遍历的?事件过滤器event夹带私货时间Q…...

银行数字化转型导师坚鹏:银行数字化领导力提升之道
银行数字化领导力提升之道 ——融合中西智慧,践行知行合一思想,实现知行果合一 课程背景: 很多银行存在以下问题:不知道如何领导数字员工?不清楚银行数字化领导力模型的内涵?不知道如何开展银行数字化…...

Vue2 -- 自定义单选内容的单选框组件
自定义单选内容的单选框组件 之前做的一个项目,在项目中有一个关于人员权限分配的功能,给人员指定各个模块的权限信息,分为 write 可写权限read 可读权限none 没有权限 项目要求画面中只显示 W R 两个按钮控制指定权限信息,都不…...

让PyTorch训练速度更快,你需要掌握这17种方法
掌握这 17 种方法,用最省力的方式,加速你的 Pytorch 深度学习训练。近日,Reddit 上一个帖子热度爆表。主题内容是关于怎样加速 PyTorch 训练。原文作者是来自苏黎世联邦理工学院的计算机科学硕士生 LORENZ KUHN,文章向我们介绍了在…...

LeetCode-309. 最佳买卖股票时机含冷冻期
目录题目思路动态规划题目来源 309. 最佳买卖股票时机含冷冻期 题目思路 每天最多只可能有三种状态中的一种 0表示当前处于买入状态(持有股票) 1表示当前处于卖出状态(不持有股票) 2表示当前处于冷冻状态 设dp[i][j]表示i - 1天状态为j时所拥有的最大现金 dp[i][0] Math.ma…...

AUTOSAR知识点Com(七):CANSM初认知
目录 1、概述 2、CanSM主要做什么 2.1、CAN控制器状态管理 2.2、CAN收发器状态管理 2.3、Busoff检测 1、概述 CANSM(Controller Area Network State Manager)是AUTOSAR(Automotive Open System Architecture)标准中的一个模块…...

递归:斐波那契数列、递归实现指数型枚举、递归实现排列型枚举
递归:O(2^n) 调用自己 例题及代码模板: 斐波那契数列 输入一个整数 n ,求斐波那契数列的第 n 项。 假定从 0 开始,第 0 项为 0。 数据范围 0≤n≤39 样例 输入整数 n5 返回 5 #include <iostream> #include <cstring&g…...

oracle模糊查询时字段内容包含下划线的解决办法
最近项目中遇到一个关于模糊查询问题。表tabA中的字段name的值有下划线的情况,在模糊查询时发现查询的记录不对。 表的结构 表名:tabA id name sex 1 test_601 1 2 test_602 2 3 test16 1 4 t…...