1. 硬件准备与环境搭建第一次接触ZedboardAD9361组合时我花了整整三天才搞明白所有硬件连接细节。这套方案的核心在于将Zynq-7000 SoC的处理能力与AD9361射频前端的灵活性相结合。你需要准备以下硬件Zedboard开发板建议选择Rev.D版本自带两个FMC接口AD9361子卡推荐ADI官方的FMCOMMS2/3/4系列注意天线接口是SMA还是MMCX16GB以上SD卡实测32GB Class10卡最稳定USB转串口模块CP2102或FT232芯片的都行5V/3A电源射频工作时峰值电流会到2.8A硬件连接有个容易踩坑的地方AD9361子卡必须插在Zedboard的J9 FMC接口靠近以太网口那个否则Linux启动后会找不到设备。我第一次就插错了位置结果花了两个小时排查。连接顺序建议断电状态下插入FMC子卡连接双天线2.4G和5G各一根插入烧录好镜像的SD卡最后接串口线和电源2. 系统镜像烧录与配置官方提供的预编译镜像确实方便但直接下载经常遇到网速问题。我整理了几个实测可用的镜像源# 官方镜像(速度较慢) wget https://github.com/open-sdr/openwifi/releases/download/v1.5/openwifi-zed_fmcs2-1.5.img.zip # 国内镜像(推荐) aria2c -x16 https://mirror.iscas.ac.cn/openwifi/openwifi-zed_fmcs2-1.5.img.zip烧录时Windows用户可以用Win32DiskImagerLinux用户建议直接用dd命令unzip openwifi-zed_fmcs2-1.5.img.zip sudo dd ifopenwifi-zed_fmcs2-1.5.img of/dev/sdX bs1M statusprogress烧录完成后SD卡会分成两个分区BOOT(FAT32)和rootfs(ext4)。需要特别注意将BOOT/openwifi/zed_fmcs2/下的三个文件(uImage, devicetree.dtb, uramdisk.image.gz)复制到BOOT根目录删除rootfs/root/kernel_modules目录(如果存在)删除rootfs/etc/network/interfaces.new(如果存在)3. 首次启动与基础配置插卡上电后通过串口(115200bps)可以看到系统启动日志。遇到最多的问题是SD卡容量识别错误解决方法# 对于大于16G的SD卡必须执行 raspi-config --expand-rootfs reboot首次登录后运行一次性配置脚本./openwifi/setup_once.sh这个脚本会完成以下工作加载FPGA比特流注册AD9361驱动配置网络接口创建虚拟WiFi设备sdr0完成后建议重启一次之后每次启动只需要运行cd ~/openwifi ./wgd.sh # 加载驱动 ./fosdem.sh # 启动AP服务4. 无线AP功能调优默认配置下AP工作在5GHz频段(ch44)如果客户端不支持需要修改hostapd配置vi ~/openwifi/hostapd-openwifi.conf # 修改hw_modeg 表示2.4GHz # 修改channel6 指定信道实测中发现三个影响稳定性的关键参数tx_powerAD9361在5GHz时功率较低建议客户端靠近beacon_int默认100ms密集环境可改为50msht_capab根据客户端支持情况开启HT40/Short GI可以通过sdrctl工具实时监控射频状态./sdrctl dev sdr0 get reg rx 20 # 查看接收状态 ./sdrctl dev sdr0 get reg tx 10 # 查看发射状态5. 高级功能与问题排查CSI数据采集 OpenWiFi支持实时获取信道状态信息这对无线定位研究特别有用./csi.sh start # 开始采集 ./csi.sh stop # 停止并生成csi.dat常见故障排查AP可见但无法连接检查./fosdem.sh输出是否有Failed to set beacon parameters传输速度慢尝试./wgd.sh 1启用AMPDU聚合两小时后断连这是Xilinx评估版Viterbi解码器的限制需要重启FPGA./load_fpga.sh # 重新加载比特流性能优化建议编译时添加ARCH_BIT32参数匹配Zynq-7000架构修改/etc/sysctl.conf增加网络缓冲区大小使用iperf3测试实际吞吐量正常应达到30Mbps(TCP)6. 二次开发指南如果想修改FPGA设计需要准备Vivado 2021.1 Vitis安装ADI HDL库export XILINX_DIR/path/to/Xilinx ./prepare_adi_lib.sh $XILINX_DIR修改基带时钟频率默认100MHzvi openwifi.tcl # 修改NUM_CLK_PER_US参数 # 重新生成比特流驱动开发时注意内核模块采用GPL协议通过netlink与用户空间通信寄存器操作必须用ioremap保护我在实际项目中遇到过驱动加载顺序问题解决方案是在/etc/modules-load.d/中显式指定echo openwifi /etc/modules-load.d/openwifi.conf echo sdr /etc/modules-load.d/openwifi.conf