1. 硬件准备与环境搭建
第一次接触Zedboard+AD9361组合时,我花了整整三天才搞明白所有硬件连接细节。这套方案的核心在于将Zynq-7000 SoC的处理能力与AD9361射频前端的灵活性相结合。你需要准备以下硬件:
- Zedboard开发板:建议选择Rev.D版本,自带两个FMC接口
- AD9361子卡:推荐ADI官方的FMCOMMS2/3/4系列,注意天线接口是SMA还是MMCX
- 16GB以上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用户可以用Win32DiskImager,Linux用户建议直接用dd命令:
unzip openwifi-zed_fmcs2-1.5.img.zip sudo dd if=openwifi-zed_fmcs2-1.5.img of=/dev/sdX bs=1M status=progress烧录完成后,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_mode=g 表示2.4GHz # 修改channel=6 指定信道实测中发现三个影响稳定性的关键参数:
- tx_power:AD9361在5GHz时功率较低,建议客户端靠近
- beacon_int:默认100ms,密集环境可改为50ms
- ht_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_BIT=32参数匹配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修改基带时钟频率(默认100MHz):
vi 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