Linux 驱动开发之WIFI设备分析2(基于Linux6.6)---简要介绍
WiFi模块是一种用于提供无线局域网(WLAN)连接的硬件组件,它允许设备通过Wi-Fi网络进行通信。WiFi模块通常集成了WiFi功能,使得嵌入式设备或物联网(IoT)设备能够与互联网或本地局域网(LAN)进行无线数据传输。
WiFi模块通常包含以下几个主要组成部分:
WiFi模块通过无线电波与路由器或无线接入点(AP)进行通信。其工作流程一般如下:
WiFi模块的芯片平台通常决定了其性能、功能以及与其他硬件的兼容性。常见的芯片平台有:
WiFi模块可以根据其功能特性分为以下几类:
基本WiFi模块:这些模块仅提供WiFi连接功能,适用于简单的联网任务,如ESP8266、ESP32等。这类模块通常包括基本的WiFi协议栈,用于设备与路由器或接入点(AP)的通信。
带处理器的WiFi模块(WiFi SoC):这些模块不仅提供WiFi连接,还集成了微控制器(MCU)功能。常见的例子如ESP32,它除了WiFi功能外,还可以进行数据处理和控制任务,适合较为复杂的应用。
WiFi扩展模块:这类模块通常作为附加模块,通过SPI、UART等接口与主控制器(如Arduino或树莓派)连接,为主控制器提供WiFi连接能力。常见的有ESP8266 WiFi Shield、Arduino WiFi Shield等。
WiFi模块可以根据其工作模式分类,这通常与设备的使用场景和应用需求相关:
站点模式(Station Mode, STA):在这种模式下,WiFi模块作为客户端连接到已有的Wi-Fi网络(如家庭路由器)。大多数WiFi模块默认使用站点模式。
接入点模式(Access Point Mode, AP):在接入点模式下,WiFi模块本身充当一个无线热点,其他设备可以连接到该热点。这种模式常见于无线设备之间的点对点通信,或者在没有外部路由器时使用。
混合模式(SoftAP+STA模式):在这种模式下,WiFi模块既能作为客户端连接到现有Wi-Fi网络,同时也能作为无线接入点,允许其他设备通过Wi-Fi连接到它。这种模式常用于设备之间的局部网络。
根据Wi-Fi模块支持的传输速率不同,也可以将其分为以下几类:
低速模块:支持802.11b协议的WiFi模块,通常用于简单的数据传输和控制应用。这类模块的速率较低,约为11 Mbps。例如,部分老旧的WiFi模块可能仅支持这一协议。
中速模块:支持802.11g协议的WiFi模块,传输速率较高,约为54 Mbps,适用于一般的数据传输和流媒体应用。
高速模块:支持802.11n或更高协议的WiFi模块(如802.11ac/ax),支持更高的传输速率(可达数百兆比特或千兆比特),适合高清视频流、快速数据传输和大规模的设备连接等高带宽需求的应用。
WiFi模块还可以按具体的应用场景进行分类,常见的应用包括:
物联网(IoT)WiFi模块:这类模块通常用于低功耗、短距离通信的场景。它们广泛应用于智能家居、环境监测、传感器、智能穿戴设备等IoT产品中,典型代表如ESP8266、ESP32等。
工业级WiFi模块:这类模块通常用于工业自动化、远程监控等场景,要求高稳定性、长距离和抗干扰能力。它们可能具有更强的抗噪声能力和更高的传输稳定性。
嵌入式WiFi模块:用于各种嵌入式设备中,如自动售货机、智能仪表、远程控制系统等,这类模块通常兼具小体积和强大的集成能力。
WiFi模块根据功耗的不同,可以分为以下几类:
低功耗WiFi模块:适用于电池供电的设备,如可穿戴设备、传感器节点等。ESP8266和ESP32都有低功耗模式,适合这类应用。
普通功耗WiFi模块:适用于一般的家庭和办公环境中,电源通常来自于稳定的电源适配器,不太需要过多关注功耗。
WiFi模块还可以按支持的WiFi标准进行分类:
802.11b/g/n模块:这些模块支持较为基础的Wi-Fi标准,传输速度较低,适用于一般的家庭和小型应用。
802.11ac/ax模块:这些模块支持更高速的Wi-Fi标准,适用于高清视频流、大文件传输和高带宽应用,适合现代家庭和办公环境。
针对嵌入式WIFI与普通WIFI来进行对比:
|
嵌入式WIFI模块 |
普通WIFI模块 |
适用范围 |
无线家电、仪表、智能灯泡等智能家居设备 |
笔记本、手机、平板电脑等 |
主控芯片 |
模块上集成的MCU |
x86 CPU、ARM等高速微处理器 |
接口 |
UART、SPI、I2C、SDIO |
USB、SDIO |
功耗 |
低 |
高 |
产品 |
TI的CC3200系列、MXCHIP系列、ASIX系列 、Atheros的HF-LPA系列等 |
瑞昱RTL81xx系列、威盛VT系列、雷凌RT系列、 博通BCM、Marvell、高通Atheros等 |
开发设计 |
内置WIFI驱动、MAC、WIFI协议、无线安全协议等, 所有的网络软件封装成一个UART或SPI接口的设备, 使用简单,只需要往UART或者SPI收发数据即可。 从整体软件层面上看,不属于网络设备。 |
需要在主机添加WIFI驱动、同时需要依赖主机的网络协议栈等软件平台资源, 从整体软件层面上看,属于网络设备,使用时需要遵循网络相关的协议。 |
USB接口控制器
WiFi芯片(无线通信模块)
天线接口
电源管理模块
数据处理与协议栈
控制接口
驱动和固件
|----------------------------|
| USB接口控制器 |<----->| 主机 (PC/嵌入式) |
|----------------------------| |--------------------------|
| |
v v
|----------------------------| |---------------------------|
| 电源管理模块 | | WiFi协议栈、驱动 |
|----------------------------| |---------------------------|
| |
v v
|----------------------------| |---------------------------|
| WiFi芯片 | | 网络连接 |
| (包含RF、Baseband、处理器) |----->| 数据处理/传输 |
|----------------------------| |---------------------------|
| |
v v
|----------------------------| |---------------------------|
| 天线接口 |<----->| 无线信号传输与接收 |
|----------------------------| |---------------------------|
Wifi 模块 包括两种类型的拓扑形式:基础网(Infra)和自组网(Adhoc),要说明无线网络的拓扑形式,首先要了解两个基本概念:
a -- AP
也就是无线接入点,是一个无线网络的创建者,是网络的中心节点。一般家庭或办公室使用的无线路由器就是一个AP。
b -- STA站点
每一个连接到无线网络中的终端(如笔记本电脑、PDA及其它可以联网的用户设备)都可称为一个站点。
1、基于AP组建的基础无线网络(Infra)
Infra:也称为基础网,是由AP创建,众多STA加入所组成的无线网络,这种类型的网络的特点是AP是整个网络的中心,网络中所有的通信都通过AP来转发完成。
附:
AP是将wifi模块当路由器使用,这样手机和电脑就可以直接连接wifi模块了。
Infra 是将wifi模块当基础设备使用,用于连接别的路由器。
2、基于自组网的无线网络(Adhoc)
Adhoc:也称为自组网,是仅由两个及以上STA自己组成,网络中不存在AP,这种类型的网络是一种松散的结构,网络中所有的STA都可以直接通信。
3、安全机制
本模块支持多种无线网络加密方式,能充分保证用户数据的安全传输,包括:WEP64/WEP128/ TKIP/CCMP(AES) WEP/WPA-PSK/WPA2-PSK。
4、快速联网
本模块支持通过指定信道号的方式来进行快速联网。在通常的无线联网过程中,会首先对当前的所有信道自动进行一次扫描,来搜索准备连接的目的AP创建的(或Adhoc)网络。本模块提供了设置工作信道的参数,在已知目的网络所在信道的条件下,可以直接指定模块的工作信道,从而达到加快联网速度的目的。
5、地址绑定
本模块支持在联网过程中绑定目的网络BSSID地址的功能。根据802.11协议规定,不同的无线网络可以具有相同的网络名称(也就是SSID/ESSID),但是必须对应一个唯一的BSSID 地址。非法入侵者可以通过建立具有相同的SSID/ESSID的无线网络的方法,使得网络中的STA联接到非法的AP上,从而造成网络的泄密。通过BSSID地址绑定的方式,可以防止STA 接入到非法的网络,从而提高无线网络的安全性。
6、无线漫游
本模块支持基于802.11协议的无线漫游功能。无线漫游指的是为了扩大一个无线网络的覆盖范围,由多个AP共同创建一个具有相同的SSID/ESSID的无线网络,每个AP用来覆盖不同的区域,接入到网络的STA可以根据所处位置的选择信号最强的AP接入,而且随着STA的移动自动在不同的AP之间切换。
1、主动型串口设备联网
主动型串口设备联网指的是由设备主动发起连接,并与后台服务器进行数据交互(上传或下载)的方式。典型的主动型设备,如无线POS机,在每次刷卡交易完成后即开始连接后台服务器,并上传交易数据。PUSH型串口设备联网的拓扑结构如右图所示。其中,后台服务器作为TCP Server端,设备通过无线AP/路由器接入到网络中,并作为TCP Client端。
2、被动型串口设备联网
被动型串口设备联网指的是,在系统中所有设备一直处于被动的等待连接状态,仅由后台服务器主动发起与设备的连接,并进行请求或下传数据的方式。典型的应用,如某些无线传感器网络,每个传感器终端始终实时的在采集数据,但是采集到的数据并没有马上上传,而是暂时保存在设备中。
在 Linux 中,WiFi 模块可以工作在不同的模式,以下是几种常见的工作模式:
Managed
模式(客户端模式):
Managed
模式下,设备需要通过 SSID 扫描并选择网络,并使用 WPA 或 WPA2 进行安全认证。Access Point
模式(接入点模式):
Ad-hoc
模式:
Monitor
模式:
Wireshark
、airmon-ng
等工具进行嗅探)。Mesh
模式:
在 Linux 系统中,WiFi 连接的管理通常通过以下工具和服务来实现:
wpa_supplicant
:
wpa_supplicant
是 Linux 中用于管理 WiFi 连接的核心工具,支持 WPA 和 WPA2 加密协议。它负责连接到 WiFi 网络,处理身份验证过程。/etc/wpa_supplicant/wpa_supplicant.conf
用于设置连接的 SSID、加密方式等信息。NetworkManager
:
NetworkManager
是一个管理 Linux 系统中网络连接的工具,它能够处理有线和无线网络接口的配置。NetworkManager
提供了一个更友好的界面来管理网络连接,支持 GUI、CLI(nmcli
)、D-Bus API 等。iw
和 iwconfig
:
iw
是一个现代的无线配置工具,用于显示和配置无线设备。它通常用于扫描无线网络、设置信道等。iwconfig
是旧版的无线配置工具,功能类似,但有些较新的 Linux 发行版已经不再推荐使用它。ifconfig
和 ip
:
连接到网络: 使用 wpa_supplicant
或 NetworkManager
,你可以配置 WiFi 连接。通常,用户需要提供 SSID 和密码来连接到加密的 WiFi 网络。
扫描可用网络: 使用 iw dev wlan0 scan
可以扫描周围可用的 WiFi 网络,并获取 SSID、信号强度、加密类型等信息。
查看连接状态: 使用 iwconfig
或 nmcli
命令来查看当前的 WiFi 连接状态,显示已连接的网络名称(SSID)、信号强度、传输速率等信息。
1.通过 wpa_supplicant
配置:
编辑 /etc/wpa_supplicant/wpa_supplicant.conf
文件,添加你的网络配置:
network={
ssid="YourSSID"
psk="YourPassword"
}
启动 wpa_supplicant
:
sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
获取 IP 地址:
sudo dhclient wlan0
2.使用 nmcli
(NetworkManager CLI):
nmcli device wifi list
nmcli device wifi connect "YourSSID" password "YourPassword"