嵌入式Linux系列第9篇:使用WIFI

2021-05-31 10:37:58 浏览数 (1)

1 引言

随着物联网的蓬勃发展,WIFI被广泛的应用在各种嵌入式系统中。WIFI一般有两种工作模式,一个是工作在AP模式下,另外一个是Station模式。以你的手机WIFI为例,你最经常使用的功能是去连接某个WIFI热点上网,这时它工作在Station模式下。有时你也会共享个热点,让自己的手机被其他手机连接上网,这时就是工作在AP模式下。本篇以Realtek USB接口的RTL8188 WIFI模块为例,对Linux下WIFI使用做个简单总结,希望对大家有所帮助。

2 环境介绍

2.1.硬件

1) 网上的一个第三方做的NUC972开发板:

有兴趣购买的朋友,可以去他们的淘宝店购买:

https://s.click.taobao.com/X8mza8w

2) WIFI模块,

https://s.click.taobao.com/Lbx7e5w

3) 1根USB转RS232线、1根网线、1根电源线、1根Micrco USB线,下载和调试使用。

2.2.软件

1) Uboot继续使用之前文章用的,无需改动。

2) Kernel在上一篇基础上,要做一定的修改

3) Rootfs在上一篇用Buildroot生成的基础上,要做一定的修改,用来支持

iwconfig、iwlist、udhcpc、udhcpd指令。官网提供了wireless_tool 源代码https://github.com/OpenNuvoton/NUC970_Linux_Applications/tree/master/wireless_tools.29 编译这个也可以生成iwconfig、iwlist指令,但是因为我们用Buildroot,所以直接在Buildroot里做就可以了。

4) WIFI模块驱动源码rtl8188.tar.gz,这个是由WIFI模块厂家提供的

https://github.com/lwfinger/rtl8188eu

5) hostapd 源码,把wifi设置为AP模式需要用这个。Buildroot也可以生成,但是用起来有点问题,我没有解决,猜测是版本兼容性问题,这里没有深入研究。

6)交叉工具链arm_linux_4.8.tar.gz,还是之前使用的不变

7)上一节我们把Vmvare虚拟机网络模式做了改动,这里我们要改回去,如果是虚拟机开启的情况下修改的,改完后要重启下虚拟机。然后保证可以ping通外网,不然buildroot没法使用了。因为Buildroot需要联网的。

3 内核配置

• TCP/IP设置

• WIFI无线网络设置和外部WIFI 驱动使能

• USB Host 设置

要支持 USB Host, 请先勾选打开 USB Host 端支持。NUC970 USB Host包含EHCI(USB2.0)及OHCI(USB1.1)两个USB Host控制器,必须同时打开。以下所列之项目都全部勾选上:

• 挂载和卸载模块支持设置

这样是为了将WIFI模块的驱动编译成模块后被insmod[模块名称]来加载和通过rmmod[模块名称]来卸载

4 Buildroot配置

• Wireless tools 配置

Wireless tools for Linux是一个Linux命令行工具包,用来设置支持Linux Wireless

Extension的无线设备。

Wireless Tools包括以下工具:

iwconfig:设置基本无线参数

iwlist:扫描、列出频率,比特率,密钥等

iwspy:获取每个节点链接的质量(只能查阅不之相连的节点)

iwpriv:操作Wireless Extensions 特定驱劢

ifrename:基于各种静态标准命名接口

我们这里用到iwconfig,iwlist

进入到Buildroot目录,输入make menuconfig进入到配置界面,勾选上wireless tools。

• hostapd配置

hostapd 是一个用户态用于AP和认证服务器的守护进程。它实现了IEEE 802.11相关的接入管理,IEEE 802.1X/WPA/WPA2/EAP 认证, RADIUS客户端,EAP服务器和RADIUS 认证服务器。

• wpa_supplicant

wpa_supplicant是一个连接、配置WIFI的工具,它主要包含wpa_supplicant与wpa_cli两个程序。通常情况下,可以通过wpa_cli来进行WIFI的配置与连接,如果有特殊的需要,可以编写应用程序直接调用wpa_supplicant的接口直接开发。

注意:iwconfig工具只能支持开放网络和具有WEP加密的无线网络;

如果需要支持WPA或WPA2 PSK加密的无线网络,需要安装wpa_supplicant。

• Busybox配置

使用下面命令来调用busybox的menuconfig:

make busybox-menuconfig

选中udhcpd和udhcpc:

以上配置完之后,编译即可。

5 驱动编译

进入到wifi驱动所在路径,make编译即可,生产8188eu.ko文件,将其放入板子里注意要修改它的可执行权限。

6 WIFI使用

6.1.做Station连接AP

1) 将上述生成的新的内核、根文件系统下载到板子里,把8188eu.ko文件放到/usr/目录下。

insmod /usr/8188eu.ko

驱动加载成功.

lsmod可以用来查看已经加载的驱动

如果要卸载掉该驱动,使用rmmod 8188eu.ko即可。

输入ifconfig -a可以看到

但是输入ifconfig是看不到这个的,因为ifconfig只显示激活状态的网络设备信息,ifconfig -a显示的是全部接口信息。

2) 开启无线网卡,输入:

ifconfig wlan0 up

出现wlan网卡相关信息,说明wifi模块驱动编译加载成功了。

3) 输入下面命令,搜索当前环境下热点的信息

iwlist wlan0 scanning

我用的自己华为手机开一个wifi热点,设置为不加密网络:

4) 输入下面命令,连接到手机热点上,

iwconfig wlan0 essid "Honor 8"

连接成功之后,一是我们在手机上可以看到有设备连入,另外在板子上输入iwconfig也可以看到相应的接入信息。

5) 执行下面命令,动态生成IP地址

udhcpc -i wlan0

6) 最后就可以上外网了:

ping www.topsemic.com

如果用的默认的加密方式:

因为网络是加密的,密码是12345678,那么就输入命令

iwconfig wlan0 essid "Honor 8" key 1234-5678

也可以连接上,但是udhcpc时一直不成功,我之前就在这里卡了好多天。

wpa_supplicant支持wpa/wpa2加密方式,由于时间关系,暂时先不研究了,后面再补充。

6.2.做AP被Station连接

1) 加载驱动模式,insmod /usr/8188eu.ko

2) 打开无线网卡,ifconfig wlan0 up

3) 使用udhcpd自动分配ip功能

udhcpd -f /etc/udhcpd.conf &

其中udhcpd.conf需要自己新建,内容如下:

# Sample udhcpd configuration file (/etc/udhcpd.conf)

# Values shown are defaults

start 192.168.2.20

end 192.168.2.254

interface wlan0

opt dns 192.168.10.2 192.168.10.10

option subnet 255.255.255.0

opt router 192.168.10.2

opt wins 192.168.10.10

option dns 129.219.13.81 # appened to above DNS servers for a total of 3

option domain local

option lease 864000 # 10 days of seconds

会遇到一个错误,提示Unable to open /var/lib/misc/udhcpd.leases for reading. 解决方法是直行下面两条命令:

mkdir -p /var/lib/misc/ touch /var/lib/misc/udhcpd.leases

4) 创建AP

hostapd -B /etc/ rtl_hostapd.conf -d

一开始老不成功,

后来重新断电板子、插拔了一下WIFI模块,就可以了。

手机连接上之后,可以ping通。

7 结束语

本篇为大家介绍了Linux下wifi接口的简单使用,大家有什么经验欢迎多分享交流,可以在网页下方留言讨论,或者发邮件:Topsemic@sina.com ,微信公众号如下,欢迎关注:

本期相关的资料在链接: https://github.com/TopSemic/NUC972_Linux 中

8 参考资料

本篇参考了网上大量的文章,感谢广大网友的贡献

1) https://blog.csdn.net/wsclinux/article/details/52095582

2) https://www.linuxidc.com/Linux/2011-10/44885.htm

3) https://www.zybuluo.com/SiberiaBear/note/424840

4) https://www.twblogs.net/a/5bf71833bd9eee18cf8a9c7d/zh-cn

5) https://www.ibm.com/developerworks/cn/linux/l-wifiencrypthostapd/

6) https://blog.csdn.net/strugglelg/article/details/18987053

7)https://unix.stackexchange.com/questions/400101/how-to-get-the-wifi-working-with-r8188eu-driver-on-my-raspberry-pi

0 人点赞