dt2c:把设备树交给 C 编译器
dt2c:把固定设备树交给 C 编译器很多嵌入式项目都沿用同一条设备树处理链路:dtc 把 DTS 编译成 DTB,固件把 DTB 带到目标板上,驱动再用 libfdt 查询。这样做没有问题,而且允许上一级 bootloader 在交接前修改设备树。 有些固件其实用不到这份灵活性。一块固定型号的 MCU 板、片上 SRAM 中运行的 SPL、按板型分别发布的 bootloader,或者 SoC…
dt2c:把固定设备树交给 C 编译器很多嵌入式项目都沿用同一条设备树处理链路:dtc 把 DTS 编译成 DTB,固件把 DTB 带到目标板上,驱动再用 libfdt 查询。这样做没有问题,而且允许上一级 bootloader 在交接前修改设备树。 有些固件其实用不到这份灵活性。一块固定型号的 MCU 板、片上 SRAM 中运行的 SPL、按板型分别发布的 bootloader,或者 SoC…
从一个 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 #…