Openwifi:基于软件无线电的LinuxMac80211兼容全栈802.11/Wi-Fi设计

2020-08-26 12:17:10

该存储库包括Linux驱动程序和软件。Openwifi-HW存储库采用FPGA设计。[项目文件]。

Openwifi代码有双许可证。AGPLv3是开源许可证。有关非开源许可证,请联系[email protected]。Openwifi项目还利用了一些第三方模块。用户有责任根据用途/用途检查并遵循这些模块的许可证。您可以在ADI公司找到有关此复合许可条件的示例说明。[如何贡献]。

802.11n MCS 0~7(目前仅PHY RX。(802.11n的全面系统支持即将推出)。

支持的SDR平台:(如果您的新板不在列表中,请查看移植指南)。

没有冲浪板吗?或者你喜欢JTAG引导而不是SD卡?查看我们的试验台w-iLab.t教程。

将openwifi主板特定的img文件(从表中)刻录到SD卡中(";用磁盘映像写入器打开";)。或解压后的";dd&34;命令)。SD卡有两个分区:boot和rootfs。您需要通过在计算机上的操作,根据您拥有的主板在引导分区中配置正确的文件:

将openwifi/zynqmp-common/Image(zcu102板)或openwifi/zynq-common/uImage(其他板)复制到引导分区的基本目录。

将两个天线连接到RXA/TXA端口。将主板配置为SD卡引导模式(查看主板手册)。将SD卡插入电路板。通电。

使用密码openwifi从您的PC(PC以太网应具有IP 192.168.10.1)登录板。

在您的设备(电话/笔记本电脑等)上看到openwifi&34;SSID后,将其连接。浏览器到192.168.13.1,您应该会看到由板载Web服务器托管的网页。

注意1:如果您的设备不支持5 GHz(Ch44),请更改主板上的hostapd-openwifi.conf并重新运行fosdem.sh。

注2:大约2小时后,维特比解码器将停止(Xilinx评估许可证)。如果发生这种情况,只需重新打开电路板的电源即可。(如果";./sdrctl dev sdr0 get reg RX 20";的输出始终相同,则表示解码器暂停)。

Sudo sysctl-w net.ipv4.ip_ward=1sudo iptables-t nat-A POSTROUTING-o ETHY-j MASQUERADEsudo IP route add 192.168.13.0/24 via 192.168.10.122 dev ethX。

EthX是连接主板的PC网卡名称。Ethy是连接互联网的PC网卡名称。

该主板实际上是一台运行hostapd以通过Wi-Fi网络接口(NIC)提供Wi-Fi AP功能的Linux/Ubuntu计算机。网卡采用Openwifi-HW FPGA设计实现。我们在板上使用术语";来表示命令应该在ssh登录到板之后执行。";在PC";上表示命令应该在PC上运行。

Linux原生Wi-Fi工具/应用程序(iwconfig/ifconfig/iwlist/iw/hostapd/wpa_supplicant/etc)可以像商业Wi-Fi芯片一样在openwifi网卡上运行。

Sdrctl是访问openwifi驱动程序/fpga的专用工具,详细信息请查看doc目录。

由于预先构建的SD卡映像可能没有最新的错误修复/更新,因此建议更新板载的FPGA位流。

安装vivado/sdk 2018.3(如果不需要生成新的fpga码流,webpack版本无License即可)。

从openwifi-hw获取最新的FPGA比特流,生成BOOT.BIN并通过SSH通道将其传输到板上:$OPENWIFI_DIR/USER_SPACE/GET_FPGA.SH$OPENWIFI_DIRFor Zynq7000:$OPENWIFI_DIR/USER_SPACE/BOOT_BIN_GEN.sh$OPENWIFI_DIR$XILINX_DIR$BOAD_NAME对于Zynq MPSoC(如ZCU102 board):$OPENWIFI_DIR/user_space/boot_bin_gen_zynqmp.sh$OPEQMPSoC。

板载:将BOOT.BIN放入引导分区。重新打开电路板以加载新的FPGA位流。

由于预先构建的SD卡映像可能没有最新的错误修复/更新,因此建议更新板载驱动程序。

准备ADI Linux内核源代码(只需运行一次):$OPENWIFI_DIR/USER_SPACE/Prepare_kernel.sh$OPENWIFI_DIR$XILINX_DIR ARCH_BIT(对于Zynq 7000,ARCH_BIT应该是32,对于Zynq MPSoC,ARCH_BIT应该是64)。

编译最新的openwifi驱动程序$OPENWIFI_DIR/Driver/make_all.sh$OPENWIFI_DIR$XILINX_DIR ARCH_BIT(对于Zynq 7000,ARCH_BIT应该是32,对于Zynq MPSoC,ARCH_BIT应该是64)

通过ssh通道将驱动程序文件复制到主板,现在您可以在主板上使用wgd.sh加载新的openwifi驱动程序。

FPGA和板载驱动程序更新脚本。/sdcard_boot_update.sh$board_name(上面的命令下载uImage、BOOT.BIN和devicetree.dtb,然后将它们复制到引导分区。记住重新打开电源)./wgd.sh remote(上面的命令下载驱动程序文件,并启动sdr0)。

将SD卡插入您的Linux PC。找到挂载点(有两个子目录boot和rootfs)和设置环境变量(使用绝对路径):

将您的主板配置为SD卡引导模式(查看主板手册)。将SD卡插入电路板。通电。

使用一次性密码ADALUAL从您的PC(PC以太网应为IP 192.168.10.1)登录板。

在PC上为您的主板设置路由/NAT--此互联网连接对于安装后/配置非常重要。

Sudo sysctl-w net.ipv4.ip_ward=1sudo iptables-t nat-A POSTROUTING-o ETHY-j MASQUERADEsudo IP route add 192.168.13.0/24 via 192.168.10.122 dev ethX。

EthX是连接主板的PC网卡名称。Ethy是连接互联网的PC网卡名称。

在板上运行一次脚本以完成安装后配置/配置(之后,密码变为openwifi)。

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

作为此问题的解决方案,只有分别与使用hostapd/wpa_requicant用户空间程序实例化的AP/客户端通信时,才能完全控制openwifi。

对于hostapd程序,可以使用配置命令(即SUPPORTED_RATES、BASIC_RATES)抑制802.11b速率,并提供了示例配置文件(即hostapd-openwifi.conf)。这方面的一个小警告来自全MAC Wi-Fi卡,因为它们必须在设备驱动程序级别实现NL80211_TXRATE_传统NetLink处理程序。

另一方面,客户端的WPA_Supplicant程序(商用Wi-Fi加密狗/主板)无法在2.4 GHz频段抑制开箱即用的802.11b速率,因此在连接openwifi(仅限OFDM)时会出现问题。客户端应该使用打补丁的WPA_PUPICANT。

本节通过显示openwifi和ADI参考设计之间的差异来说明移植工作。Openwifi基于HDL参考设计的f61d9707(2019 R1)。

开放式模块设计";,您将看到openwifi和参考设计之间的区别。在";图表";和";地址编辑器";中都有。

挂接到ARM总线的FPGA块的地址/中断应放入/对齐到设备树文件openwifi/kernel_boot/boards/zc706_fmcs2/devicetree.dts.。Linux将在引导时解析devicetree.dtb,以了解所连接设备的信息(在我们的示例中为FPGA块)。

我们使用DTC命令将ADI公司Linux映像中的devicetree.dtb转换成devicetree.dts,然后根据我们对参考设计添加/修改的内容进行修改。

请学习[从头开始构建openwifi Linux IMG]中的脚本,了解我们如何生成devicetree.dtb、BOOT.BIN和Linux内核uImage,并将它们组合在一起构建完整的SD卡镜像。

任何对openwifi项目的使用都应包括引文(Bibtex示例),从而导致出版:

@https://github.com/open-sdr/openwifi},{openwifigithub,作者={贤俊焦伟刘迈迈哈里},标题={开源IEEE802.11/Wi-Fi基带芯片/FPGA设计},url={openwifigithub Year={2019年},}