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

相关文章
|
5月前
|
消息中间件 存储 缓存
【嵌入式软件工程师面经】Linux系统编程(线程进程)
【嵌入式软件工程师面经】Linux系统编程(线程进程)
122 1
|
12天前
|
监控 数据可视化 Ubuntu
|
5月前
|
网络协议 算法 Linux
【嵌入式软件工程师面经】Linux网络编程Socket
【嵌入式软件工程师面经】Linux网络编程Socket
156 1
|
3月前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
|
3月前
|
传感器 人工智能 网络协议
:嵌入式 Linux 及其用途
【8月更文挑战第24天】
157 0
|
4月前
|
Ubuntu 算法 Linux
嵌入式Linux的学习误区
**嵌入式Linux学习误区摘要** 1. **过度聚焦桌面Linux** - 许多学习者误将大量时间用于精通桌面Linux系统(如RedHat、Fedora、Ubuntu),认为这是嵌入式Linux开发的基石。 - 实际上,桌面Linux仅作为开发工具和环境,目标不应是成为Linux服务器专家,而应专注于嵌入式开发工具和流程。 2. **盲目阅读Linux内核源码** - 初学者在不了解Linux基本知识时试图直接研读内核源码,这往往导致困惑和挫败感。 - 在具备一定嵌入式Linux开发经验后再有针对性地阅读源码,才能有效提升技能。
|
5月前
|
消息中间件 安全 Java
【嵌入式软件工程师面经】Linux多进程与多线程
【嵌入式软件工程师面经】Linux多进程与多线程
62 1
|
5月前
|
存储 缓存 Unix
【嵌入式软件工程师面经】Linux文件IO
【嵌入式软件工程师面经】Linux文件IO
47 1
|
网络协议 Linux Shell
Linux使用adb命令连接WiFi进行无线调试
Linux使用adb命令连接WiFi进行无线调试
602 0
Linux使用adb命令连接WiFi进行无线调试
|
12天前
|
运维 安全 Linux
Linux中传输文件文件夹的10个scp命令
【10月更文挑战第18天】本文详细介绍了10种利用scp命令在Linux系统中进行文件传输的方法,涵盖基础文件传输、使用密钥认证、复制整个目录、从远程主机复制文件、同时传输多个文件和目录、保持文件权限、跨多台远程主机传输、指定端口及显示传输进度等场景,旨在帮助用户在不同情况下高效安全地完成文件传输任务。
104 5