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…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...

算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...

【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...