OpenWIFI项目架构与核心功能解析
项目概述
OpenWIFI是一个开源的软件定义无线电(SDR)Wi-Fi实现项目,它通过FPGA和Linux驱动实现了完整的IEEE 802.11协议栈。该项目将传统Wi-Fi芯片的硬件功能通过软件和可编程逻辑实现,为无线通信研究提供了高度灵活的平台。
系统架构解析
OpenWIFI系统由软件和硬件/FPGA两大模块组成,下图展示了其详细架构:
主要功能模块
- 驱动模块:位于openwifi/driver/目录下,实现Linux mac80211子系统接口
- FPGA模块:包括rx_intf、tx_intf、openofdm_rx、openofdm_tx和xpu等核心组件
- 用户空间工具:sdrctl程序位于openwifi/user_space/sdrctl_src/
系统通过sysfs文件系统提供用户空间与驱动通信的接口,将驱动变量映射为虚拟文件。
驱动与软件原理
OpenWIFI驱动(sdr.c)实现了Linux mac80211子系统定义的一系列API(ieee80211_ops),主要包括:
关键API实现
-
数据收发控制:
tx
:上层有数据包要发送时调用start/stop
:网络接口启用/停用时调用add_interface/remove_interface
:网络接口创建/删除时调用
-
无线参数配置:
config
:改变信道/频率时调用(如扫描操作)set_antenna/get_antenna
:天线选择控制bss_info_changed
:BSS参数变更时调用(BSSID、发射功率等)conf_tx
:配置发送参数(AIFS、CW_MIN等)
-
底层控制:
configure_filter
:配置FPGA中的帧过滤规则get_tsf/set_tsf/reset_tsf
:FPGA定时器控制ampdu_action
:AMPDU相关操作testmode_cmd
:处理测试命令
数据流处理机制
-
接收流程:
- FPGA从空中接收数据包并触发中断
- 驱动调用
openwifi_rx_interrupt()
处理 - 通过
ieee80211_rx_irqsafe()
将数据包及元信息(时间戳、RSSI等)传递给上层
-
发送流程:
- 上层通过驱动发送数据包
- FPGA发送完成后触发
openwifi_tx_interrupt()
- 通过
ieee80211_tx_status_irqsafe()
报告发送结果
sdrctl命令详解
sdrctl是OpenWIFI提供的专用控制工具,可实现以下功能:
基本参数操作
# 获取参数值
sdrctl dev sdr0 get para_name
# 设置参数值
sdrctl dev sdr0 set para_name value
常用参数包括:
slice_idx
:网络切片索引(0-3)addr
:目标MAC地址slice_total
:发送周期长度(微秒)tsf
:设置TSF值(需高低32位两个值)
寄存器操作
# 读取寄存器
sdrctl dev sdr0 get reg module_name reg_idx
# 写入寄存器
sdrctl dev sdr0 set reg module_name reg_idx reg_value
主要模块寄存器说明
-
驱动模块(drv_rx/drv_tx/drv_xpu):
- 接收灵敏度阈值
- 天线选择
- 速率控制覆盖
- LBT/CCA阈值
-
RF前端模块(rf):
- 发射衰减(dB*1000)
- 发射/接收频率(MHz)
-
接收接口(rx_intf):
- 中断控制
- 环路回测试配置
- DMA控制
- 数字增益设置
-
发送接口(tx_intf):
- CTS自配置
- CSI模糊器配置
- 队列状态监控
- 天线选择与CDD控制
-
OFDM收发模块(rx/tx):
- 信道估计平滑控制
- 功率触发阈值
- 加扰器初始状态
-
XPU模块:
- TSF定时器控制
- CSMA引擎配置
- ACK控制
- AMPDU处理
关键功能实现
接收流程与过滤配置
接收数据包时,FPGA会根据配置的过滤规则决定是否触发中断。过滤规则通过configure_filter
API配置,支持以下过滤类型:
- 控制帧过滤
- 管理帧过滤
- 数据帧过滤
- 多播/广播过滤
- 探测请求过滤
发送流程与配置
发送流程支持多种高级功能:
- 速率控制:可覆盖Linux默认速率选择
- 天线选择:支持多天线配置
- 队列管理:实时监控FPGA发送队列状态
- 时序控制:精确控制发送时序
时间戳处理
OpenWIFI提供精确的时间戳功能:
- 64位FPGA定时器(TSF)
- 接收/发送时间戳记录
- 时间同步功能
频率配置
支持灵活的射频配置:
- 模拟/数字频率设计
- 信道切换
- 法规遵从性配置
调试方法
OpenWIFI提供多种调试手段:
- 寄存器调试:通过sdrctl读写寄存器
- 日志控制:调整驱动打印级别
- 状态监控:读取各模块状态寄存器
- 测试模式:特殊测试功能支持
应用场景
OpenWIFI适用于以下场景:
- 无线通信协议研究
- 物理层算法验证
- 新型MAC协议开发
- 无线安全研究
- 频谱共享技术实验
通过灵活的配置和开放的架构,OpenWIFI为无线通信领域的创新提供了强大平台。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考