固件格式

BIN、Intel HEX 与 Motorola S-record 入门

比较原始二进制映像与两类带地址记录的文本格式,理解转换时需要核对的边界。

固件文件的后缀只能提供线索,不能独立说明数据应该写到哪里、目标器件如何接收它,或其中是否包含产品特定的头部。BIN、Intel HEX 和 Motorola S-record 的一个主要区别,是地址信息如何表达。

BIN:按字节保存的原始数据

BIN 通常是连续字节内容,没有通用的文本记录头来声明目标地址、器件型号或内存区域。转换工具可以把选定的程序段写成原始二进制数据;例如 GNU objcopy 对 binary 输出的说明是按所选内容生成内存转储,起点与输入段的装载地址有关。因此使用 BIN 时,必须从构建产物说明或目标编程工具确认地址、长度、空洞填充和数据排列规则。

Intel HEX:包含地址与记录类型的文本记录

Intel HEX 是 ASCII 文本记录格式。常见记录包含字节数、地址、记录类型、数据和校验字段;扩展地址记录可影响后续数据记录的绝对地址。解析器据此重建数据及地址范围。实际编程器是否接受某一变体、支持哪些记录类型,仍取决于该工具。

Motorola S-record:带地址的文本记录

S-record 由多种记录类型组成,记录中通常含长度、地址、数据和校验值;不同数据记录类型使用不同长度的地址字段,文件也可包含头部和结束记录。记录结构来自 Motorola/Freescale/NXP 工具文档,工具对记录类型的支持范围应单独确认。

转换时检查什么

地址记录型格式不自动等于完整的、可直接启动的固件包;原始 BIN 也不意味着数据一定从地址零开始。准备通过 JTAG 写入时,可按 JTAG 固件编程流程 先核实映像再选编程路径。

参考资料