当前位置:首页 > 物联网 > 《物联网技术》杂志
[导读]摘 要:讨论了在嵌入式Linux下实现Wi-Fi接入的方法。在分析嵌入式Linux下无线网络驱动程序架构和无线网络的配 置工具 Linux Wireless Tools和wpa_supplicant的基础上,结合Tiny210开发板平台,通过实例介绍了在嵌入式Linux平台 上连接基于WPA/WPA2加密技术的Wi-F i连接点的原理和方法。

引言

Wi-Fi 也称为 WLAN (wireless local-area network,无线 局域网),是有线LAN的补充。Wi-Fi实际上是一个无线网络 通信技术的品牌,由Wi-Fi联盟持有,目的是改进基于IEEE 802.11标准的无线网路产品之间的互通性。随着Wi-Fi技术 的发展,产生了许多协议标准:IEEE 802.11.a WLAN标准使 用5 GHz ISM频段,支持最高54 Mb/s的速率;802.11b和 802.11g标准使用2.4 GHz频段,分别支持11 Mb/s和54 Mb/ s的速率。作为一种比较成熟的无线通信技术,Wi-Fi在嵌入 式设备中得到了广泛的应用,尤其是在嵌入式Linux环境中。 本文探讨了在嵌入式Linux环境下Wi-Fi技术的应用,首先 介绍了 Wi-Fi设备驱动程序的相关内容,然后介绍了一些嵌 入式Linux下无线网络配置工具及其特点,最后分析了嵌入式 Linux环境下通过Wi-Fi接入网络的方法。

1 Linux下Wi-Fi设备驱动程序

目前,Linux无线网络驱动程序的架构如图1所示:

嵌入式Linux下Wi-Fi接入技术研究

由图1可知,Linux无线驱动程序主要包括以下4个部分: 用户空间、cfg80211无线网络配置API、mac80211驱动程序 和非mac80211驱动程序,这几个部分组成了一种层次结构, 共同完成无线网络的接入和配置。

最底层是设备驱动程序层,包括mac80211和非mac80211两种驱动程序。mac80211是一种标准的驱动程 序框架,推荐未来的无线设备驱动程序采用此框架来编写。 mac80211驱动程序为上层提供了两种不同的接口 :Wext接口 (Wireless Extensions接口,Linux内核中为无线网络提供支 持的接口,是一种比较老的接口)和cfg80211 ops接口。其中 Wext接口为基于Wext接口的应用程序提供支持,而cfg80211 ops接口为上层cfg80211提供支持。而非mac80211驱动程序 是比较老的驱动程序,仅对Wext接口提供支持。

cfg80211下层使用mac80211驱动程序的接口,为上层 的应用程序提供标准的无线设备配置接口。nl80211是采用 cfg80211接口的应用程序库,有多种基于该应用程序库的无线 网络配置程序,例如 iw、crda、hostapd 和 wpa_supplicant (当 使用-Dnl80211选项时)。

个 WNIC (Wireless Network Interface Controller,无 线网络接口控制器)可以工作在以下几种模式下:

基站模式(STA)。任何无线设备驱动程序都可以在该模 式下工作,这种模式可以认为是默认模式。在该模式下工作 的网卡需要连接到一个在AP模式下工作的网卡。这种模式在 Wireless Extensions 配置工具下被成为 managed。

接入点模式(AP)。在接入点模式下工作的网卡又被称为 主设备。它通过管理和维护接入它的STA的列表来管理整个 无线网络。一个无线网络以AP的BSSID (Basic Service Set ID)命名。

监听模式(MON)。这是一个被动模式,工作在该模式下 的无线网卡只接收数据包,不会发送数据包。使用mac80211, 一个无线网卡在正常工作时也可以以监听模式工作,并且可以 发送数据包。

点对点模式(Ad-Hoc)。也被成为IBSS (Independent Basic Service Set)模式,用来在没有AP的情况下创建无线网

络。在该模式下,网络中的每个节点独立维护网络。

无线分布式系统模式(WDS)。该模式用来实现多个AP 之间的连接。

Mesh模式。该模式允许多个设备之间通过建立动态路由 来通信。

以上模式中,最为常用的是前两种模式。我们通常使用 的无线路由器其实就工作在AP模式下,我们可以通过使用手 机或者笔记本电脑连接到路由器,手机和笔记本电脑的无线 路由器就工作在STA模式下。

Wi-Fi网络的加密方式主要有 WEP (Wired Equivalent Privacy)、WPA (Wi-Fi Protected Access)和 WPA2 (即 WPA 的加强版)。WEP加密方式在同一个网络中的所有设备使用 相同的64 b或者128 b的密钥,安全性很低。因此现在一 般采用WPA加密方式。WPA又分为家用的WPA-PSK (PreShared Key)和企业用的WPA-Enterprise版本。WPA实现 了 IEEE 02.811i标准的大部分。WPA超越WEP的主要改进 就是在使用中可以动态改变密钥的“临时密钥完整性协定” (Temporal Key Integrity Protocol,TKIP),加上更长的初向量, 这可以击败知名的针对WEP的密钥撷取攻击。WPA2与 WPA的差别在于,它使用更安全的加密技术AES (Advanced Encryption Standard),因此比WPA更难被破解、更安全。

2 Wi-Fi配置工具

Linux下比较常用的无线网络配置工具主要有Linux Wireless Tools 和 wpa_supplicant。Linux Wireless Tools 是一 种比较老的无线网络配置工具。wpa_supplicant主要用来支持 WPA和 WPA2,而Linux Wireless Tools不提供支持。与运 行于内核空间的驱动程序不同,这两个工具都是运行在用户空 间的软件。

Linux 无线工具(Linux Wireless Tools)

无线扩展(Wireless Extension)定义了一组驱动程序提 供给应用程序的通用的API,使用基于该API的工具集可以 实现对任意无线网卡的配置,并且可以在不重启驱动程序的 情况下修改配置参数。无线工具集主要包括iwconfig、iwlist、 iwspy、iwpriv和ifrename。iwconfig可以修改最基本的网络 参数。iwlist可以扫描并列举频率、位速率和加密方式。iwspy 可以获取一个节点的连接质量。iwpriv可以针对特定的无线网 卡驱动程序进行操作。ifrename可以基于各种动态标准对接 口命名。

wpa_supplicant

wpa_supplicant在使用时作为一个后台进程运行,用来 控制无线连接,可以认为是一个服务进程。wpa_supplicant 的设计目标是对所有的WPA功能使用与硬件、驱动程序 和操作系统无关的C代码。其他的程序作为客户端进程与 wpa_supplicant 通 信,向 wpa_supplicant 发送 命令。wpa_ supplicant源代码中提供了 wpa_cli( 一个文本界面的命令程序) 和wpa_gui (一个图形界面的程序)作为客户端程序与wpa_ supplicant通信。当wpa_supplicant作为后台进程运行时,就 可以使用这两个工具来控制无线连接。

3嵌入式Linux下Wi-Fi连接的实现

嵌入式Linux下实现Wi-Fi连接,主要包括以下几个步骤:

移植相应无线网卡的驱动程序;

移植 Linux Wireless Tools 和 wpa_supplicant工具;

使用 Linux Wireless Tools 和 wpa_supplicant工具配 置Wi-Fi连接。

本文使用的开发平台是有善之臂的Tiny210,使用的无线 网络芯片是具有SDIO接口的Marvell8686,采用busybox构 建了基本的根文件系统。

加载无线网卡设备驱动程序

友善之臂提供了已经编译好的Marvell8686驱动程 序模块,在其提供的跟文件系统的/lib/modules/3.0.8- FriendlyARM/目录下有已经编译好的Linux驱动程序模块, 将该目录拷贝到自己构建的跟文件系统目录下。在此之前,确 保开发板烧写的Linux内核版本为3.0.8,以保证驱动程序模 块版本与内核版本一致。在/etc/init.d/rcS启动脚本中添加如 下命令:

modprobe libertas_sdio 2>/dev/null

以上命令的作用是在系统启动时,加载l ibertas_sdio模块。 使用该命令在加载内核模块时不需要指明模块的路径,它会自 动从/lib/modules目录下寻找合适的驱动加载。

对于其他的无线网卡驱动程序,加载的方法是类似的, 也可以先编译出内核模块,用insmod命令加载。

移植 Linux Wireless Tools工具

下载Linux Wireless Tools并解压,修改Makefile文件,将 gcc、ar、ranlib 分 别U 修改为 arm-linux-gcc、arm-linux-ar、arm- linux-ranlib。使用make命令编译,编译完成后,将libiw.so.29拷 贝到根文件系统lib目录下,将编译生成的iwevent、ifrename、 iwconfig、iwlist、iwpriv、iwspy拷贝到根文件系统的/bin目录下。

移植 wpa_supplicant

wpa_supplicant 需使用 OpenSSL 库。OpenSSL 是—个 强大的安全套接字层密码库,囊括主要的密码算法、常用的 密钥和证书封装管理功能及SSL协议,并提供丰富的应用程 序供测试或其它目的使用。

首先下载 wpa_supplicant-0.7.3 和 openssl-0.9.8e,解压源 码包,将wpa_supplicant中的openssl补丁拷贝到openssl源码目录下。

cp wpa_supplicant-0.7.3/patches/openssl-0.9.8e-tls- extensions.patch openssl-0.9.8e/

建立目录/usr/local/ssl,以保存编译好的openssl库。

cd openssl-0.9.8e,进入源码目录,修改Makefile文件, 修改如 下 变量:CC= arm-linux-gnu-gcc ; AR= arm-linux- gnu-ar $ (ARFLAGS) r ; RANLIB= arm-linux-gnu-ranlib ; INSTALLTOP=/usr/local/ssl ; OPENSSLDIR=/usr/local/sslo 执行make, make install命令,可以在/usr/local/ssl目录下生 成openssl库文件,这些库文件是静态库文件。

编译wpa_supplicant方法如下:将源码目录下的 defconfig文件重命名为.config文件。修改.config文件: CC= arm-linux-gnu-gcc -L/usr/local/ssl/lib/ (连接静态库); CFLAGS += -I/usr/local/ssl/include/ ; LIBS += -L/usr/local/ ssl/lib/。执行make命令编译,即可在源码目录下生成可以在 开发板上运行的wpa_supplicant程序,包括 wpa_cli、wpa_ passphrase> bin/wpa_supplicant等,将这些程序拷贝到开发 板的/bin目录下。

(4)搜索和连接无线网络

要搜索无线网络,最简单的是使用Linux Wireless Tools 工具。使用Linux无线工具配置Wi-Fi网络的主要步骤如下:

查看可用的无线网卡:iwconfig ;

启用无线网卡:ifconfig wlan0 up ;

列举无线网络:iwlist wlan0 scan,可以扫描到周围的 AP。

使用Linux Wireless Tools工具只能连接WEP加密的网 络,无法连接WPA/WPA2加密的网络。通常使用该工具对无 线网络进行简单的配置,如扫描和启动无线网卡等。

wpa_supplicant是作为一个服务程序运行的。在启动 wpa_supplicant 时,需要一个 wpa_supplicant.conf 配置文件, 该文件指明了要连接的AP的ESSID和连接密钥等信息。釆 用如下命令可以根据明文密码创建暗文密码:

wpa_passphrase FAST_555B30 417417417

以上命令的含义是要连接的ESSID为FAST_555B30,这 个是通过扫描得到的。417417417是要连接的明文密码。生成 的psk显示如下:

Psk=b461ee0209a9b5a6f114317e9ae72f52829b5f743e47a60 0b7a08911cc3bd30f

对于不同的加密方式,wpa_supplicant.conf的内容也 不一样。FAST_555B30使用的是WPA2加密方式,wpa_ supplicant.conf 文件如下:

# WPA-PSK/TKIP

ctrl_interface=/var/run/wpa_supplicant

network={

ssid=" FAST_555B30”

key_mgmt=W PA- PSK

proto=WPA2 pairwise=CCMP

Psk=1512bf80a15b8b595522e18cf3a51db47d5084da9565ad3

8ffec9ab1da37a108

}

其中,ctrl_interface指明了控制接口路径,wpa_cli等 程序可能使用该路径来与wpa_supplicant通信。ssid和 psk指明了要连接的AP及其暗文密码。key_mgmt指明了 密钥管理方式。如果是WPA2方式加密的,proto=WPA2, pairwise=CCMPo

釆用如下命令可以启动wpa_supplicant服务进程:

wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant. conf &

-D选项指明了釆用的驱动程序接口,这里是Wext接口。-i 选项指明了无线网络接口名称。-c选项指示使用的配置文件。 启动了 wpa_supplicant命令,就可以连接到WPA2加密的无 线网络,如果要使用DHCP动态获取IP地址,可以釆用如下 命令:

udhcpc -i wlan0

udhcpc是busybox中包含的DHCP客户端 工具。也可 以直接使用ifconfig命令配置静态IP地址,例如:ifconfig wlan0 192.168.0.10。

4结语

本文在分析现有的Linux下的无线网络驱动程序框架 和常用无线网络配置应用程序的基础之上,通过实例介绍了 Linux下Wi-Fi连接的方法。实际测试表明,该方法可以有效 实现嵌入式Linux下的Wi-Fi网络接入,对于嵌入式Linux下 的Wi-Fi应用开发有一定的参考意义。

20211223_61c34d57732c5__嵌入式LinuxKWi

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

全球智能城市运动代表着城市环境设计、体验和导航方式的重大转变。这一重大变革部分是由数字化转型和物联网(IoT)技术推动的,这些技术正在将城市基础设施和城市景观重塑为智能连接中心。这一趋势的核心是符合智能城市独特需求的先进...

关键字: 数字化转型 物联网 Wi-Fi

以下内容中,小编将对宽带和WiFi的区别的相关内容进行着重介绍和阐述,希望本文能帮您增进对宽带和WiFi的了解,和小编一起来看看吧。

关键字: 宽带 Wi-Fi

Wi-Fi,全称为Wireless Fidelity,是一种在全球范围内广泛应用于各类电子设备间无线网络连接的技术。Wi-Fi技术始于20世纪90年代末期,由Wi-Fi联盟(Wi-Fi Alliance)开发并推广,旨在...

关键字: Wi-Fi 无线网络

随着科技的飞速发展,物联网(IoT)技术已经逐渐渗透到我们生活的方方面面。在这个智能化的世界里,各种设备需要通过无线通信技术实现互联互通。而蓝牙网关作为其中的一种重要技术,正扮演着连接物联网世界的桥梁角色。本文将深入探讨...

关键字: 蓝牙网关 Wi-Fi

随着科技的日新月异,无线网络技术也在不断发展与演进。作为现代生活的重要组成部分,WiFi技术经历了从第一代到第五代的演变。本文将重点探讨第四代(WiFi 4)和第五代(WiFi 5,即802.11ac)WiFi技术的区别...

关键字: Wi-Fi 无线网络

随着5G技术的不断发展和商用化进程的推进,越来越多的用户开始体验到了5G网络带来的高速和低延迟优势。然而,也有部分用户反映,他们使用的5G网络速度并没有比4G快多少,甚至有时还不如4G。这究竟是什么原因导致的呢?本文将围...

关键字: 5G 4G 无线网络

随着无线网络的普及和智能家居设备的增多,路由器的性能与设置逐渐成为我们日常生活关注的焦点。在无线路由器的设置中,信道选择是一个重要且容易被忽视的环节。正确的信道选择不仅能提升网络速度,还能减少信号干扰,提高网络稳定性。本...

关键字: 路由器 无线网络

在下述的内容中,小编将会对路由器的相关消息予以报道,如果路由器是您想要了解的焦点之一,不妨和小编共同阅读这篇文章哦。

关键字: 路由器 Wi-Fi

在现实条件下,通过 sub-GHz Wi-Fi HaLow 信号远程视频通话距离达传统 Wi-Fi 的 十倍以上

关键字: Wi-Fi 物联网

Wi-Fi HaLow是物联网连接的未来

关键字: Wi-Fi 物联网 路由器
关闭