无线固件开发
无线固件组合乐鑫 Wi-Fi/蓝牙库与本项目 OS 适配层。主机生成预链接的 radio.bin,Linux 通过公共无线模块加载其映射并执行 Flash XIP 代码。Linux 网络和蓝牙接口改动通常属于内核前端;组件关系见无线架构。
构建与部署
按从源码构建准备环境,在主仓库运行:
. "$IDF_PATH/export.sh"
export IDF_EXPORT="$IDF_PATH/export.sh"
make image
make flash-existing-all PORT=/dev/ttyUSB0
make image 构建并验证完整组件集,将镜像写入 out/images/,再发布到 dist/<build-id>/ 并更新 dist/current。烧录目标从 dist/current 读取已验证组件集,不重新构建;只有开发板已采用相同 Flash 布局时,保留 persist 才能保留可用的原有数据。替换串口路径,烧录前关闭串口监视程序。
内核、rootfs 中的模块和无线镜像具有构建关联,不能只凭 ABI 编号判断可混用。部分更新目标会拒绝执行;应部署匹配集。详见烧录与首次启动。
目标 |
结果 |
|---|---|
|
构建 ESP-IDF 库依赖到 |
|
生成 |
|
使用导入桩构建内核和模块 |
|
对已构建内核/模块预链接,生成 |
|
构建、检查并发布整套匹配镜像 |
查找实现
文件或目录 |
作用 |
|---|---|
|
调用 ESP-IDF Wi-Fi/蓝牙操作 |
|
固件侧任务和同步适配层 |
|
链接输入、保留导出及导入桩生成 |
|
根据内核和模块生成预链接 XIP 镜像 |
|
公共命令队列、工作线程和 SRAM 分配 |
|
XIP 镜像验证、导入绑定和入口包装 |
|
XIP 地址与布局约定 |
|
mac80211 SoftMAC 前端 |
|
直接 HCI 和 Linux HCI 前端 |
跟踪当前 STA 行为时,从 mac80211 回调与原始帧发送/接收路径开始。不要将固件内部连接、AP 或 EAP 操作视为 Linux 当前前端的公开能力。当前支持边界见Wi-Fi 高级用法。
新增入口时,需同步更新载荷导出、加载器包装和调用方,并通过正常构建重新生成导入桩和 out/generated/radio-kernel-symbols.txt 导出保留列表。该列表通过 CONFIG_UNUSED_KSYMS_WHITELIST 供内核裁剪使用;不要手工编辑生成文件。共享结构或调用约定变化时,更新所有使用方及相应 ABI,重建整套镜像。内核默认裁剪未使用导出;新的模块依赖也需参与同次内核构建,参见构建配置。
内存和回调
多数代码在 Flash 中执行,选定的 Wi-Fi 代码复制到固定 SRAM 区域。可写数据与 BSS 使用内核中的 40 KiB PSRAM arena,其地址依赖实际内核构建。无线堆不能覆盖仍在执行的 SRAM 代码;详细边界见内存映射。
无线回调可能在中断上下文执行。receive_aux 帧为借用数据,需要跨回调使用时必须先复制。当前接收路径使用 NAPI,并可能进行原子分配。
无线状态介绍 radio_health,用于检查堆使用量、容量、丢包、初始化结果和工作线程活动。请同时检查 dmesg 中的分配失败或加载错误。
测试更新
启动后按Wi-Fi 与蓝牙设置检查变更涉及的模式,再检查组合模式。覆盖启动、数据传输、队列压力、停止和重新加载,并记录实际执行的测试及结果。HIL 指南包含对端测试。当前活动 Wi-Fi 接口会拒绝挂起,不能将运行时重启支持视为自动重连保证。
make radio-package 可创建工程用无线归档。分发含第三方库的固件前,请阅读发布与许可。