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

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

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接口的简单使用,大家有什么经验欢迎多分享交流,可以在网页下方留言讨论

相关文章
|
8天前
|
Linux
Linux(5)WIFI/BT调试笔记
Linux(5)WIFI/BT调试笔记
26 0
|
27天前
|
JSON 机器人 Linux
推荐一款嵌入式Linux开源框架与封装-cpp-tbox
推荐一款嵌入式Linux开源框架与封装-cpp-tbox
54 3
|
2月前
|
Linux 开发工具 git
Linux嵌入式系统中如何使用U-Boot实例
Linux嵌入式系统中如何使用U-Boot实例
27 0
|
2月前
|
Linux Android开发
嵌入式linux中Framebuffer 驱动程序框架分析
嵌入式linux中Framebuffer 驱动程序框架分析
31 0
|
15天前
|
Linux 编译器 测试技术
嵌入式 Linux 下的 LVGL 移植
嵌入式 Linux 下的 LVGL 移植
|
15天前
|
Linux 开发工具
【ZYNQ】配置嵌入式 Linux 静态 IP 地址
【ZYNQ】配置嵌入式 Linux 静态 IP 地址
|
27天前
|
Linux API C语言
lua 如何在嵌入式Linux中与c语言结合
lua 如何在嵌入式Linux中与c语言结合
8 1
|
28天前
|
Linux
嵌入式Linux系统(NUC980)tf卡出错处理errors=remount-ro改为errors=continue
嵌入式Linux系统(NUC980)tf卡出错处理errors=remount-ro改为errors=continue
8 1
|
28天前
|
安全 Linux
嵌入式Linux系统关闭串口调试信息的输出
嵌入式Linux系统关闭串口调试信息的输出
23 1
|
28天前
|
Linux 编译器 网络安全
嵌入式Linux移植dropbear
嵌入式Linux移植dropbear
23 3

热门文章

最新文章