OpenixCLI 刷机流程重构:把散落的拼图拼回去
从一个 README 错误说起改这个之前,README 里有个例子一直跑不通: openixcli flash firmware.img --verify false --verify 在 clap 里是个 flag,false 会被当成多余参数报错。问题不大,但修着修着发现类似的”小问题”还有一堆——FlashMode 定义了两份、post_action 用字符串传来传去、CLI 和 TUI…
从一个 README 错误说起改这个之前,README 里有个例子一直跑不通: openixcli flash firmware.img --verify false --verify 在 clap 里是个 flag,false 会被当成多余参数报错。问题不大,但修着修着发现类似的”小问题”还有一堆——FlashMode 定义了两份、post_action 用字符串传来传去、CLI 和 TUI…
libefex 模块架构层级架构libefex 采用清晰的分层架构设计,从底层 USB 驱动到高层 API 逐层抽象: graph TB subgraph Application["应用层"] A1[CLI Tools] A2[Test Programs] A3[Rust Bindings] end subgraph API["API 层"] …
libefex FEL 模式操作FEL 模式简介FEL (Firmware Extraction Level) 是全志芯片 BootROM 中内置的低级子程序模式。在 FEL 模式下,主机可以通过 USB 直接访问设备内存,实现: 内存读取 (sunxi_efex_fel_read) 内存写入 (sunxi_efex_fel_write) 代码执行 (sunxi_efex_fel_exec) FEL 代码执行实现源码位置:…
libefex FES 模式操作FES 模式简介FES (Firmware Extraction Stage) 是 FEL 模式的升级版本,提供更高级的闪存操作能力。FES 模式需要先在 FEL 模式下加载特定固件才能进入。 FES vs FEL 对比 特性 FEL 模式 FES…
libefex 架构 PayloadPayload 技术概述Payload 是一种机器码注入技术,用于在 FEL 模式下执行复杂的硬件操作。由于 FEL 只提供基础的内存读写和代码执行能力,要实现寄存器读写等高级操作,需要将特定的机器码写入设备内存并执行。 flowchart TD A[需要硬件操作] --> B[选择 CPU 架构] B --> C{架构类型?} C…
libefex 跨平台 USB 后端USB 后端概述libefex 需要跨平台支持 Linux、macOS 和 Windows。由于不同平台的 USB 驱动接口不同,项目采用后端抽象层设计: libusb: 开源跨平台 USB 库(Linux、macOS、可选 Windows) WinUSB: Windows 专用 USB 驱动框架 graph TB subgraph Application["应用层"] …
libefex USB 协议层USB 数据包结构libefex 使用特定的数据包格式与 Sunxi 设备通信。所有通信基于 USB 批量传输。 请求包结构 (sunxi_usb_request_t)源码位置: includes/efex-protocol.h:115-127 EFEX_PACKED_BEGINstruct sunxi_usb_request_t { union { char magic[4]; …
概述命令行接口(CLI)是嵌入式工具与用户交互的第一道关卡。OpenixCLI 使用 Rust 最流行的 CLI 解析库 clap(Command Line Argument Parser),通过 derive 宏模式实现声明式的命令定义,让开发者专注于业务逻辑而非参数解析细节。 模块结构src/├── cli.rs # CLI 定义(derive 宏)├── main.rs #…
概述Commands 模块是 CLI 与核心刷写逻辑之间的桥梁。它实现了 scan 和 flash 两个主要命令,负责设备检测、固件加载、参数转换等准备工作,然后将任务交给 Flash 模块执行实际的刷写流程。 模块结构src/commands/├── mod.rs # 模块导出├── scan.rs # 设备扫描命令├── flash.rs # 固件刷写命令└── types.rs #…
概述Flash 模块是 OpenixCLI 的核心刷写引擎,负责协调 FEL(USB Boot)和 FES(U-Boot)两种模式的固件刷写流程。它处理设备检测、DRAM 初始化、U-Boot 下载、设备重连、分区刷写、Boot 写入等完整流程,是嵌入式固件刷写的典型实现。 模块结构src/flash/├── mod.rs # Flasher 主控制器├── fel_handler/ …