逆向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 关键流程
  1. 初始化阶段

    • 注册WiFi事件回调 aos_register_event_filter(EV_WIFI, event_cb_wifi_event)
    • 启动WiFi堆栈 cmd_stack_wifi()
    • 触发事件 CODE_WIFI_ON_INIT_DONE 启动管理任务
  2. 连接WiFi热点

    wifi_mgmr_sta_enable();       // 启用STA模式
    wifi_mgmr_sta_connect();      // 发起连接
    
    • 状态机处理连接请求 → 通过bl_cfg80211_connect()传递802.11参数
    • LMAC通过共享RAM和中断机制处理连接
  3. 数据包传输

    • 内核事件调度器 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共享RAMipc_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. 逆向工程工具链

  1. 反编译工具

    • Ghidra(需配置BL602专用插件)
    • 参考项目:BraveHeartFLOSSDev/bl602nutcracker1
  2. 代码匹配技巧

    • GitHub搜索函数名(如ke_evt_schedule
    • 使用条件过滤(filename:.c language:C
  3. 调试方法

    • 通过未公开寄存器(如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. 深入逆向步骤

  1. 提取函数列表

    grep -n "^[_a-zA-Z]" bl602_demo_wifi.c | grep -v LAB_ > functions.txt
    
  2. 分类分析

    • 按前缀分类(如txl_rxl_对应LMAC层)
    • 优先分析复杂函数(通过行数排序)
  3. 交叉验证

    • 对比反编译代码与公开源码的寄存器操作差异
    • 验证中断触发路径(如IPC → LMAC)

7. 未解决问题

  • 闭源组件
    • 部分LMAC实现(如APM/CFG模块)
    • 物理层的TDMA时序控制
  • 寄存器文档
    • WiFi寄存器区域0x44000000未公开

8. 扩展资源

9. 后续方向

  1. 开源驱动开发

    • 基于RivieraWaves UMAC重构驱动
    • 替换LMAC闭源部分为Openwifi组件
  2. 安全审计重点

    • 检查WPA2密钥交换流程(supplicantInit
    • 验证DMA缓冲区边界
  3. 性能优化

    • 分析ke_evt_schedule调度延迟
    • 优化TX/RX中断响应时间

(注:本文档省略了AWS IoT、FreeRTOS等非WiFi核心模块的详细分析,聚焦驱动层逆向要点)

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热点 : 状态机处理连接请求 → 通过 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() 复制数据到硬件缓冲区 中断触发 : 写入未公开的寄存器 0x44800000 触发LMAC中断 3.3 反编译关键发现 WiFi Supplicant :与Rockchip RK3399的Linux实现高度一致(约2500行匹配代码) 物理层函数 : 部分匹配GitHub上的BL602物理层实现 4. 逆向工程工具链 反编译工具 : Ghidra(需配置BL602专用插件) 参考项目: BraveHeartFLOSSDev/bl602nutcracker1 代码匹配技巧 : GitHub搜索函数名(如 ke_evt_schedule ) 使用条件过滤( filename:.c language:C ) 调试方法 : 通过未公开寄存器(如 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. 深入逆向步骤 提取函数列表 : 分类分析 : 按前缀分类(如 txl_ 、 rxl_ 对应LMAC层) 优先分析复杂函数(通过行数排序) 交叉验证 : 对比反编译代码与公开源码的寄存器操作差异 验证中断触发路径(如IPC → LMAC) 7. 未解决问题 闭源组件 : 部分LMAC实现(如APM/CFG模块) 物理层的TDMA时序控制 寄存器文档 : WiFi寄存器区域 0x44000000 未公开 8. 扩展资源 参考项目 : Openwifi开源驱动 BL602硬件手册 调试工具 : JTAG调试器 + Wireshark捕获WiFi帧 9. 后续方向 开源驱动开发 : 基于RivieraWaves UMAC重构驱动 替换LMAC闭源部分为Openwifi组件 安全审计重点 : 检查WPA2密钥交换流程( supplicantInit ) 验证DMA缓冲区边界 性能优化 : 分析 ke_evt_schedule 调度延迟 优化TX/RX中断响应时间 (注:本文档省略了AWS IoT、FreeRTOS等非WiFi核心模块的详细分析,聚焦驱动层逆向要点)