openwifi

openwifi

开源SDR全栈Wi-Fi实现

openwifi是基于软件定义无线电(SDR)的开源Wi-Fi全栈实现项目。它提供Linux mac80211兼容驱动和FPGA设计,支持802.11a/g/n协议,具备多种工作模式。项目特点包括可配置信道接入参数、CSI捕获、IQ采样和时间切片等,为Wi-Fi研究开发提供灵活平台。性能方面,TCP吞吐量可达40-50Mbps,UDP可达50Mbps。支持多种SDR平台,如Xilinx ZC706、Xilinx ZED和ADRV9364-Z7020等。项目采用双重许可模式,包括开源AGPLv3许可和商业许可,为Wi-Fi协议研究、无线通信教育和SDR应用开发等领域提供了开放的软硬件平台。

OpenWiFiSDRFPGALinuxIEEE802.11Github开源项目

openwifi

<img src="https://yellow-cdn.veclightyear.com/0a4dffa0/8b6bae50-2a30-44fa-a3cb-1a074ddc8fa2.jpg" width="900">

openwifi: 基于SDR(软件定义无线电)的Linux mac80211兼容全栈IEEE802.11/Wi-Fi设计。

[下载镜像和快速开始] [Windows用户提示]

本仓库包含Linux驱动和软件。openwifi-hw仓库包含FPGA设计。您有责任遵守当地频谱法规或使用有线连接以避免潜在的无线干扰。

[项目文档] [应用说明] [视频] [出版物和如何引用] [邮件列表]

Openwifi代码采用双重许可。AGPLv3是开源许可。非开源和高级功能许可请联系Filip.Louagie@UGent.be。Openwifi项目还利用了一些第三方模块。用户有责任根据使用目的/用途检查并遵守这些模块的许可。您可以查看Analog Devices的示例说明了解这些复合许可条件。[如何贡献]

特性:

性能(最佳情况:聚合/AMPDU开启):

  • iperf:TCP 40~50Mbps;UDP 50Mbps
  • EVM -38dB;MCS0灵敏度-92dBm;MCS7 -73dBm。(FMCOMMS2 2.4GHz;有线和OTA测试)

支持的SDR平台:

开发板名称描述Vivado许可证
zc706_fmcs2Xilinx ZC706开发板 + FMCOMMS2/3/4需要
zed_fmcs2Xilinx zed开发板 + FMCOMMS2/3/4需要
adrv9364z7020ADRV9364-Z7020 + ADRV1CRR-BOB需要
adrv9361z7035ADRV9361-Z7035 + ADRV1CRR-BOB/FMC需要
zc702_fmcs2Xilinx ZC702开发板 + FMCOMMS2/3/4需要
antsdrMicroPhase 增强版ADALM-PLUTO [说明](https://github.com/open-sdr/openwifi/blob/master/kernel_boot/boards/antsdr/notes.md需要
e310v2MicroPhase 新版antsdr [说明](https://github.com/open-sdr/openwifi/blob/master/kernel_boot/boards/e310v2/README.md需要
antsdr_e200MicroPhase 增强版ADALM-PLUTO(更小/更便宜)[说明](https://github.com/open-sdr/openwifi/blob/master/kernel_boot/boards/antsdr_e200/README.md需要
sdrpiHexSDR 树莓派大小的SDR [说明](https://github.com/open-sdr/openwifi/blob/master/kernel_boot/boards/sdrpi/notes.md需要
zcu102_fmcs2Xilinx ZCU102开发板 + FMCOMMS2/3/4需要
neptunesdr低成本Zynq 7020 + AD9361开发板需要
  • 如果您的新开发板不在列表中,请查看移植指南
  • 开发板名称用于识别openwifi-hw/boards/中的FPGA设计和openwifi-hw-img/boards中的FPGA镜像。
  • 没有任何开发板?或者您更喜欢JTAG启动而不是SD卡?请查看我们的测试平台w-iLab.t教程。

[下载镜像和快速开始] [基本操作] [更新FPGA] [更新驱动程序] [更新sdrctl] [便捷访问等]

[从头构建openwifi Linux镜像] [11b特别说明] [移植指南] [项目文档] [应用说明]

下载镜像和快速开始

  • 下载 openwifi 镜像,解压后烧录到 SD 卡(>=16GB)。完成后,SD 卡应有两个分区:BOOT 和 rootfs。可以使用 SD 卡工具软件(如 Ubuntu 中的 Startup Disk Creator)或 dd 命令刷写 SD 卡:

    sudo dd bs=512 count=31116288 if=openwifi-xyz.img of=/dev/your_sdcard_dev
    (为确保 count 值正确,最好用 "fdisk -l img_filename" 检查 .img 文件的实际情况)
    
  • 根据你的开发板型号,在电脑上正确配置 BOOT 分区中的文件:

    • BOOT/openwifi/board_name 中的文件复制到 BOOT 分区的根目录。
    • 删除 rootfs/root/kernel_modules 目录(如果存在)。
    • 删除 rootfs/etc/network/interfaces.new 目录(如果存在)。
  • 将 SD 卡插入开发板。将开发板设置为从 SD 卡启动模式。连接天线。开机。

  • 从你的电脑(电脑以太网 IP 应为 192.168.10.1)登录开发板,密码为 openwifi

    ssh root@192.168.10.122
    
  • 如果登录失败,请查看已知问题

  • 然后,运行 openwifi AP 和板载 Web 服务器

    raspi-config --expand-rootfs (仅当 SD 卡 > 16GB 时需要。运行后重启)
    ./openwifi/setup_once.sh (重启开发板。新开发板只需运行一次)
    cd openwifi
    ./wgd.sh
    ./fosdem.sh
    (使用 "./wgd.sh 1" 可在 11n 基础上启用实验性的 AMPDU 聚合)
    (使用 "./fosdem-11ag.sh" 可强制使用 11a/g 模式)
    

    注意 adrv9361z7035 在 5GHz 下发射功率极低。使用该开发板在 5GHz 下时请靠近!!!

  • 当你的设备(手机/笔记本等)看到 "openwifi" SSID 后,连接它(如果没有自动获取到 192.168.13.* 的 IP,请查看已知问题。在设备上浏览 192.168.13.1,你应该能看到开发板上 Web 服务器托管的网页。

    • 注 1:如果你的设备不支持 5GHz(ch44),请修改开发板上的 hostapd-openwifi.conf 并重新运行 fosdem.sh。
    • 注 2:约 2 小时后,维特比解码器会停止(Xilinx 评估许可)。只需重新加载 FPGA(方法)或简单地重启开发板即可。(如果 "./sdrctl dev sdr0 get reg rx 20" 的输出始终相同,则表示解码器已停止)
  • 要给 Wi-Fi 客户端提供互联网访问,请在电脑上配置路由/NAT:

    sudo sysctl -w net.ipv4.ip_forward=1
    sudo iptables -t nat -A POSTROUTING -o NICY -j MASQUERADE
    sudo ip route add 192.168.13.0/24 via 192.168.10.122 dev ethX
    

    ethX 是连接开发板以太网的电脑网卡名。NICY 是连接互联网的电脑网卡名(Wi-Fi 或另一个以太网)。

    如果需要,可以在 /etc/sysctl.conf 中取消注释 "net.ipv4.ip_forward=1" 以使 IP 转发在电脑上持久化。

  • 要监控实时 CSI(芯片状态信息),如时间戳、频率偏移、信道状态、均衡器等,请参考 CSI 说明

基本操作

该开发板实际上是一台 Linux/Ubuntu 计算机,运行 hostapd 通过 Wi-Fi 网络接口(NIC)提供 Wi-Fi AP 功能。该 NIC 由 openwifi-hw FPGA 设计实现。我们使用术语**"开发板上"表示命令应在 ssh 登录开发板后执行。"电脑上"**表示命令应在电脑上运行。

  • 启动 openwifi NIC sdr0:
    cd ~/openwifi && ./wgd.sh
    (使用 "./wgd.sh 1" 可启用实验性的 AMPDU 聚合)
    
  • 使用 openwifi 作为客户端连接其他 AP(首先修改开发板上的 wpa-connect.conf):
    route del default gw 192.168.10.1
    wpa_supplicant -i sdr0 -c wpa-connect.conf &
    dhclient sdr0
    
  • 在 ad-hoc 模式下使用 openwifi:请查看 sdr-ad-hoc-up.shsdr-ad-hoc-join.sh此应用说明
  • 在监听模式下使用 openwifi:请查看 monitor_ch.sh此应用说明
  • Linux 原生 Wi-Fi 工具/应用(iwconfig/ifconfig/iwlist/iw/hostapd/wpa_supplicant 等)可以像使用商业 Wi-Fi 芯片一样在 openwifi NIC 上运行。
  • sdrctl 是一个专门用于访问 openwifi 驱动程序/FPGA 的工具,更多信息请查看项目文档

更新 FPGA

由于预构建的 SD 卡镜像可能没有最新的错误修复/更新,建议始终将 user_space 目录中的最新文件复制到开发板上。然后按照此应用说明的快速开始部分更新 FPGA 和驱动程序。以下说明与之相同,但提供了额外的环境设置信息。

(查看驱动程序和 FPGA 动态重载应用说明以更好地理解如何在不重启/断电的情况下更新 FPGA 和驱动程序文件)

  • 安装Vivado 2021.1。确保同时安装Vitis。你应该有这个目录:your_Xilinx_install_directory/Vitis(不是Vitis_HLS!)
  • 如果没有安装Vitis,你可以通过在操作系统开始菜单的Xilinx程序组/菜单中运行"Xilinx Design Tools --> Add Design Tools for Devices 2021.1"来添加它。
  • 设置环境变量(使用绝对路径):
    export XILINX_DIR=你的Xilinx安装目录
    (例如:export XILINX_DIR=/opt/Xilinx。Xilinx目录应包含如Downloads、Vitis等内容)
    export OPENWIFI_HW_IMG_DIR=你的openwifi-hw-img目录
    (通过git clone获取open-sdr/openwifi-hw-img仓库的目录)
    export BOARD_NAME=你的板卡名称
    
  • 从openwifi-hw-img中选择FPGA比特流,生成system_top.bit.bin并通过ssh通道传输到板上:
    cd openwifi/user_space; ./boot_bin_gen.sh $XILINX_DIR $BOARD_NAME $OPENWIFI_HW_IMG_DIR/boards/$BOARD_NAME/sdk/system_top.xsa
    scp ./system_top.bit.bin root@192.168.10.122:openwifi/
    
  • 现在system_top.bit.bin已经在板上的/root/openwifi/目录中。当从该目录运行wgd.sh时,它会发现FPGA镜像文件system_top.bit.bin并在加载驱动.ko文件之前加载它。

更新驱动

由于预构建的SD卡镜像可能没有最新的错误修复/更新,建议始终将user_space目录中的最新文件复制到板上。然后根据此应用说明的快速入门更新FPGA和驱动程序。以下说明执行相同的操作,并提供有关环境设置的额外信息。

(查看驱动程序和FPGA动态重载应用说明以更好地理解如何在不重启/断电的情况下更新FPGA和驱动程序文件)

  • 准备Analog Devices Linux内核源代码(只需运行一次):

    sudo apt install flex bison libssl-dev device-tree-compiler u-boot-tools -y
    cd openwifi/user_space; ./prepare_kernel.sh $XILINX_DIR ARCH_BIT
    (对于Zynq 7000,ARCH_BIT应为32,对于Zynq MPSoC,ARCH_BIT应为64)
    
  • 编译最新的openwifi驱动程序

    cd openwifi/driver; ./make_all.sh $XILINX_DIR ARCH_BIT
    (对于Zynq 7000,ARCH_BIT应为32,对于Zynq MPSoC,ARCH_BIT应为64)
    (超过上述两个参数的更多参数(最多5个)将被转换为pre_def.h中的"#define 参数"用于条件编译)
    
  • 通过ssh通道将驱动程序文件复制到板上

    cd openwifi/driver; scp `find ./ -name \*.ko` root@192.168.10.122:openwifi/
    

    现在你可以在板上使用wgd.sh来加载新的openwifi驱动程序。如果同一目录中存在system_top.bit.bin,wgd.sh也会尝试重新加载FPGA镜像。 在驱动程序和FPGA动态重载应用说明中查找更多信息。

    注意:如果在加载驱动程序时遇到符号或版本错误,可能是因为SD卡镜像中的内核太旧。在这种情况下,你需要将prepare_kernel.sh生成的Linux内核镜像(参见[更新驱动程序])放入SD卡的BOOT分区。内核镜像文件名:adi-linux/arch/arm/boot/uImage(32位);adi-linux-64/arch/arm64/boot/Image(64位)。

更新sdrctl

  • 通过ssh通道将sdrctl源文件复制到板上
    cd openwifi/user_space/sdrctl_src; scp `find ./ -name \*` root@192.168.10.122:openwifi/sdrctl_src/
    
  • 在板上编译sdrctl:
    cd ~/openwifi/sdrctl_src/ && make clean && make && cp sdrctl ../ && cd ..
    

便捷访问等

  • 查看驱动程序和FPGA动态重载应用说明以了解更方便的方式更新FPGA和驱动程序文件,无需重启/断电。
  • 板上FPGA和驱动程序更新脚本
    • 在PC上设置ftp服务器,允许匿名访问并将ftp根目录更改为openwifi目录。
    • 在板上:
    ./sdcard_boot_update.sh $BOARD_NAME
    (上述命令下载uImage、BOOT.BIN和devicetree.dtb,然后将它们复制到引导分区。记得断电重启)
    ./wgd.sh remote
    (上述命令下载驱动程序文件,并启动sdr0)
    
  • 像访问磁盘一样访问板的磁盘/根文件系统:
    • 在PC上:"文件管理器 --> 连接到服务器...",输入:sftp://root@192.168.10.122/root
    • 输入密码"openwifi"

从头构建openwifi Linux镜像

  • 关于最新的ADI Kuiper镜像,请查看kuiper.md

11b特别说明

Openwifi仅使用OFDM作为其调制方案,因此不向后兼容802.11b客户端或操作模式。这通常发生在信标传输、连接建立和稳健通信期间。

作为解决这个问题的方法,openwifi只能在与使用hostapd/wpa_supplicant用户空间程序实例化的AP/客户端通信时得到完全控制。

对于hostapd程序,可以使用配置命令(即supported_rates、basic_rates)抑制802.11b速率,并提供了一个示例配置文件(即hostapd-openwifi.conf)。这个方法的一个小缺点来自于fullMAC Wi-Fi卡,因为它们必须在设备驱动程序级别实现NL80211_TXRATE_LEGACY NetLink处理程序。

另一方面,客户端(商业Wi-Fi dongle/板)上的wpa_supplicant程序在2.4GHz频段中无法直接抑制802.11b速率,因此在连接openwifi(仅OFDM)时会出现问题。应在客户端使用打过补丁的wpa_supplicant。

sudo apt-get install libssl1.0-dev
cd openwifi/user_space; ./build_wpa_supplicant_wo11b.sh

移植指南

本节通过展示openwifi和Analog Devices参考设计之间的差异来解释移植工作。openwifi基于HDL参考设计的2021_r1版本。

  • 在hdl/projects/fmcomms2/zc706打开fmcomms2 + zc706参考设计(请阅读Analog Devices帮助)
  • 在openwifi-hw/boards/zc706_fmcs2打开openwifi设计zc706_fmcs2(请阅读openwifi-hw仓库)
  • "打开块设计",你将看到openwifi和参考设计之间的差异。这些差异体现在"图表"和"地址编辑器"中。
  • 连接到ARM总线的FPGA块的地址/中断应放置/对齐到设备树文件openwifi/kernel_boot/boards/zc706_fmcs2/devicetree.dts中。Linux在启动时会解析devicetree.dtb以了解所连接设备(在我们的情况下是FPGA块)的信息。
  • 我们使用dtc命令将Analog Devices Linux镜像中的devicetree.dtb转换为devicetree.dts,然后根据我们对参考设计的添加/修改进行相应的修改。
  • 请学习[从头构建openwifi Linux镜像]中的脚本,以了解我们如何生成devicetree.dtb、BOOT.BIN、Linux内核,并将它们组合在一起构建完整的SD卡镜像。

许可证

本项目作为开源项目提供,遵循AGPL 3.0或更高版本的条款。然而,某些元素采用GPL 2-0或更高版本和BSD 3许可证授权。有关准确信息,请查看各个文件。

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多