无线架构
Wi-Fi 和蓝牙共享 esp32s31-radio Linux 模块,其中包含 Linux 前端、XIP 固件加载器和乐鑫无线代码所需的运行时。
应用路径 |
公共模块中的前端 |
|---|---|
Wi-Fi 套接字应用 |
mac80211/cfg80211,单 STA 接口 |
内置 BTstack 应用 |
|
替代的 Linux 蓝牙主机 |
|
三条路径连接同一无线运行时和预链接 Flash XIP 载荷。AP 和 AP+STA 不由当前前端公开。mac80211 软件监听仍受 STA 接收过滤限制,参见Wi-Fi 高级用法。帧格式与模块设置见无线接口参考。
固件加载
无线固件组合 ESP-IDF 库与本项目的兼容代码。主机预链接工具根据已构建的内核解析代码和常量重定位,生成 out/images/radio.bin。多数无线代码从专用 Flash 分区就地执行,选定的 Wi-Fi 热点代码复制到内部 SRAM。压缩后的 Linux 模块位于 rootfs 的 /usr/lib/s31-radio;可重定位文件 esp32s31-radio-fw-v1.o 仅为中间构建产物。
启动时,加载器验证映射镜像的 ABI、内存布局及头部/内容 CRC,复制 SRAM 代码和初始可写数据,清零 BSS,绑定模块导入并读取固定导出。检查能发现不兼容布局与损坏,但不能证明组件来自同次构建。内核、rootfs/模块和无线镜像必须作为匹配集一起构建和部署。
运行时与 CPU 分配
无线设备中断和公共工作线程使用 HP 核 0。兼容任务保留其请求的亲和性,无亲和性任务可以迁移。SoftMAC 接收 NAPI 和 I/O 定向到 HP 核 1,核 1 不在线时回退到 HP 核 0。仅 Wi-Fi 的 SoftMAC 模式使用原生任务服务,不启动公共无线工作线程。
兼容层为无线库提供任务、队列、定时器与同步。Wi-Fi 前端接收借用的辅助帧,在回调返回前复制需要保留的数据,再通过 NAPI 交给 mac80211。此路径可能使用原子分配,并非完全依靠预分配缓冲区。
挂起与恢复
公共运行时具备停止、复位和重启支持,包括还原固件初始可变数据,但不代表每个前端已实现恢复。当前 SoftMAC 在接口运行时拒绝挂起;无线模块会先返回该错误,而不是继续停止蓝牙或共享载荷。SoftMAC 没有活动连接重放逻辑,不应依赖系统睡眠后自动恢复 Wi-Fi、蓝牙或组合连接。Wi-Fi 挂起 HIL 是诊断序列。
服务控制见Wi-Fi 与蓝牙设置,系统睡眠限制见电源管理,代码修改和匹配集部署见无线固件开发。