嵌入式固件产物文件格式全览

Abstract

嵌入式开发从编译到烧录,会产生多种格式的产物文件。理解每种格式的用途和特点,是高效开发的基础。
本文按用途分类,系统梳理所有常见格式。内容既涵盖二进制固件产物,也包含调试辅助文件构建记录等开发过程中有价值的文件类型。
备注:近期烧录客户板子遇到多种格式,在笔记中整理常见的烧录格式,分享出来,欢迎大家补充 阅读 批评 指正。support@softor.com.cn


一、编译器直接输出(源产物)

1. ELF(.elf)— 通用源头母文件

是什么:编译器(GCC、IAR、TASKING 等)生成的原始目标文件,是整个工具链的核心产物。采用 Executable and Linkable Format,是当今嵌入式领域最主流的可执行格式。

特点:包含最全信息——代码、数据、符号表、调试信息(DWARF)、段地址等。

用途

示例

# GCC / ARM-none-eabi 编译输出
stm32f103c8t6.elf

# TASKING TriCore 编译输出
tc397_app.elf

# IAR 编译输出
project.elf

2. TI COFF(.out)— TI 传统格式

是什么:Texas Instruments 早期编译器(老版本 CCS)产生的目标文件,采用 Common Object File Format(COFF),并非 ELF

特点:结构与 ELF 不同,符号表、段的组织方式有 TI 私有扩展;老版本 DSP(C2000、C5000、C6000)和部分 MSP430 项目常见。

Warning

注意虽然 TI 新版 CCS(基于 LLVM/Clang 的 ti-arm-clang 工具链)已全面转向 ELF 输出,但维护老项目时仍会遇到 COFF 格式的 .out 文件,值得单独了解。

用途

示例

# TI CCS 旧版编译输出(COFF 格式)
project.out

# C2000 DSP 旧项目
f280049c_control.out

3. AXF(.axf)— ARM 调试中的主力

是什么:ARM 工具链(Keil MDK、ADS、RVDS)生成的可执行目标文件。

特点本质上是带有 ARM 特定扩展的 ELF(ARM Executable Format),工具链内部可当作 ELF 处理。同时包含代码与调试信息,Keil 生态专属。

用途:主要在 ARM 调试器中直接加载,如 Keil MDK、ULINK 调试会话。

示例

# Keil MDK 编译输出
Project.axf

# 带版本信息的命名
firmware_v2.1.0.axf

4. 目标文件(.o / .obj)— 编译中间产物

是什么:编译器将单个.c / .s 源文件编译后的中间产物,尚未链接。

特点:包含该编译单元的机器码和符号,但地址未最终确定;多个 .o 文件由链接器合并为最终的 ELF/AXF。

用途

示例

# GCC 编译中间产物
main.o
startup_stm32f103.o
system_stm32f1xx.o

# Keil 编译中间产物
main.obj

# TASKING 编译中间产物
isr.o

5. 静态库(.a / .lib)— 代码的”打包快递”

是什么:将多个 .o 文件打包归档的文件,本质是目标文件的集合。

特点:链接时按需提取其中被引用的 .o;不包含动态链接信息。

用途

示例

# GCC / ARM-none-eabi 静态库
libstm32f1xx_hal.a
libfreertos.a

# Keil 静态库
stm32f1xx_hal.lib

# TASKING 静态库
libi2c.a

二、调试辅助文件

6. MAP 文件(.map)— 内存布局的”地图”

是什么:链接器生成的文本文件,记录了所有符号的地址、大小以及内存分配详情。

特点:纯文本,可人工阅读;包含段(Section)映射、符号地址表、内存用量统计。

用途

示例

# GCC / ld 链接输出
Project.map

# Keil 链接输出
Project.map

# TASKING TriCore 链接输出
tc397_app.map

Tip

实用技巧在 MAP 文件中搜索 Memory region 可以快速找到 Flash/RAM 的使用汇总,判断是否接近上限。


7. Listing 文件(.lst / .src)— 汇编与源码的对照表

是什么:编译器/汇编器生成的混合文件,将 C 源码、对应的汇编指令和地址交织在一起。

特点:左侧是地址和机器码,中间是汇编,右侧是原始 C 代码行号。

用途

示例

# GCC -S 或 -Wa,-ahl=s 输出
main.lst

# Keil 生成的汇编列表
startup_stm32f103.lst

# TASKING 生成的汇编列表
isr_handler.lst

8. 符号文件(.sym)— 符号地址速查表

是什么:从 ELF 中提取的符号名与地址的对应表,精简版调试信息。

特点:体积小,只保留符号名和地址,不含源码行号。

用途

示例

# nm 工具导出
firmware.sym

# addr2line 可直接使用此文件
arm-none-eabi-nm -n firmware.elf > firmware.sym

# TASKING TriCore
tricore-nm -n tc397_app.elf > tc397_app.sym

三、烧录/编程格式

9. Intel HEX(.hex / .ihex)— 生产烧录的”国际通行证”

是什么:ASCII 文本文件,以 : 开头,记录地址、数据和校验和。

特点:带地址、带校验,可靠;几乎所有编程器、下载工具都支持。

用途:量产烧录、板级在线编程(如 STM32 的 ISP 下载)。

示例

# 典型 HEX 文件内容
:020000040800F2
:1000000018F09FE518F09FE518F09FE518F09FE5C0
:1000100018F09FE518F09FE518F09FE518F09FE5B0
:00000001FF

Warning

注意区分有时也会见到 .hex 后缀但实际是 Motorola S-record,开头的标识是 S 而非 :,注意区分。


10. Intel HEX with Extensions(.hex)— 带扩展的 HEX

是什么:在标准 Intel HEX 基础上,利用扩展记录类型(Type 04~05 等)携带额外信息,如分段地址、厂商专属数据块等。

特点:文件结构仍以 : 开头,与标准 HEX 兼容,但部分记录的含义由厂商自定义。

用途

示例

# NXP S32K 带安全扩展的 HEX
s32k344_app_with_hse.hex

# 包含 CSEc 密钥和用户固件的合并 HEX
s32k144_secure_boot.hex

Note

使用提示烧录此类 HEX 时,需使用厂商提供的专用工具(如 NXP S32 Flash Tool),普通编程器可能无法正确解析扩展段。


11. TI-TXT(.txt)— TI 早期十六进制格式

是什么:德州仪器早期定义的 ASCII 十六进制格式,用 @ 标记地址,后续行为该地址的数据。

特点:结构比 Intel HEX 更简单,没有校验和字段;每行格式为 @地址 + 数据

用途

示例

# TI-TXT 文件内容
@1800
31 40 00 02 B2 40 80 5A
31 40 02 02 B2 40 80 5A
@1A00
FF FF FF FF FF FF FF FF
q

Info

备注文件末尾的 q 表示结束。虽然格式简单,但因缺少校验和,传输可靠性不如 Intel HEX 和 S-record。


12. Motorola S-record(.s19 / .srec / .mot)— 另一大通用格式

是什么:和 Intel HEX 类似的 ASCII 格式,以 S 开头。

特点:结构类似 HEX,常见变体:

Tip

快速识别文件扩展名常暗示地址宽度:.s19 = 16 位、.s28 = 24 位、.s37 = 32 位,但也有统一使用 .srec 或 .mot 的情况,需查看文件内容中的记录类型确认。

用途:在一些工业控制、汽车电子、Freescale/NXP 老平台中很常见。

示例

S19(16 位地址,S1 数据记录):

# .s19 文件 — Freescale/NXP 68HC12 / S08 系列
S00600004844521B
S1137A00A48568656C6C6F20576F726C642D0D0A61
S1137A1245686C6C6F20576F726C642D0D0A49
S5030003F9
S9030000FC

S28(24 位地址,S2 数据记录):

# .s28 文件 — NXP MPC56xx / MPC57xx 系列
S00600004844521B
S214100000010020B5048000807000000000000000C
S21410001070B5024B0700088080808080808080809
S5030003F9
S804000000FB

S37(32 位地址,S3 数据记录):

# .s37 文件 — NXP S32R29 / 大地址空间芯片
S00600004844521B
S315800000004800780008000000000000000000000000
S315800000104800780008000000000000000000000000
S5030002FA
S70500000000FA

Tip

记录类型速记


13. Binary(.bin)— 最原始纯粹的镜像

是什么:没有任何地址、校验、格式信息的纯二进制数据流。

特点:最紧凑、最快写入,但必须明确知道加载地址,否则无法使用。

用途

Note

加密烧录有的加密烧录器要求带签名的 .signed.bin,本质是在 BIN 前后附加签名头/尾,并非独立格式,但生产环节需留意。

示例

文件名示例:

# STM32 固件二进制
firmware.bin

# ESP32 分区表二进制
partitions.bin

# 文件系统镜像
littlefs.bin
spiffs.bin

# 带签名的加密固件
firmware_v2.1.0.signed.bin

Warning

无法直接展示内容.bin 是纯二进制文件,无法像 HEX/S-record 那样用文本编辑器查看。通常用 hexdump / xxd 等工具查看其十六进制表示:

# 用 xxd 查看前 32 字节
xxd firmware.bin | head -4

# 输出示例(STM32 Cortex-M4 固件开头)
00000000: 0000 0020 7101 0000 0d12 0000 0d12 0000  ...q............
00000010: 0d12 0000 0d12 0000 4b02 0000 0100 0000  .......K.......

其中 0x00000000 处的 00 00 00 20 是 Cortex-M 的初始 SP 值(0x20000000,指向 RAM 顶部),紧接着 71 01 00 00 是Reset 向量(0x00000171,即复位函数地址)。这就是为什么 BIN 必须明确加载地址——文件本身不携带任何地址信息。


14. UF2(.uf2)— USB 拖拽烧录格式

是什么:Microsoft 为微控制器设计的 USB 批量传输固件格式,由 Adafruit 和 MicroPython 推广。

特点:每个数据块 512 字节(与 USB 批量传输端点大小一致),包含目标地址和魔术数(UF2
);设备进入 Bootloader 模式后表现为 U 盘,直接拖入即可烧录。文件末尾可能填充到 512 的整数倍。

用途

示例

# Raspberry Pi Pico 固件
firmware_pico.uf2

# CircuitPython
circuitpython_mpy.uf2

# Adafruit Feather 固件
feather_nrf52840.uf2

15. DFU 文件(.dfu)— USB Device Firmware Upgrade 格式

是什么:ST 等厂商定义的 USB 固件升级格式,包含固件数据和目标地址信息。

特点:通过 USB DFU 协议传输,STM32 内置 Bootloader 原生支持。

用途

示例

# STM32CubeProgrammer 生成的 DFU
firmware.dfu

# dfu-util 可直接烧录
dfu-util -a 0 -D firmware.dfu

四、JTAG / 边界扫描格式

16. SVF(.svf)— JTAG 串行向量格式

是什么:Serial Vector Format,描述 JTAG TAP 状态机操作的 ASCII 文本脚本。

特点:平台无关,所有 JTAG 工具通用;描述的是 TDI/TDO 的位序列。

用途

示例

! SVF 文件示例(Xilinx FPGA 配置)
!REVISION 1.0
ENDDR DR;
STATE RESET;
SIR 8 TDI (E0);
SDR 0 TDI (00000000000000000000000000000000);
RUNTEST 1 TCK;

17. XSVF(.xsvf)— SVF 的二进制压缩版

是什么:Xilinx Serial Vector Format,SVF 的紧凑二进制版本。

特点:体积更小,解析更快,适合嵌入式播放器。

用途:嵌入式 JTAG 播放器(如嵌入式系统中用 MCU 通过 JTAG 配置 FPGA)。

示例

# Xilinx 工具生成
fpga_config.xsvf

# 嵌入式 JTAG 播放器加载
# svf2xsvf input.svf output.xsvf

18. J-Link Script(.jlink)— SEGGER J-Link 脚本

是什么:SEGGER J-Link 的命令脚本,用于自动化 JTAG/SWD 操作。

特点:可编程控制 J-Link 执行烧录、擦除、读取等操作。

用途

示例

// J-Link Commander 脚本
connect
device STM32F103C8
h
loadbin firmware.bin 0x08000000
r
go
quit

五、磁盘/分区镜像格式

19. 磁盘镜像(.img)— 完整分区或磁盘的克隆

是什么:包含完整分区表和文件系统的二进制镜像。

特点:可包含多个分区(boot、rootfs 等),直接写入 SD 卡或 eMMC。

用途

示例

# 树莓派系统镜像
raspbian-buster-lite.img

# Yocto / Buildroot 输出
sdcard.img

# ESP32 分区表 + 应用合并镜像
merged_flash.img

六、专有 OTA / 固件包格式

20. GBL(.gbl)— Silicon Labs OTA 升级包

是什么:Silicon Labs(原 Energy Micro)定义的 Gecko Bootloader 固件升级格式。

特点:包含固件数据、版本号、签名和升级元信息;支持差分升级。

用途

示例

# Silicon Labs OTA 升级包
firmware_v2.1.0.gbl

# 差分升级包(仅包含差异部分)
firmware_v2.0.0_to_v2.1.0.gbl

21. EBL(.ebl)— Silicon Labs 旧版升级包

是什么:Silicon Labs 早期的 Ember Bootloader 格式,GBL 的前身。

特点:功能较 GBL 简单,不支持差分升级。

用途:旧版 EFR32/EM35x 芯片的 OTA 升级。

示例

# 旧版 OTA 包
firmware.ebl

22. Nordic DFU Package(.zip)— Nordic OTA 升级包

是什么:Nordic Semiconductor 为 nRF5 系列定义的 DFU(Device Firmware Update)包,本质是一个 ZIP 压缩包。

特点:ZIP 内包含 manifest.json(版本、大小等元信息)和 firmware.bin(实际固件数据),支持签名校验和差分升级。

用途

示例

# Nordic DFU 升级包(ZIP 格式)
app_dfu_v2.1.0.zip

# 差分 DFU 包
app_dfu_v2.0.0_to_v2.1.0.zip

七、特殊/厂商专属格式

23. Nordic SoftDevice / 应用固件(.hex / .bin)— Nordic nRF5 双区固件结构

是什么:Nordic Semiconductor 的 nRF5 系列芯片的 SoftDevice(蓝牙协议栈)和应用固件。

特点:SoftDevice 是预编译的蓝牙协议栈,位于 Flash 固定区域;应用固件在其上方运行。

用途

示例

# Nordic SoftDevice
s132_nrf52_7.2.0_softdevice.hex

# Nordic 应用固件
ble_app_blinky_s132.hex

24. ESP-IDF 分区表(.bin)— ESP32 分区布局

是什么:ESP-IDF 定义的 Flash 分区表二进制文件,描述各分区的类型、偏移和大小。

特点:包含 bootloader、app、data 等分区的布局信息。

用途

示例

# ESP32 默认分区表
partitions_singleapp.bin

# 自定义分区表
partitions.csv → partitions_custom.bin

八、平台调试符号文件

25. DSYM(.dsym)— macOS/iOS 调试符号

是什么:macOS 平台的调试符号文件,从 Mach-O 二进制中剥离。

特点:包含 DWARF 调试信息,与可执行文件分离存储。

用途

示例

# Xcode 构建输出
MyApp.app.dSYM

26. PDB(.pdb)— Windows 调试符号

是什么:Program Database,微软 Visual Studio 生成的调试符号文件。

特点:包含源码行号、变量类型、函数地址等调试信息。

用途

示例

# Visual Studio 构建输出
firmware.pdb

九、构建辅助文件

27. Build Log / 编译日志(.log / .build_log)— 构建过程记录

是什么:构建系统(Make、CMake、Keil 等)输出的编译过程日志。

特点:记录编译命令、警告、错误、时间戳等。

用途

示例

# CMake / Make 构建日志
build.log

# Keil 构建日志
Project._BuildLog.htm

# TASKING 构建日志
build_log.txt

十、运行时诊断产物

28. Core Dump(.core / .dmp)— 运行时崩溃转储

是什么:程序崩溃时保存的内存快照,包含寄存器状态和内存内容。

特点:需要配合符号文件(ELF/AXF)才能解析;不属于编译产物,而是运行时产物。

用途

示例

# Linux 嵌入式 core dump
core.12345

# Windows minidump
crash_snapshot.dmp

# FreeRTOS 崩溃转储
freertos_core_dump.bin

十一、TASKING 工具链产物格式

Info

关于 TASKINGTASKING 是汽车电子领域广泛使用的高级编译工具链,主要支持 Infineon TriCore(AURIX)、ARM Cortex、Power Architecture 等架构。其产物格式覆盖从中间文件到最终烧录文件的完整链路。

TASKING 可输出的格式

格式
扩展名
说明
ELF/DWARF
.elf 默认输出

,包含完整调试信息,调试器直接使用
Intel HEX
.hex
通过 --chip-output=IHEX 生成,支持 8/16/32 位地址
Motorola S-record
.sre

 / .srec
通过 --chip-output=SREC 生成,支持 S1/S2/S3 记录
Binary
.bin
通过 --chip-output=BIN 生成,每个 ROM 内存区域单独输出
C Array
.c

 / .h
通过 --format=CARR 生成,将固件数据以 C 数组形式输出
MAP
.map
链接时自动生成,记录符号地址和内存布局
Listing
.lst
编译时通过 --list 选项生成汇编列表
目标文件
.o
编译中间产物
静态库
.a
多个 .o 打包归档

TASKING 典型工作流(以 TC397 为例)

源文件 (.c/.s)
    ↓ cctc (编译器)
目标文件 (.o)
    ↓ ltc (链接器)
ELF (.elf)          ← 调试用(默认)
    ↓ --chip-output
HEX (.hex)          ← 烧录用
SREC (.sre)         ← 烧录用(汽车电子常见)
BIN (.bin)          ← 烧录用(每个 ROM 区域单独文件)

示例

# TASKING TriCore 编译输出
tc397_app.elf                    # 调试用
tc397_app_pflash.hex             # Program Flash 烧录
tc397_app_dflash.hex             # Data Flash 烧录
tc397_app_pflash.bin             # 纯二进制
tc397_app.map                    # 内存布局
isr_handler.lst                  # 汇编列表

# TASKING 命令行示例
cctc --cpu=tc397 --list main.c -o main.o
ltc --chip-output=tc397_app:IHEX main.o startup.o -o tc397_app.elf

十二、iSystem winIDEA 支持的调试与烧录格式

Info

关于 iSystemiSystem 是专业的嵌入式调试工具厂商,其 winIDEA IDE 配合 BlueBox 硬件调试器,广泛用于汽车电子(Infineon AURIX、Renesas RH850、NXP S32 等)的调试和烧录。winIDEA 本身不产生编译产物,但支持加载多种第三方编译器生成的格式进行调试和下载。

winIDEA 支持的文件格式

格式
说明
典型来源
ELF / DWARF 推荐格式

,包含代码 + 调试信息
GCC、TASKING、IAR、Green Hills
IEEE-695
早期标准调试格式,不含 DWARF
部分老版编译器
Intel Extended HEX
扩展 Intel HEX,含符号信息
部分量产工具输出
Motorola S (S19)
S-record 格式
汽车电子常见
OMF-51
8051 目标模块格式
Keil C51
OMF2 251/MX51
80251 扩展 OMF 格式
Keil C251
SLO
iSystem 自有文本格式
winIDEA 内部使用
TMS COFF
TI COFF 格式
TI CCS 旧版
UBROF
Universal Binary Object File Format
IAR 旧版

winIDEA 调试/烧录示例

1. Infineon AURIX TC39x(TriCore 架构)

调试文件:  tc397_app.elf          ← TASKING 编译输出
烧录文件:  tc397_app.elf          ← winIDEA 直接从 ELF 下载
            或 tc397_app_pflash.hex ← 量产烧录用 HEX

winIDEA 操作流程:
1. Debug → Files for Download → Add → 选择 tc397_app.elf
2. File Format 自动检测为 ELF
3. Load Code and Load Symbols → Download
4. 支持源码级断点调试、变量观察、Trace 采集

2. Renesas U2A16 / U2C(RH850 架构)

调试文件:  u2c_app.elf            ← Green Hills 或 Renesas 编译器输出
烧录文件:  u2c_app.elf            ← winIDEA 直接下载
            或 u2c_app.srec        ← 量产烧录用 S-record

winIDEA 操作流程:
1. Debug → Files for Download → Add → 选择 u2c_app.elf
2. 配置 RH850 CPU 架构选项
3. Load Code and Load Symbols → Download
4. 支持 RH850 多核调试、Trace、Coverage 分析

3. NXP S32K3(ARM Cortex-M7 架构)

调试文件:  s32k344_app.elf        ← GCC / S32DS 编译输出
烧录文件:  s32k344_app.elf        ← winIDEA 直接下载
            或 s32k344_app.hex     ← 量产烧录(可能含 HSE/CSEc 扩展段)

winIDEA 操作流程:
1. Debug → Files for Download → Add → 选择 s32k344_app.elf
2. 配置 ARM Cortex-M7 架构选项
3. Load Code and Load Symbols → Download
4. 支持 ARM ETM Trace、数据 Trace、代码覆盖率分析

注意:若 HEX 包含 HSE 固件扩展段,
建议使用 NXP S32 Flash Tool 烧录,
winIDEA 直接下载 ELF 更为可靠。

十三、Softor 量产烧录器

Info

关于 SoftorSoftor(索弗特)是浙江翠展微电子旗下的汽车研发工具链提供商,自主研发量产烧录器系列产品,兼容英飞凌、瑞萨、NXP、ST 等所有主流 MCU 厂家芯片,支持 30000+ 芯片型号,为汽车电子和工业量产提供”快、准、稳”的烧录解决方案。

官网:www.softor.com.cn

Softor 烧录器支持的产物格式

格式
扩展名
说明
ELF .elf
包含调试信息 + 代码,Softor 软件自动解析段地址映射
Intel HEX .hex

 / .ihex
带地址和校验,量产烧录最常用格式
Motorola S-record .s19

 / .srec / .mot
汽车电子(NXP、Freescale)常见
Binary .bin
纯二进制,需配合加载地址配置使用
TI-TXT .txt
TI MSP430 等 legacy 项目支持

Tip

格式自动识别Softor 烧录软件支持文件格式自动识别,加载固件文件后自动判断格式类型并解析。如自动识别不准确,可手动切换指定格式。

Softor 产品系列

型号
通道数
主要特点
SIC7-100
1
120MHz 高速,USB3.0 + 以太网,2500V 隔离,±8kV ESD
SIC7-200
2
双通道并行烧录,适合中小批量
SIC7-400
4
四通道并行烧录,适合中大批量
SIC7-600
6
六通道并行烧录,适合大规模量产
SPH200
2
双通道,抗强干扰,工业恶劣环境专用
SPH400
4
四通道,抗强干扰,工业恶劣环境专用
SPH600
6
六通道,抗强干扰,工业恶劣环境专用

Softor 烧录器与产物格式的对应关系

编译器输出                        Softor 烧录器加载
───────────                       ──────────────
TASKING → .elf / .hex / .sre  ──→  ✅ 直接加载
GCC     → .elf / .hex / .bin  ──→  ✅ 直接加载
Keil    → .axf / .hex         ──→  ✅ 直接加载(.axf 本质为 ELF)
IAR     → .elf / .hex / .bin  ──→  ✅ 直接加载
GreenHill → .elf / .hex       ──→  ✅ 直接加载
TI CCS  → .out (COFF) / .hex  ──→  ✅ .hex 直接加载
TI CCS  → .out (ELF)          ──→  ✅ 直接加载

典型烧录场景

1. Infineon AURIX TC39x

固件文件:  tc397_app.hex          ← TASKING --chip-output=IHEX 输出
           或 tc397_app.sre        ← TASKING --chip-output=SREC 输出
           或 tc397_app.elf        ← 直接使用 ELF

Softor 操作:
1. 加载固件文件(.hex / .sre / .elf 均可)
2. 软件自动解析段地址(PFlash / DFlash / LMU 等)
3. 配置烧录参数(擦除方式、校验方式等)
4. 一键烧录,自动完成 擦除 → 编程 → 校验

2. Renesas U2A16 / U2C(RH850)

固件文件:  u2c_app.elf            ← Green Hills / IAR 编译输出
           或 u2c_app.srec        ← 量产烧录用 S-record

Softor 操作:
1. 加载 .elf 或 .srec 文件
2. 自动识别 RH850 芯片型号
3. 配置烧录区域和参数
4. 支持多通道并行烧录,提升量产效率

3. NXP S32K3(ARM Cortex-M7)

固件文件:  s32k344_app.elf        ← S32DS / GCC 编译输出
           或 s32k344_app.hex     ← 量产烧录用 HEX

Softor 操作:
1. 加载 .elf 或 .hex 文件
2. 若 HEX 包含 HSE/CSEc 扩展段,软件按厂商规范解析
3. 支持 Secure Boot 签名固件的烧录
4. 多通道并行 + MES 追溯,满足车规量产要求

Softor 量产烧录台架

除桌面式烧录器外,Softor 还提供完整的量产烧录台架解决方案:


十四、格式转换速查

Info

常用转换工具

源格式
目标格式
工具/命令
示例
ELF
HEX
objcopy arm-none-eabi-objcopy -O ihex firmware.elf firmware.hex
ELF
BIN
objcopy arm-none-eabi-objcopy -O binary firmware.elf firmware.bin
ELF
S19
objcopy arm-none-eabi-objcopy -O srec firmware.elf firmware.s19
HEX
BIN
objcopy arm-none-eabi-objcopy -I ihex -O binary firmware.hex firmware.bin
BIN HEX `srec_cat` / `objcopy` `srec_cat firmware.bin -binary -offset 0x08000000 -o firmware.hex -intel`
BIN
UF2
uf2conv.py python uf2conv.py firmware.bin -o firmware.uf2
ELF
DFU
objcopy arm-none-eabi-objcopy -O binary firmware.elf firmware.bin && dfu-suffix
AXF
HEX
fromelf

 (Keil)
fromelf --i32 --output firmware.hex firmware.axf
ELF
MAP
ld

 (链接时)
arm-none-eabi-gcc -Wl,-Map=output.map
ELF
SYM
nm arm-none-eabi-nm -n firmware.elf > firmware.sym
ELF
LST
objdump arm-none-eabi-objdump -dS firmware.elf > firmware.lst
ELF
C Array
objcopy arm-none-eabi-objcopy -I elf32-littlearm -O binary firmware.elf firmware.bin && xxd -i firmware.bin > firmware.h

Warning

BIN → HEX 注意BIN 转 HEX 时必须指定基地址(offset),否则所有数据将从地址 0x0000 开始,这在大多数 MCU 上是错误的。生产环节尤其要注意这一点。


十五、场景速查表

阶段
推荐格式
说明
编译输出,供调试器使用
.elf

 / .axf
包含完整调试信息
转换为烧录文件
.hex

 / .bin / .s19
通用烧录格式
量产 / 现场升级
.hex

(最常见)、.bin(特定平台)
兼容性好
IoT 固件升级(Silicon Labs)
.gbl

 / .ebl
专用 OTA 格式
IoT 固件升级(Nordic)
.zip

(DFU Package)
包含 manifest + 固件
教育/拖拽烧录
.uf2
无需工具,拖入即烧
USB 固件升级
.dfu
STM32 原生支持
内存布局分析
.map
查看地址与用量
汇编级调试
.lst
源码与汇编对照
崩溃分析
.sym

 / .core / .dmp
符号反查 + 内存转储
JTAG 自动化烧录
.svf

 / .jlink
生产烧录脚本
Linux 嵌入式系统
.img
SD 卡 / eMMC 烧录
Nordic 蓝牙开发
SoftDevice .hex + App .hex
分层烧录
ESP32 开发
分区表 .bin + 应用 .bin
多分区管理
汽车电子(AURIX)
.elf

(调试)+ .hex/.sre(烧录)
TASKING 工具链
汽车电子(RH850)
.elf

(调试)+ .srec(烧录)
Green Hills / IAR
汽车电子(S32K)
.elf

(调试)+ .hex(烧录)
S32DS / GCC
NXP 安全启动
.hex

(含 HSE/CSEc 扩展段)
需专用工具烧录
MSP430 legacy
.txt

(TI-TXT)
BSL 编程
Softor 量产烧录
.hex

 / .elf / .s19 / .bin
自动识别格式,多通道并行

Quote

总结嵌入式开发中,ELF 是一切的源头(TI 老项目除外,使用 COFF),几乎所有其他格式都由它转换而来。理解每种格式的定位,能在调试、烧录、量产等环节少走弯路。掌握 `objcopy`、`nm`、`objdump` 这三大工具,就能在格式之间自由转换。在汽车电子领域,TASKING 和 iSystem winIDEA 是 TriCore / RH850 / S32 平台的主流工具链,理解它们的产物格式尤为重要。Softor 量产烧录器作为国产自研方案,兼容上述所有主流格式,支持自动识别和多通道并行烧录,是汽车电子量产的高效利器。

如果你在调试 烧录遇到问题,欢迎大家一起交流学习:
support@softor.com.cn
tianpengbo@softor.com.cn

作者与交流

作者:tianpengbo / 田朋博。大家如果在项目中遇到相关技术问题,欢迎联系我交流。
support@softor.com.cn
tianpengbo@softor.com.cn

作者与交流

作者:tianpengbo / 田朋博。大家如果在项目中遇到相关技术问题,欢迎联系我交流。
support@softor.com.cn
tianpengbo@softor.com.cn

在线留言