编译文件

← 返回 编译链接下载 | ← 主页


嵌入式开发里,Keil/IAR 编译完会生成一堆文件。四种最常见的:AXFELFHEXBIN


AXF

AXF 是 ARM 工具链(Keil MDK 的 armlink)产出的可执行文件格式。本质上就是 ARM 魔改过的 ELF,文件结构完全一样:ELF Header + Program Header Table + Sections + Section Header Table。

与通用 ELF 的区别:

  • 加了 ARM 特有调试信息:CoreSight 调试寄存器配置、.ARM.attributes section(架构版本、FPU 是否开启等)
  • 可直接拖进 Keil Debug 仿真,GCC 的 ELF 需要额外转换

AXF 包含的内容

内容说明
机器码最终烧进 Flash 的指令(.text 段)。
数据段初值全局变量、static 变量的初始值(.data.rodata)。
符号表函数、全局变量的地址信息,调试器靠它显示函数名和变量名。
调试信息源代码行号映射、变量类型、作用域 → Keil Debug 单步跟踪。
段布局信息Flash/RAM 分配、入口点、栈和堆初始地址。
ARM 特有属性架构版本(ARMv6M/v7M/v8M)、FPU 是否开启。

AXF = HEX/BIN 的机器码 + 符号表 + 调试信息 + 内存布局。除代码外还加了全套元数据的综合文件。


ELF

ELF 是跨平台的通用可执行文件格式,GCC 工具链(ld)的标准产出。文件结构与 AXF 一致(ELF Header + Program Header Table + Sections + Section Header Table)。

与 AXF 的区别:

  • 不含 ARM 特有调试扩展(.ARM.attributes、CoreSight 配置)
  • 跨架构通用:x86、ARM、RISC-V 都用同一套格式

ARM 嵌入式语境下,“ELF” 一般指 GCC 编译出的 .elf


HEX

Intel HEX 格式,ASCII 文本文件。每行是一条带地址和校验和的记录,告诉烧录器”把这段数据放到哪个地址”。

特点:

  • 自带地址信息,可描述不连续的内存区域
  • 烧录器/编程器通用格式,bootloader 常用
  • 文件比 BIN 大约 2~3 倍(ASCII 编码 + 元数据开销)

BIN

纯二进制格式,只有机器码,没有任何元数据。文件最小、最原始。

特点:

  • 无地址信息,按顺序烧录
  • 文件大小即 Flash 占用大小
  • 不含符号表、调试信息