1. 系统要求 最小硬件配置
ARM Cortex-A7+ / x86_64 处理器
256MB RAM 以上
100MB 磁盘空间
操作系统
Ubuntu 20.04 LTS (Focal) 或更高版本
Linux Kernel 4.15+(支持 mac80211 HWSIM)
2. 依赖库安装 在嵌入式 Ubuntu 环境中,需要以下系统包:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 sudo apt-get updatesudo apt-get install -y build-essential cmake git pkg-configsudo apt-get install -y libevent-devsudo apt-get install -y libsodium-devsudo apt-get install -y linux-headers-generic
如果系统包管理器没有 libsodium,手动编译: 1 2 3 4 5 6 7 cd /tmpgit clone https://github.com/jedisct1/libsodium.git cd libsodium./configure --prefix=/usr/local --disable-shared make -j$(nproc ) sudo make installsudo ldconfig
如果系统包管理器没有 libevent,手动编译: 1 2 3 4 5 6 7 8 cd /tmpwget https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz tar xzf libevent-2.1.12-stable.tar.gz cd libevent-2.1.12-stable./configure --prefix=/usr/local --disable-shared --disable-libevent-regress make -j$(nproc ) sudo make installsudo ldconfig
3. 编译 WFB-ng 3.1 配置 CMake 1 2 3 4 5 6 7 8 9 10 11 12 13 cd /path/to/wfb-ngmkdir -p build && cd buildcmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr/local \ -DENABLE_RTSP_SERVER=OFF \ -DCMAKE_C_FLAGS="-Os" \ -DCMAKE_CXX_FLAGS="-Os"
3.2 ARM 交叉编译(可选) 对于 ARM 嵌入式目标:
1 2 3 4 5 6 7 8 sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnucmake .. \ -DCMAKE_TOOLCHAIN_FILE=../toolchain-arm64.cmake \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr/local \ -DENABLE_RTSP_SERVER=OFF
创建 toolchain-arm64.cmake:
1 2 3 4 5 6 7 8 set (CMAKE_SYSTEM_NAME Linux)set (CMAKE_SYSTEM_PROCESSOR aarch64)set (CMAKE_C_COMPILER aarch64-linux-gnu-gcc)set (CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)set (CMAKE_FIND_ROOT_PATH /usr/aarch64-linux-gnu)set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
3.3 编译与安装 1 2 3 make -j$(nproc ) sudo make installsudo ldconfig
3.4 生成的二进制文件
文件名
说明
大小(约)
wfb_tx
发射端发送器
~150KB
wfb_rx
接收端聚合器
~200KB
wfb_tun
TUN 设备代理
~30KB
tx_cmd
控制命令行工具
~20KB
rtsp_server
RTSP/RTP 服务器(可选)
~50KB
4. 快速启动指南 4.1 生成密钥对 1 2 3 4 wfb_tx --genkeypair > /etc/wfbng.key chmod 600 /etc/wfbng.key
4.2 发射端 (TX) 配置 方法 A: 通过 TUN 设备发送(推荐) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 sudo wfb_tx -d wlan0 \ -k /etc/wfbng.key \ --tx-iface=wlan0 \ --channel=36 \ --bandwidth=20 \ --mcs-index=1 sudo ip link set wfb-tx upsudo ip addr add 10.5.0.1/24 dev wfb-txping -I wfb-tx 10.5.0.2
方法 B: 通过 UDP socket 发送 1 2 3 4 5 6 7 8 sudo wfb_tx -d wlan0 \ -k /etc/wfbng.key \ --listen=10.5.0.1:5700 \ --tx-iface=wlan0 echo "Hello WFB-ng" | nc -u -w1 127.0.0.1 5700
4.3 接收端 (RX) 配置 方法 A: 输出到 TUN 设备(推荐) 1 2 3 4 5 6 7 8 9 10 11 12 sudo wfb_rx -d wlan1,wlan2 \ -k /etc/wfbng.key \ --rx-iface=wlan1,wlan2 \ --output=tun:wfb-rx sudo ip link set wfb-rx upsudo ip addr add 10.5.0.2/24 dev wfb-rxping -I wfb-rx 10.5.0.1
方法 B: 输出到 UDP socket 1 2 3 4 5 6 7 8 sudo wfb_rx -d wlan1,wlan2 \ -k /etc/wfbng.key \ --rx-iface=wlan1,wlan2 \ --output=udp:10.5.0.3:5800 nc -u -l -p 5800
4.4 TUN 代理模式(wfb_tun) 当需要在 wfb_tx/rx 和外部应用之间建立桥接时:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 sudo wfb_tun -t wfb-tun \ -a 10.5.0.2/24 \ -c 127.0.0.1 \ -u 5801 \ -l 5800 \ -T 5
4.5 动态控制 (tx_cmd) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ./tx_cmd 2700 get_fec ./tx_cmd 2700 set_fec -k 16 -n 32 ./tx_cmd 2700 get_radio ./tx_cmd 2700 set_radio \ -B 40 \ -M 5 \ -G s \ -S 1
5. 完整部署示例 场景: FPV 无人机图传系统 1 2 3 4 5 [无人机端] [地面站] | | wfb_tx --> (WiFi) --> wlan0 wlan1 <-- (WiFi) <-- wfb_rx | | GStreamer/H.264 VLC/ffplay
发射端(无人机)启动脚本: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 #!/bin/bash KEY="/etc/wfbng.key" WLAN="wlan0" CHANNEL=36 BANDWIDTH=20 MCS=1 sudo ip link set $WLAN downsudo iw dev $WLAN set type monitorsudo ip link set $WLAN upsudo iw dev $WLAN set channel $CHANNEL sudo wfb_tx -d $WLAN \ -k "$KEY " \ --tx-iface=$WLAN \ --channel=$CHANNEL \ --bandwidth=$BANDWIDTH \ --mcs-index=$MCS \ --stbc=0 \ --ldpc=1 \ --short-gi=1 sudo ip link set wfb-tx upsudo ip addr add 10.5.0.1/24 dev wfb-txecho "TX started on $WLAN , channel=$CHANNEL "
接收端(地面站)启动脚本: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #!/bin/bash KEY="/etc/wfbng.key" WLANS="wlan1,wlan2" for wlan in $(echo $WLANS | tr ',' ' ' ); do sudo ip link set $wlan down sudo iw dev $wlan set type monitor sudo ip link set $wlan up done sudo wfb_rx -d $WLANS \ -k "$KEY " \ --rx-iface=$WLANS \ --output=tun:wfb-rx sudo ip link set wfb-rx upsudo ip addr add 10.5.0.2/24 dev wfb-rxecho "RX started on $WLANS "
视频流传输: 1 2 3 4 5 6 7 ffmpeg -re -i /dev/video0 \ -c:v libx264 -preset ultrafast -tune zerolatency \ -f mpegts udp://10.5.0.2:8554 ffplay -i udp://@:8554 -framedrop -autoexit
6. 性能调优参数 FEC 参数选择指南
环境
K (数据块)
N (总块)
冗余度
适用场景
室内/近距离
8
12
33%
WiFi 信号良好,丢包 < 5%
室外/中距离
16
32
50%
有遮挡或干扰,丢包 5-15%
远距离/高干扰
8
24
67%
严重干扰环境,丢包 > 15%
射频参数选择指南
MCS Index
调制方式
1SS (20MHz)
适用条件
0-7
BPSK/QPSK/16QAM
6.5-72 Mbps
远距离或弱信号
8-20
64-QAM
90-144 Mbps
中等距离,良好信号
21-77
256-QAM (VHT)
150-867 Mbps
近距离,强信号
系统级优化 1 2 3 4 5 6 7 8 9 10 11 12 13 sudo sysctl -w net.core.rmem_max=134217728sudo sysctl -w net.core.wmem_max=134217728sudo sysctl -w net.ipv4.udp_mem="131072 262144 524288" sudo iw dev wlan0 set power_save offsudo chrt -f 99 ./wfb_tx ...sudo ethtool -X wlan0 combined 1
7. 故障排查 常见问题
问题
可能原因
解决方案
Unable to decrypt session key
密钥不匹配或 epoch 过期
检查两端使用相同的 keypair,重启 wfb_tx 刷新 epoch
FEC recovered X packets (过多)
FEC 参数不足
增加 N/K 比例:tx_cmd <port> set_fec -k 16 -n 32
Packets lost
WiFi 信号弱或干扰
检查 RSSI,调整 MCS index 降低速率
TUN 设备无法创建
权限不足
使用 sudo 运行,确保 /dev/net/tun 存在
Short packet (fec header)
数据包损坏
检查无线网卡驱动,确认 monitor 模式正确配置
调试命令 1 2 3 4 5 6 7 8 9 10 11 12 cat /tmp/wfb-rx.ipcsudo tcpdump -i wlan0 -nn udp port 5700ip link show wfb-tx ip addr show wfb-tx dmesg | tail -20
8. 最小系统打包清单 对于嵌入式部署,以下文件是必需的:
1 2 3 4 5 6 7 /usr/local/bin/wfb_tx /usr/local/bin/wfb_rx /usr/local/bin/wfb_tun /usr/local/bin/tx_cmd /etc/wfbng.key # 密钥对(自行生成) /lib/*/libevent-2.1.so.* # libevent 运行时库 /lib/*/libsodium.so.* # libsodium 运行时库
最小镜像大小估算:~5MB(不含内核和基础系统)