搜索
bottom↓
回复: 1

【正点原子Linux连载】第七十章Linux WIFI驱动实验--摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南

[复制链接]

出0入234汤圆

发表于 2020-7-11 16:23:19 | 显示全部楼层 |阅读模式
本帖最后由 正点原子 于 2020-10-26 12:05 编辑

1)实验平台:正点原子阿尔法Linux开发板
2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434
3)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-300792-1-1.html  
4)对正点原子Linux感兴趣的同学可以加群讨论:
876919289 QQ群头像.png
5)关注正点原子公众号,获取最新资料


100846rel79a9p4uelap24.jpg

100846f1ce1fg14zbg0va4.png

第七十章Linux WIFI驱动实验


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



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

图70.1.1 RTL8188 USB WIFI

        另外,正点原子还有一款采用RTL8189FTV芯片的SDIO WIFI,如图70.1.2所示:
image004.jpg

图70.1.2 RTL8188 SDIO WIFI

70.1.1 向Linux内核添加WIFI驱动
        1、rtl81xx驱动文件浏览
        WIFI驱动源码已经放到了开发板光盘中,路径为:1、例程源码->5、模块驱动源码->1、RTL8XXX WIFI驱动源码-> realtek。realtek目录下就存放着RTL8188EUS和RTL8189FS这两个芯片的驱动源码,如图70.1.1.1所示:
image006.jpg

图70.1.1.1 rtl8xxx WIFI驱动

        其中rtl8188EUS下存放着RTL8188EUS驱动,RTL8189FS存放着RTL8189FS/FTV的驱动文件。Kconfig文件是WIFI驱动的配置界面文档,这样可以通过Linux内核图形化配置界面来选择是否编译WIFI驱动,Kconfig文件内容如下所示:
示例代码70.1.1.1 Kconfig文件内容
  1. 1  menuconfig REALTEK_WIFI
  2. 2        tristate "Realtek wifi"
  3. 3
  4. 4if REALTEK_WIFI
  5. 5
  6. 6  choice
  7. 7        prompt "select wifi type"
  8. 8        default RTL9189FS
  9. 9
  10. 10 config RTL9189FS
  11. 11        depends on REALTEK_WIFI
  12. 12        tristate "rtl8189fs/ftv sdio wifi"
  13. 13
  14. 14 config RTL8188EUS
  15. 15        depends on REALTEK_WIFI
  16. 16        tristate "rtl8188eus usb wifi"
  17. 17
  18. 18 endchoice
  19. 19 endif
复制代码

        Makefile文件内容如下所示
示例代码70.1.1.2 Makefile文件内容
  1. 1 obj-$(CONFIG_RTL8188EUS)+= rtl8188EUS/
  2. 2 obj-$(CONFIG_RTL8189FS)+= rtl8189FS/
复制代码

        2、将rtl81xx驱动添加到Linux内核中
        将realtek整个目录拷贝到ubuntu下Linux内核源码中的drivers/net/wireless目录下,此目录下存放着所有WIFI驱动文件。拷贝完成以后此目录如图70.1.1.1所示:
image008.gif

图70.1.1.1 拷贝完成的wireless目录

        图70.1.1.1中框选出来的就是我们刚刚拷贝进来的realtek目录。
        3、修改drivers/net/wireless/Kconfig
        打开drivers/net/wireless/Kconfig,在里面加入下面这一行内容:
  1. source "drivers/net/wireless/realtek/Kconfig"
复制代码

        添加完以后的Kconfig文件内容如下所示:
示例代码70.1.1.3 drivers/net/wireless/Kconfig文件内容
  1. 1 #
  2. 2 # Wireless LAN device configuration
  3. 3 #
  4. 4
  5. 5 menuconfig WLAN
  6. ......
  7. 286 source "drivers/net/wireless/rsi/Kconfig"
  8. 287 source "drivers/net/wireless/realtek/Kconfig"
  9. 286
  10. 289 endif # WLAN
复制代码

        第287行就是添加到drivers/net/wireless/Kconfig中的内容,这样WIFI驱动的配置界面才会出现在Linux内核配置界面上。
        3、修改drivers/net/wireless/Makefile
        打开drivers/net/wireless/Makefile,在里面加入下面一行内容:
  1. obj-y += realtek/
复制代码

        修改完以后的Makefile文件内容如下所示:
示例代码70.1.1.4 drivers/net/wireless/Makefile文件内容
  1. 1 #
  2. 2 # Makefile for the Linux Wireless network device drivers.
  3. 3 #
  4. 4
  5. 5 obj-$(CONFIG_IPW2100)+= ipw2x00/
  6. ......
  7. 62 obj-$(CONFIG_CW1200)+= cw1200/
  8. 63 obj-$(CONFIG_RSI_91X)+= rsi/
  9. 64
  10. 65 obj-y += realtek/
复制代码

        第65行,编译realtek中的内容,至此,Linux内核要修改的内容就全部完成了。
70.1.2 配置Linux内核
        在编译RTL8188和RTL8189驱动之前需要先配置Linux内核。
        1、配置USB支持设备
        配置路径如下:
  1. -> Device Drivers                                                                                                                                      
  2.                 -><*>USB support
  3.                         -><*>Support for Host-side USB
  4.                         -><*> EHCI HCD (USB 2.0) support
  5.                         -><*> OHCI HCD (USB 1.1) support   
  6.                         -><*> ChipIdea Highspeed Dual Role Controller  
  7.                                 -><li> ChipIdea device controller
  8.                                 -></li><li> ChipIdea host controller  </li>
复制代码

        2、配置支持WIFI设备
        配置路径如下:
  1. <li>-> Device Drivers                                                                                                                                   
  2.         -></li><li> Network device support                                                                                                   
  3.                 -></li><li> Wireless LAN
  4.                         -><*> IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP)   
  5.                                 -></li><li> Support downloading firmware images with Host AP driver
  6.                                 -></li><li> Support for non-volatile firmware download</li>
复制代码

配置完如图70.1.2.1所示:
image010.gif

图70.1.2.1 配置支持WIFI设备

        3、配置支持IEEE 802.11
        配置路径如下:
  1. <li>-> Networking support                                                   
  2.                 -> -*- Wireless                                                   
  3.         -></li><li> cfg80211 wireless extensions compatibility  
  4.                 -><*> Generic IEEE 802.11 Networking Stack (mac80211)   </li>
复制代码

        配置完如图70.1.2.2所示:
image012.gif

图70.1.2.2 IEE 802.11配置项

        配置好以后重新编译一下Linux内核,得到新的zImage,后面使用新编译出来的zImage启动系统。
70.1.3 编译WIFI驱动
        执行“makemenuconfig”命令,打开Linux内核配置界面,然后按照如下路径选择将rtl81xx驱动编译为模块:
  1. -> Device Drivers                                                                                            
  2.         -> Network device support (NETDEVICES [=y])                                                               
  3.         -> Wireless LAN (WLAN [=y])                                                                              
  4.                 -> Realtek wifi (REALTEK_WIFI [=m])                                                                    
  5.         -> rtl8189ftv sdio wifi  
  6.                                 -> rtl8188eus usb wifi  
复制代码

        配置结果如图70.1.3.1所示:
image014.jpg

图70.1.3.1 WIFI配置界面

        图70.1.3.1中的配置界面就是我们添加进去的WIFI配置界面,选中“rtl8189fs/ftv sdio wifi”和“rtl8188eus usb wifi”,将其编译为模块。执行如下命令编译模块:
  1. makemodules -j12                //编译驱动模块
复制代码

        编译完成以后就会在rtl8188EUS和rtl8189FS文件夹下分别生成8188eu.ko和8189fs.ko这两个.ko文件,结果如图70.1.3.2所示:
image016.gif

图70.1.3.2 编译结果

        图70.1.3.2中的8188eu.ko和8189fs.ko就是我们需要的RTL8188EUS和RTL8189FS的驱动模块文件,将这两个文件拷贝到rootfs/lib/modules/4.1.15目录中,命令如下:
  1. sudo cp 8189fs.ko /home/zuozhongkai/linux/nfs/rootfs/lib/modules/4.1.15/ -rf
  2. sudo cp 8188eu.ko /home/zuozhongkai/linux/nfs/rootfs/lib/modules/4.1.15/ -rf
复制代码

        因为我们重新配置过Linux内核,因此也需要使用新的zImage启动,将新编译出来的zImage镜像文件拷贝到Ubuntu中的tftpboot目录下,命令如下:
  1. cp arch/arm/boot/zImage /home/zuozhongkai/linux/tftpboot/ -f
复制代码

        然后重启开发板!!!
70.1.4 驱动加载测试
1、RTL8188 USB WIFI驱动测试
        重启以后我们试着加载一下8188eu.ko和8189fs.ko这两个驱动文件,首先测试一下RTL8188的驱动文件,将RTL8188 WIFI模块插到开发板的USB HOST接口上。进入到目录lib/modules/4.1.15中,输入如下命令加载8188eu.ko这个驱动模块:
  1. depmod                                //第一次加载驱动的时候需要运行此命令
  2. modprobe 8188eu.ko        //加载驱动模块
复制代码

        如果驱动加载成功的话如图70.1.4.1所示:
image018.jpg

图70.1.4.1 RTL8188驱动加载成功

        输入“ifconfig-a”命令,查看wlanX(X=0….n)网卡是否存在,一般都是wlan0,除非板子上有多个WIFI模块在工作,结果如图70.1.4.2所示:
image020.gif

图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所示:
image022.gif

图70.1.4.3 SDIO WIFI接口

        测试开始之前要先将SD卡拔出,然后将RTL8189 SDIO WIFI模块插入到SDIO WIFI座子上,如图70.1.4.4所示:
image024.jpg

图70.1.4.4 SDIO WIFI连接图

        SDIO WIFI与开发板连接好以后就可以测试了,输入如下命令加载8189fs.ko这个驱动模块:
  1. depmod                                //第一次加载驱动的时候需要运行此命令
  2. modprobe 8189eu.ko        //加载驱动模块
复制代码

        如果驱动加载成功的话如图70.1.4.5所示:
image026.jpg

图70.1.4.5 RTL8189驱动加载成功

        从70.1.4.5可以看出,RTL8189 SDIO WIFI驱动加载成功,同样使用“ifconfig -a”命令查看一下是否有wlanX(X=0…n)网卡存在,如果有的话就说明RTL8189 SDIO WIFI驱动工作正常。
        不管是RTL8188 USB WIFI还是RTL8189 SDIO WIFI,驱动测试都工作正常,但是我们得能联网啊,不能联网的话要他有什么用呢?WIFI要想联网,需要移植一些其他第三方组件,否则无法连接路由器,接下来我们就移植这些第三方组件。
70.2 wireless tools工具移植与测试
70.2.1 wireless tools移植
        wirelesstools是操作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所示:
image028.gif

图70.2.1.1修改后的CC、AR和RANLIB值

        图70.2.1.1中CC、AR和RANLIB这三个变量为所使用的编译器工具,将其改为我们所使用的arm-linux-gnueabihf-xxx工具即可。修改完成以后就可以使用如下命令编译:
  1. makeclean        //先清理一下工程
  2. make                //编译
复制代码

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

        拷贝完成以后可以测试iwlist是否工作正常。
70.2.2 wirelesstools工具测试
        这里我们主要测试一下iwlist工具,要测试iwlist工具,先测试一下iwlist工具能不能工作,输入iwlist命令,如果输出图70.2.2.1所示信息就表明iwlist工具工作正常。
image030.jpg

图70.2.2.1 iwlist工具

正式测试iwlist之前得先让WIFI模块工作起来。RTL8188或RTL8189都可以,以RTL8188 USB WIFI为例,先将RTL8188 WIFI模块插到开发板的USB HOST接口上,然后加载RTL8188驱动模块8188eu.ko,驱动加载成功以后在打开wlan0网卡,命令如下:
  1. modprobe 8188eu.ko                        //加载RTL8188驱动模块
  2. ifconfig wlan0 up                                //打开wlan0网卡
复制代码

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

        上述命令就会搜索当前环境下的所有WIFI热点,然后将这些热点的信息信息答应出来,包括MAC地址、ESSID(WIFI名字)、频率、速率,信号质量等等,如图70.2.2.2所示:
image032.jpg

图70.2.2.2 扫描到的WIFI热点信息

        在扫描到的所有热点信息中找到自己要连接的WIFI热点,比如我要连接到“ZZK”这个热点上,这个WIFI热点信息如图70.2.2.3所示:
image034.jpg

图70.2.2.3 ZZK热点信息

        可以看出,“ZZK”这个热点信息已经被扫描到了,因此可以连接。要想连接到指定的WIFI热点上就需要用到wpa_supplicant工具,所以接下来就是移植此工具。
70.3 wpa_supplicant移植
70.3.1 libopenssl移植
        wpa_supplicant依赖于libopenssl,因此需要先移植libopenssl,libopenssl源码已经放到了开发板光盘中,路径为:1、例程源码-》7、第三方库源码-》openssl-1.1.1-stable-SNAP-20190915.tar.gz。将openssl源码压缩包拷贝到Ubuntu中前面创建的tool目录下,然后使用如下命令将其解压:
  1. tar -vxzf openssl-1.1.1-stable-SNAP-20190915.tar.gz
复制代码

        解压完成以后就会生成一个名为openssl-1.1.1-stable-SNAP-20190915的目录,然后在新建一个名为“libopenssl”的文件夹,用于存放libopenssl的编译结果。进入到解压出来的openssl-1.1.1-stable-SNAP-20190915目录中,然后执行如下命令进行配置:
  1. ./config shared no-asm --prefix=/home/zuozhongkai/linux/IMX6ULL/tool/libopenssl
复制代码

        配置成功以后会生成Makefile,打开Makefile,找到所有包含“-m64”的内容,一共两处分别为变量CNF_CFLAGS和CNF_CXXFLAGS,将这两个变量中的“-m64”删除掉,删除以后如图70.3.1.1所示:
image036.gif

图70.3.1.1 删除掉“-m64”

        Makefile修改好以后使用如下命令编译并安装libopenssl:
  1. make CROSS_COMPILE=arm-linux-gnueabihf- -j12
  2. makeinstall
复制代码

        编译安装完成以后的libopenssl目录内容如图70.3.1.2所示:
image038.jpg

图70.3.1.2 编译并安装成功的libopenssl目录

        将图70.3.1.2中的lib目录是我们需要的,将lib目录下的所有文件拷贝到开发板根文件系统中的/usr/lib目录下,命令如下:
  1. sudo cp lib/* /home/zuozhongkai/linux/nfs/rootfs/usr/lib/ -rf
  2. 70.3.2 libnl库移植
复制代码

        wpa_supplicant也依赖于libnl,因此还需要移植一下libnl库,libnl源码已经放到了开发板光盘中,路径为:1、例程源码-》7、第三方库源码-》libnl-3.2.23.tar.gz。将libnl源码压缩包拷贝到Ubuntu中前面创建的tool目录下,然后使用如下命令将其解压:
  1. 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库进行编译、安装:
  1. make-j12                //编译
  2. makeinstall                //安装
复制代码

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

图70.3.2.1 编译安装完成后的libnl目录

        我们需要图70.3.2.1中lib目录下的libnl库文件,将lib目录下的所有文件拷贝到开发板根文件系统的/usr/lib目录下,命令如下所示:
  1. sudo cp lib/* /home/zuozhongkai/linux/nfs/rootfs/usr/lib/ -rf
  2. 70.3.3 wpa_supplicant移植
复制代码

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

解压完成以后会得到wpa_supplicant-2.7文件夹,进入到此文件夹中,wpa_supplicant-2.7目录内容如图70.3.3.1所示:
image042.jpg

图70.3.3.1 wpa_supplicant-2.7目录

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

        完成以后打开.config文件,在里面指定交叉编译器、openssl、libnl库和头文件路径,设置如下:
示例代码70.3.3.1 .config文件需要添加的内容
  1. 1 CC = arm-linux-gnueabihf-gcc
  2. 2
  3. 3 #openssl库和头文件路径
  4. 4 CFLAGS +=-I/home/zuozhongkai/linux/IMX6ULL/tool/libopenssl/include
  5. 5LIBS+=-L/home/zuozhongkai/linux/IMX6ULL/tool/libopenssl/lib-lssl
  6. -lcrypto
  7. 6
  8. 7#libnl库和头文件路径
  9. 8 CFLAGS +=-I/home/zuozhongkai/linux/IMX6ULL/tool/libnl/include/libnl3
  10. 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:
image044.gif

图70.3.3.2 添加到.config中的内容

        .config文件配置好以后就可以编译wpa_supplicant了,使用如下命令编译:
  1. export PKG_CONFIG_PATH=/home/zuozhongkai/linux/IMX6ULL/tool/libnl/lib/pkgconfig:
  2.                 $PKG_CONFIG_PATH                        //指定libnl库pkgconfig包位置
  3. make -j12                                                        //编译
复制代码

        首先我们使用export指定了libnl库的pkgconfig路径,环境变量PKG_CONFIG_PATH保存着pkgconfig包路径。在tool/libnl/lib/下有个名为“pkgconfig”的目录,如图70.3.3.3所示:
image046.gif

图70.3.3.3 libnl的pkgconfig目录

        编译wpa_supplicant的时候是需要指定libnl的pkgconfig路径,否则会提示“libnl-3.0”或者“libnl-3.0.pc”找不到等错误。编译完成以后就会在本目录下生成wpa_supplicant和wpa_cli这两个软件,如图70.3.3.3所示:
image048.gif

图70.3.3.3 编译出来的wpa_cli和wpa_supplicant文件

        将图70.3.3.3中的wpa_cli和wpa_supplicant这两个文件拷贝到开发板根文件系统的/usr/bin目录中,命令如下:
  1. 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所示:
image050.jpg

图70.3.3.4 wpa_supplicant版本号

        从图70.3.3.4可以看出, wpa_supplicant的版本号输出正常,说明wpa_supplicant移植成功,接下来就是使用wpa_supplicant将开发板的WIFI链接到路由器上,实现WIFI上网功能。
70.4 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连接到指定的热点上,实现联网功能。
70.4.1 RTL8188 USB WIFI联网测试        
        首先测试一下RTL8188 USB WIFI联网测试,确保RTL8188能扫描出要连接的WIFI热点,比如我要连接“ZZK”这个WIFI,iwlist扫描到的此WIFI热点信息如图70.4.1.1所示:
image052.jpg

图70.4.1.1 ZZK WIFI热点

        要连接的WIFI热点扫描到以后就可以连接了,先在开发板根文件系统的/etc目录下创建一个名为“wpa_supplicant.conf”的配置文件,此文件用于配置要连接的WIFI热点以及WIFI秘密,比如我要连接到“ZZK”这个热点上,因此wpa_supplicant.conf文件内容如下所示:
示例代码70.4.1.1 wpa_supplicant.conf文件内容
  1. 1 ctrl_interface=/var/run/wpa_supplicant
  2. 2 ap_scan=1
  3. 3 network={
  4. 4  ssid="ZZK"
  5. 5  psk="xxxxxxxx"
  6. 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工具要用到此目录!命令如下:
  1. mkdir /var/run/wpa_supplicant -p
复制代码

一切准备好以后就可以使用wpa_supplicant工具让RTL8188 USB WIFI连接到热点上,输入如下命令:
  1. wpa_supplicant -D wext -c /etc/wpa_supplicant.conf -i wlan0 &
复制代码

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

图70.4.1.2 连接成功

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

        IP地址获取成功以后会输出如图70.4.2.2所示信息:
image056.jpg

图70.4.2.2 wlan0网卡WIFI地址获取成功

        从图70.4.2.2可以看出,wlan0的IP地址获取成功,IP地址为192.168.1.126。可以输入如下命令查看一下wlan0网卡的详细信息:
  1. ifconfigwlan0
复制代码

        结果如图70.4.2.3所示:
image058.jpg

图70.4.2.3 wlan0网卡详细信息

        可以通过电脑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所示:
image060.jpg

图70.4.2.4 百度网站ping成功

        至此RTL8188 USB WIFI我们就完全驱动起来了,大家就可以使用WIFI来进行网络通信了。
70.4.2 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所示信息:
image062.gif

图70.4.2.1 RTL8189 SDIO WIFI连接成功

        使用udhcpc命令获取IP地址,命令如下:
  1. udhcpc -i wlan0        
复制代码

        IP地址获取过程如图70.4.2.2所示:
image064.jpg

图70.4.2.2 udhcpc获取IP地址过程

        从图70.4.2.2可以看出,wlan0的IP地址为192.168.1.118,大家可以使用“ifconfigwlan0”查看一下wlan0网卡的详细信息。可以通过电脑ping一下192.168.1.118测试WIFI是否工作正常,或者在开发板上使用wlan0网卡ping一下百度网址来测试一下WIFI工作是否正常,输入如下命令:
ping -I 192.168.1.118 www.baidu.com
        如果ping成功的话结果如图70.4.2.3所示:
image066.jpg

图70.4.2.3 ping百度网站测试成功

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

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出16170入6148汤圆

发表于 2020-7-14 20:23:56 来自手机 | 显示全部楼层
打赏!

庆祝论坛“打赏”功能实施, 现在开始发技术主题,可以获得打赏
https://www.amobbs.com/thread-5735948-1-1.html
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 20:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表