Project Icon

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应用开发等领域提供了开放的软硬件平台。

openwifi

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许可证授权。有关准确信息,请查看各个文件。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号