逆向WiFi驱动板 RISC-V BL602
字数 2204 2025-08-22 12:23:13
BL602 RISC-V WiFi驱动逆向工程教学文档
1. 逆向工程目的
- 教育目的:理解BL602芯片上WiFi数据包的传输和接收机制
- 故障排除:定位和修复WiFi驱动问题
- 安全审计:验证数据传输的安全性和正确性
- 驱动替换:未来可能用开源驱动(如Openwifi)替代闭源驱动
2. BL602 WiFi固件架构
2.1 核心组件
- WiFi管理任务:基于FreeRTOS的状态机,管理连接状态
- WiFi固件任务:控制WiFi固件运行,处理内核事件
- RivieraWaves协议栈:
- UMAC(上层MAC):运行在RISC-V CPU,处理协议逻辑
- LMAC(下层MAC):运行在无线电硬件,处理物理层操作
2.2 关键流程
-
初始化阶段:
- 注册WiFi事件回调
aos_register_event_filter(EV_WIFI, event_cb_wifi_event) - 启动WiFi堆栈
cmd_stack_wifi() - 触发事件
CODE_WIFI_ON_INIT_DONE启动管理任务
- 注册WiFi事件回调
-
连接WiFi热点:
wifi_mgmr_sta_enable(); // 启用STA模式 wifi_mgmr_sta_connect(); // 发起连接- 状态机处理连接请求 → 通过
bl_cfg80211_connect()传递802.11参数 - LMAC通过共享RAM和中断机制处理连接
- 状态机处理连接请求 → 通过
-
数据包传输:
- 内核事件调度器
ke_evt_schedule()处理TX/RX事件 - TXL模块(如
txl_payload_handle)通过寄存器0x44A00020触发硬件发送
- 内核事件调度器
3. 关键代码模块分析
3.1 WiFi管理模块
- 源码位置:
wifi_mgmr.c - 核心函数:
wifi_mgmr_start_background():启动状态机wifi_mgmr_api_connect():处理连接请求
- 状态机转换:通过
wifi_mgmr_event_notify()发送消息队列
3.2 LMAC通信机制
- IPC共享RAM:
ipc_host_msg_push()复制数据到硬件缓冲区 - 中断触发:
REG_IPC_APP_WR(REG_WIFI_REG_BASE, IPC_APP2EMB_TRIGGER_INDEX, value);- 写入未公开的寄存器
0x44800000触发LMAC中断
- 写入未公开的寄存器
3.3 反编译关键发现
- WiFi Supplicant:与Rockchip RK3399的Linux实现高度一致(约2500行匹配代码)
- 物理层函数:
phy_init() → 包含mdm_reset()、agc_config()等- 部分匹配GitHub上的BL602物理层实现
4. 逆向工程工具链
-
反编译工具:
- Ghidra(需配置BL602专用插件)
- 参考项目:
BraveHeartFLOSSDev/bl602nutcracker1
-
代码匹配技巧:
- GitHub搜索函数名(如
ke_evt_schedule) - 使用条件过滤(
filename:.c language:C)
- GitHub搜索函数名(如
-
调试方法:
- 通过未公开寄存器(如
0x44B08180)追踪硬件行为 - 断言消息定位关键逻辑(如
blmac_tx_ac_state_getf() != 2)
- 通过未公开寄存器(如
5. 模块代码匹配统计
| 模块类型 | 匹配状态 | 代码行数 | 来源项目 |
|---|---|---|---|
| UMAC | 完全匹配 | 6,500 | AliOS-Things/RivieraWaves |
| LMAC接口 | 部分匹配(50%) | 3,500 | 反编译代码 + 寄存器分析 |
| WiFi Supplicant | 完全匹配(Linux移植) | 2,500 | Rockchip RK3399内核 |
| 物理层 | 部分匹配(50%) | 1,800 | jixinintelligence/bl602-604 |
6. 深入逆向步骤
-
提取函数列表:
grep -n "^[_a-zA-Z]" bl602_demo_wifi.c | grep -v LAB_ > functions.txt -
分类分析:
- 按前缀分类(如
txl_、rxl_对应LMAC层) - 优先分析复杂函数(通过行数排序)
- 按前缀分类(如
-
交叉验证:
- 对比反编译代码与公开源码的寄存器操作差异
- 验证中断触发路径(如IPC → LMAC)
7. 未解决问题
- 闭源组件:
- 部分LMAC实现(如APM/CFG模块)
- 物理层的TDMA时序控制
- 寄存器文档:
- WiFi寄存器区域
0x44000000未公开
- WiFi寄存器区域
8. 扩展资源
- 参考项目:
- 调试工具:
- JTAG调试器 + Wireshark捕获WiFi帧
9. 后续方向
-
开源驱动开发:
- 基于RivieraWaves UMAC重构驱动
- 替换LMAC闭源部分为Openwifi组件
-
安全审计重点:
- 检查WPA2密钥交换流程(
supplicantInit) - 验证DMA缓冲区边界
- 检查WPA2密钥交换流程(
-
性能优化:
- 分析
ke_evt_schedule调度延迟 - 优化TX/RX中断响应时间
- 分析
(注:本文档省略了AWS IoT、FreeRTOS等非WiFi核心模块的详细分析,聚焦驱动层逆向要点)