ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

瑞芯微RV1126B嵌入式WiFi AP热点配置全流程实战指南

2026/9/16 1:58:40 拓冰建站 浏览量
瑞芯微RV1126B嵌入式WiFi AP热点配置全流程实战指南 做嵌入式开发这么多年WiFi 模块对我来说一直是“最熟悉的陌生人”。平时在板子上跑个 STA 模式连一下路由器、拉个包、跑个业务基本就完事了。但这次项目不一样客户要求用瑞芯微 (EASY EAI) RV1126B 开发板做一台自带 WiFi 热点的设备也就是把板子本身变成一个 APAccess Point手机、平板直接连到板卡上实现局域网通讯。这个需求一出来我脑子里的第一反应就是AP 模式这东西配起来可比 STA 麻烦多了。不光是驱动要支持还得考虑 hostapd、DHCP、DNS、NAT 转发、防火墙规则链路长、坑点多。而且用的是 RV1126B不是那种生态非常成熟的树莓派很多资料要自己翻 SDK、看内核配置、甚至反推设备树。折腾了整整一周踩了不少坑总算把这条链路彻底跑通了手机连上热点、网页鉴权、数据上报、局域网加载界面图全套流程稳定运行。这篇文章我就把这个过程完整梳理一遍。内容不“高深”但非常落地适合正在用瑞芯微 RV1126B、RV1106 或者同类小节点 SOC 做 WiFi AP 项目的工程师参考。如果你手上有 EASY EAI 的开发板或者手头项目正好卡在 AP 起不来、连上热点但上不了网、IP 分配异常这些问题上这篇文章可以帮你省掉一多半的排查时间。1. 项目背景为什么要在 RV1126B 上做 WiFi AP1.1 方案选型与需求拆解先说清楚项目到底要干什么。设备是一台基于瑞芯微 RV1126B 的智能硬件主控板来自 EASY EAI 生态核心是一颗四核 Cortex-A7 的视觉处理芯片主打 IPC、边缘 AI 盒子这类场景。客户需要一个“配置模式”设备上电后自身发出一个 WiFi 热点手机连接这个热点进入设备的管理页面进行网络配置、设备绑定、固件升级等操作。这就是典型的 SmartConfig 或 SoftAP 使用场景。为什么选 RV1126B 而不选其他方案客户给出的理由很直接这颗芯片成本低、视觉处理性能够用、板卡的外设接口齐全。而且 RV1126B 的方向盘又比之前的 RV1109 大拿下 WiFi 模块做 AP 完全没问题。实际上RV1126B 的 CPU 只有约 1.5GHz 的主频跑 hostapd 这种用户态 AP 服务软件绰绰有余瓶颈主要在网络吞吐和 WiFi 芯片本身的射频性能上。项目需求拆解下来分这么几块硬件上板卡必须能识别 WiFi 模块并且模块固件支持 AP 模式。系统层面需要 hostapd、dhcp 相关的组件提供热点的认证和 IP 分配。网络层面热点建立后STA 客户端手机必须能拿到 IP、能访问板卡的 Web 服务。如果需要上网还得配好 NAT 转发否则就只能做纯局域网通讯。这几块任一出问题热点用户侧的表现就千奇百怪后面我会逐个讲到。1.2 整体链路设计思路AP 模式从底层到上层其实是好长一条链路。驱动层要做模式切换把 WiFi 芯片从 STA 变成 AP配置层要设置 SSID、加密方式、信道、频段协议层要跑 DHCP 给客户端分配地址应用层要启动 DNS 和 HTTP 服务让手机打开浏览器就能看到配置页面。我一开始就用一张图在脑子里过了一遍这条链路的各个节点心里有个数WiFi 模块通过 SDIO 或 USB 挂载到 RV1126B 的控制器上。内核加载 WiFi 驱动驱动通过 firmware 文件完成模块初始化。用户态 hostapd 程序调用驱动接口把模块切换到 AP 模式。之后建立 br0 或者直接使用 wlan0 网卡绑定静态 IP。dnsmasq 或 udhcpd 在这个网段里分配 IP。防火墙和 NAT 决定 STA 客户端出网还是仅局域网访问。链路长没关系关键是每个环节都是可控的、可定位的。后面我按这个顺序一步步展开。2. 驱动层准备让 WiFi 芯片在 AP 模式下先“活”起来2.1 编译环境与内核选项我拿到 EASY EAI 的 SDK 之后最先确认的就是内核里 WiFi 驱动的状态。EASY EAI RV1126B 用的 WiFi 模块是 AIC8800D40这是一颗支持 2.4G/5G 双频的 WiFi6 芯片。SDK 里本身带了驱动源码但默认编译的是 STA 模式要想用 AP必须先把相关配置打开。在这里我强烈建议先找 SDK 里的 README 或者板级配置文件确认模块型号和驱动路径不要上来就改内核配置。不同批次的板子可能用不同 WiFi 模块驱动和固件不匹配后面怎么调都白搭。打开内核配置菜单进入Device Drivers → Network device support → Wireless LAN确认以下选项开启CONFIG_WIRELESSy CONFIG_CFG80211y CONFIG_MAC80211y CONFIG_NETDEVICESy CONFIG_WLAN_VENDOR_AICy CONFIG_AIC8800D40y这几个选项分别决定 WiFi 协议栈是否编译进内核、cfg80211 是否启用、以及 AIC8800D40 驱动是否编译。如果你的模块是 AP6256 之类的那就是另一套配置千万别照搬。内核配置改完后直接编译即可RV1126B 本身的编译链路比较常规./build.sh kernel一把过。2.2 设备树与驱动加载的细节设备树这一步是很多人容易翻车的点。RV1126B 的 WiFi 模块如果是走 SDIO 接口需要在设备树里正确配置 SDIO 控制器节点和 WiFi 中断引脚。EASY EAI 的板级 dts 文件通常位于kernel/arch/arm/boot/dts/下具体文件名可能是rv1126b-easyeai.dts。关键配置点有两个SDIO 控制器的status okay确保 SDIO 接口被使能。WiFi 的 power 引脚、reset 引脚、irq 中断引脚都要一一对应否则驱动加载时会卡在固件下载阶段。我实际调试时遇到过一次驱动加载超时查了半天最后发现是 IRQ 映射错误。代码里模块注册的中断号和设备树里指定的不是同一路导致系统在等待固件 ready 时一直 timeout。这里真不能以“差不多”的心态过最好对照原理图逐脚确认。设备树修改完成后重新编译内核并烧录。进入系统后用dmesg | grep aic8800查看驱动加载信息看到类似下面的输出基本就说明驱动正常加载了aic8800_sdio: probe success aic8800_fw: firmware download success wlan0: STA mode等下这里有个细节。驱动默认初始模式可能是 STA不要慌这是正常的。AP 模式要等 hostapd 配置之后动态切换所以你现在看到的wlan0: STA mode不代表板子不能用而是说驱动层已经 ready只是上层还没接管。2.3 用户态工具链hostapd 与 dnsmasq 的编译RV1126B 的 SDK 一般都基于 buildroot所以 hostapd 和 dnsmasq 这两个工具最好直接通过 buildroot 编译省得自己交叉编译出错。在 buildroot 目录下执行make hostapd make dnsmasq如果你用的 SDK 是比较精简的版本menuconfig 里可能没有这两个包那我建议直接下载源码交叉编译。交叉编译器就用 RV1126B SDK 自带的arm-rockchip-linux-gnueabihf-工具链编译参数也比较固定./configure --hostarm-rockchip-linux-gnueabihf --prefix/usr make make install DESTDIR$PWD/output这里有一个经验之谈hostapd 编译时要注意 openssl 依赖。如果你只要 WPA2-PSK 加密方式可以不用 openssl但你如果想要更安全的 WPA3-SAE就得提前编译 openssl 并让它被 hostapd 链接到。我一般直接用 buildroot 一把梭依赖关系它全给处理好省心。3. AP 配置与网络桥接打通手机到板卡的通讯链路3.1 hostapd.conf 配置详解驱动就绪之后真正的重头戏就是 hostapd 配置。这是 AP 模式的核心服务本质上是一个用户态守护进程通过 netlink 接口与内核的 cfg80211/mac80211 通信完成 WiFi 热点的创建、认证、加密、信道管理等。我给大家看一份我调试通过的 hostapd.conf 模板interfacewlan0 drivernl80211 ssidEASYAI-AP hw_modeg channel6 wmm_enabled1 macaddr_acl0 auth_algs1 ignore_broadcast_ssid0 wpa2 wpa_passphrase12345678 wpa_key_mgmtWPA-PSK rsn_pairwiseCCMP每行参数都有讲究我挑几个容易出问题的说明一下interfacewlan0WiFi 接口名必须与系统内的无线接口一致可以用ip link命令确认。drivernl80211这是目前 Linux 下几乎所有 WiFi 驱动都支持的通用驱动接口。如果你的 WiFi 驱动比较老可能需要换成driverwext但现在基本不用考虑了。hw_modeg表示 2.4GHz 频段 802.11g。如果你的模块支持 5G可以改成hw_modea。不过我这里提醒一句RV1126B 这类的边缘设备做 5G AP 时天线设计和 PCB layout 影响非常大信号容易虚高。如果你没有实际的射频调测手段2.4G 更稳妥。channel6不固定的可以根据现场射频环境选 1 或 11。后期我还写了脚本做信道扫描自动选干扰最小的信道这在设备部署到不同环境时会非常有用。wpa2和rsn_pairwiseCCMP确保使用 WPA2 加密加密算法用 AES安全性比 TKIP 高得多。如果这两处配置不匹配某些手机连不上或者连上了但是会反复断。wpa_passphrase至少 8 位这是 WPA 协议的要求低于 8 位 hostapd 直接拒绝启动。启动 hostapd 时最好指定配置文件路径并开启日志输出hostapd -B -P /var/run/hostapd.pid /etc/hostapd.conf启动后立刻看系统日志如果有AP-ENABLED日志恭喜你热点已经起来了。3.2 DHCP 与 DNS 分配手机连上之后能否拿到 IP热点起来了但手机连上之后没有 IP依然等于没用。这时候就要启动 DHCP 服务。我这边用的是 dnsmasq它本身就集成了 DHCP 和 DNS 功能非常适合嵌入式设备一个进程搞定两件事资源占用也小。接下来就是配置一个桥接网卡 br0把 wlan0 桥接进去再给 br0 制定一个固定的网段地址。为啥要桥接因为如果 Web 服务和 DHCP 服务都在这台设备上我们其实只需要一个虚拟网卡 br0然后把 wlan0 加入这个桥这样一来 wlan0 上收到的数据包会直接交给 br0而 DHCP、HTTP 等应用进程绑定到 br0 上就可以正常工作了。操作命令如下# 创建桥接接口并设置 IP ip link add name br0 type bridge ip link set dev wlan0 master br0 ip addr add 192.168.8.1/24 dev br0 ip link set br0 up ip link set wlan0 up然后编辑/etc/dnsmasq.confinterfacebr0 dhcp-range192.168.8.100,192.168.8.200,255.255.255.0,12h dhcp-option3,192.168.8.1 dhcp-option6,192.168.8.1这里的dhcp-option3是指定网关地址dhcp-option6是指定 DNS 服务器地址都指向设备自身的 br0 IP。如果你的 Web 服务只做局域网内访问DNS 地址其实不用真的提供域名解析但手机上有些页面加载时会校验网络连通性会主动访问一些公网域名所以建议保留 DNS 并配合后面的 NAT 一起使用。配置完成后重启 dnsmasq手机再次连接热点就应该能拿到 192.168.8.x 的 IP 了。3.3 出网转发如果业务需要访问外网纯局域网通讯没问题但客户需求里还有一个场景设备本身通过 4G 模块或者以太网接入互联网手机连接设备热点后需要自己也上得了网。这时就要做 NAT 转发。假设板卡的出网接口是eth0执行以下命令# 开启内核 IP 转发 echo 1 /proc/sys/net/ipv4/ip_forward # 配置 NAT 规则 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # 放行 conntrack 相关连接 iptables -A FORWARD -i br0 -o eth0 -j ACCEPT iptables -A FORWARD -i eth0 -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT这三条 iptables 规则的含义是把从 br0 发往 eth0 的数据包伪装成 eth0 的 IP 地址同时让返回的数据包能够正确地流回 br0。这里有个容易踩坑的地方iptables 里的state模块依赖内核配置CONFIG_NF_CONNTRACK如果你的内核没有开启这个选项第三条规则会直接报错或者被忽略。我在实验时第一次因为没有开CONFIG_NF_CONNTRACK导致只能单向 ping 通回报的包全部被丢弃排查了半个小时才发现。3.4 开机自启动与脚本化部署手动配置可以调通但项目要交付就得做成开机自启的脚本。我建议把以上所有操作写成一个脚本/etc/init.d/wifi_ap.sh然后放到/etc/rc.d/rc.local中调用。脚本主体大致如下#!/bin/sh # WiFi AP 启动脚本 sleep 3 # 确保 wlan0 存在 if [ ! -d /sys/class/net/wlan0 ]; then echo wlan0 not found /var/log/wifi_ap.log exit 1 fi ip link add name br0 type bridge ip link set dev wlan0 master br0 ip addr add 192.168.8.1/24 dev br0 ip link set br0 up ip link set wlan0 up hostapd -B -P /var/run/hostapd.pid /etc/hostapd.conf dnsmasq -C /etc/dnsmasq.conf echo 1 /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -A FORWARD -i br0 -o eth0 -j ACCEPT iptables -A FORWARD -i eth0 -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT启动前sleep 3是因为 WiFi 模块的驱动初始化和固件加载需要时间如果立刻创建 br0 并绑定 wlan0可能遇到接口还没有完全 ready 的情况。我实际测试下来加不加sleep 3差别很大。不加的话大约有 20% 的概率 wlan0 还没创建脚本直接报“No such device”退出。加了之后稳定百发百中。4. 实测验证、问题排查与性能调优4.1 端到端通讯实测所有服务起来之后先不要急着接业务按我的顺序做一轮基础验证。第一步确认 hostapd 状态ps aux | grep hostapd hostapd_cli status如果看到stateENABLED说明 AP 已经处于工作状态。第二步手机连接热点查看手机上的 IP 信息。正常情况下会拿到192.168.8.x的地址、网关是192.168.8.1、DNS 是192.168.8.1。第三步在板卡上 ping 手机的 IP确认二层链路通ping -I br0 192.168.8.100如果 ping 通说明 AP 链路已经全通。第四步打开手机浏览器访问http://192.168.8.1如果能正常打开板卡的 Web 页面说明 HTTP 服务正常。第五步如果想验证 NAT在板卡的 eth0 能上网的情况下手机浏览器打开百度首页能打开就说明 NAT 配置成功。我当时在这五步里卡住过第五步原因就是上面提到的CONFIG_NF_CONNTRACK没打开重编内核后一下就通了。4.2 常见问题速查表我把这一周调试期间的典型问题和解决思路整理成表格可以直接收藏。问题现象可能原因排查与解决方法hostapd 启动失败日志报interface wlan0不存在驱动未加载或 wlan0 未创建dmesg 查驱动确认模块型号重新加载模块hostapd 启动失败报nl80211 driver init failed内核 cfg80211 或模块不兼容确认内核版本和驱动匹配换用 wext 驱动试一次手机能连上热点但拿不到 IPdnsmasq 没启动或 br0 没有 IP检查 dnsmasq 进程确认 br0 地址和 dhcp-range 网段一致手机拿到的 IP 但上不了网NAT 未配置或内核转发未开启检查 ip_forward确认 iptables 规则和网络接口名是否正确连接热点后经常断线2.4G 信道干扰严重修改 channel 为 1/6/11或者在代码里做自动扫描选优5G 热点信号弱射频链路调校不到位检查天线连接确认板级走线阻抗实调 PA 参数还有一个值得注意的坑hostapd 在某些版本的驱动上负载高时会延迟响应事件手机那边表现为“打开页面要等好几秒”排查时需要看板卡 CPU 占用率并确认是否开启了节能策略。RV1126B 的功耗管理默认可能有 WiFi 的节能模式这会让平峰时期响应变慢在 hostapd.conf 里加上wmm_enabled1并且关闭节能会好很多。4.3 吞吐量调优与稳定性改进别以为 AP 起来能连上就完事了做产品还得看稳定性和吞吐量。我用 iperf3 实测的 2.4G 下行吞吐大约在 40Mbps 左右这个数据对于 Web 配置、轻量数据上传完全够用但如果你要传大量视频流最好还是上 5G。几轮测试下来我总结了几条比较有效的调优经验把 hostapd.conf 的wmm_enabled打开这对多媒体数据帧的性能影响很大。信道带宽默认只开 20MHz如果你确定附近的干扰不大可以加ieee80211n1和ht_capab[HT40]开启 40MHz 带宽吞吐量能翻倍。不过 40MHz 在 2.4G 频段很容易受干扰建议现场先扫一下信道再用。在 dnsmasq 里设置合理的租约期不要设得太短否则手机息屏再亮屏时会频繁重新获取 IP造成“同一部手机在热度列表里反复出现”的假像。板卡的电源稳定性对 WiFi 射频性能影响非常大RV1126B 在 AP 模式下 WiFi 芯片的峰值电流比 STA 高不少如果供电不足出现的问题非常隐蔽不是直接掉线而是吞吐量忽高忽低甚至手机连上账号后无法正常访问。先用示波器看 3.3V 电源轨的纹波比调代码快得多。我最后补充一个长期运行稳定性的测试方法写一个 shell 脚本每 5 分钟通过 iperf3 做一次吞吐量测试连续跑 24 小时记录各时间点的结果。如果某个时间点吞吐量异常下降大概率是信道干扰、温漂或内存泄漏结合测试温度记录能快速定位问题。5. 基于项目实操的个人经验总结整个项目做完我对 RV1126B 做 WiFi AP 这个方案是相当满意的。CPU 资源充裕跑 hostapd 和 dnsmasq 两个进程几乎没有感知EASY EAI 的 SDK 虽然不像树莓派那样开箱即用但源码和板级配置文件给得还算全只要沉住气链路基本都能打通。这里最想说的一点是嵌入式 WiFi AP 调试核心还是得对“链路”有整体认知。很多人一上来就改 hostapd.conf改了半天也起不来最后发现是驱动根本不支持 AP 模式还有的人手机一直拿不到 IP反复折腾 dnsmasq最后发现 br0 网桥地址没配上。这不是能力问题是漏掉了链路思维。建议大家和我一样从驱动层到用户态再到网络层按顺序排查每一步都做对应验证就能少走很多弯路。后续如果项目需要还可以在这个基础上扩展比如把控制页面做成带 mDNS 的方式Android 和 iOS 端就能直接用http://easyai.local访问设备或者是基于这个 AP 通道做蓝牙配网提升用户首次配置体验。根据我的经验在不同型号的 WiFi 模块上适配时最费时间的永远是设备树和固件匹配如果这一步能处理好后面的东西都是套路活。