当前位置: 首页 > news >正文

基于Arm GNU Toolchain编译生成的.elf转hex/bin文件格式方法

基于Arm GNU Toolchain编译生成的.elf转hex/bin文件格式方法


  • 已经弃用的版本(Version 10.3-2021.10):gcc-arm-none-eabi:https://developer.arm.com/downloads/-/gnu-rm
  • Arm GNU Toolchain当前版本:https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads

✨如果是基于MDK Keil ARMCC编译器,可以借助自带的fromelf.exe 进行转换,如果使用arm GNU Toolchain工具链编译所生成的.elf文件,不要使用fromelf.exe 进行转换,两者不能混用。否则转换后的文件烧录不能正常运行。

📗通过arm GNU Toolchain编译后手动生成的.elf格式文件转换

在命令行中手动运行以下命令,确保 arm-none-eabi-objcopy.exe 可以正常工作:

  • 手动转换命令:
"D:\arm-gnu-toolchain\bin\arm-none-eabi-objcopy.exe" -O ihex "D:\STM32\HAL\STM32F405VG_DEMO\build\STM32F405VG_DEMO.elf" "D:\STM32\HAL\STM32F405VG_DEMO\build\STM32F405VG_DEMO.hex"

在这里插入图片描述

  • 为了实现快速转换,可以制作一个.bat批处理文件,实现方便快捷转换。
  • convert_elf_to_hex_bin.bat
@echo off
echo Converting .elf to .hex and .bin...

REM 定义工具路径和输入输出文件路径
set OBJCOPY="D:\arm-gnu-toolchain\bin\arm-none-eabi-objcopy.exe"
set ELF_FILE="D:\STM32\HAL\STM32F405VG_DEMO\build\STM32F405VG_DEMO.elf"
set HEX_FILE="D:\STM32\HAL\STM32F405VG_DEMO\build\STM32F405VG_DEMO.hex"
set BIN_FILE="D:\STM32\HAL\STM32F405VG_DEMO\build\STM32F405VG_DEMO.bin"

REM 转换为 .hex 文件
%OBJCOPY% -O ihex %ELF_FILE% %HEX_FILE%
if %errorlevel% equ 0 (
    echo .hex file created successfully.
) else (
    echo Failed to create .hex file.
    exit /b 1
)

REM 转换为 .bin 文件
%OBJCOPY% -O binary %ELF_FILE% %BIN_FILE%
if %errorlevel% equ 0 (
    echo .bin file created successfully.
) else (
    echo Failed to create .bin file.
    exit /b 1
)

echo Conversion completed.
pause

在这里插入图片描述

📗通过arm GNU Toolchain编译后自动生成的.elf格式文件转换

  • 在Windows平台下,通过cmakelist.txt文件,使用cmake构建文件,通过make/ninja生成的.elf格式文件,.elf格式文件本身是可以支持DAP-LINK、jlink配合相对应的配置文件是可以在线烧录的。有些时候需要其他方式烧录,例如串口、做IAP升级使用时,则需要hex或者bin文件。
  • 需要提前在 CMakeLists.txt文件中添加编译后的文件转换脚本:
# 定义生成的文件路径
set(ELF_FILE ${TARGET_NAME}.elf)
set(HEX_FILE ${TARGET_NAME}.hex)


# 定义生成的 ELF 文件路径
set(ELF_FILE ${CMAKE_BINARY_DIR}/${TARGET_NAME}.elf)

# 定义生成的 HEX 文件路径
set(HEX_FILE ${CMAKE_BINARY_DIR}/${TARGET_NAME}.hex)

# 定义 objcopy.exe 路径
set(OBJCOPY_PATH "D:/arm-gnu-toolchain/bin/arm-none-eabi-objcopy.exe")

# 定义生成的 ELF 文件路径
set(ELF_FILE ${CMAKE_BINARY_DIR}/${TARGET_NAME}.elf)

# 定义生成的 HEX 文件路径
set(HEX_FILE ${CMAKE_BINARY_DIR}/${TARGET_NAME}.hex)
set(BIN_FILE ${TARGET_NAME}.bin)

# 添加自定义命令,在编译完成后自动生成 HEX 文件
add_custom_command(TARGET ${TARGET_NAME} POST_BUILD
    COMMAND ${OBJCOPY_PATH} -O ihex ${ELF_FILE} ${HEX_FILE}
    COMMENT "Converting ELF to HEX"
    VERBATIM
)

# 添加自定义命令,在编译完成后自动生成 BIN 文件
add_custom_command(TARGET ${TARGET_NAME} POST_BUILD
    COMMAND ${OBJCOPY_PATH} -O binary ${ELF_FILE} ${BIN_FILE}
    COMMENT "Converting ELF to BIN"
    VERBATIM
)

  • 其中arm-none-eabi-objcopy.exe文件在arm-gnu-toolchain\bin\arm-none-eabi-objcopy.exe

📘MDK keil工程中hex/bin文件转换方法

方法一:使用Keil软件内置功能
1.打开Keil软件,选择菜单栏中的“File”。
2.选择“Convert HEX to BINARY”选项。
3.在弹出的窗口中选择要转换的HEX文件,并指定转换后的BIN文件的保存路径。
4.点击“Convert”按钮,完成转换后,可以在指定的保存路径找到生成的BIN文件。
方法二:使用fromelf工具

fromelf --bin -o "output_file.bin" "input_file.hex"

其中,–bin选项指示程序输出二进制格式的数据,-o后面跟随的是期望保存结果的位置和文件名,最后是待处理源文件的具体路径与名称。
自动化处理
为了在编译过程中自动生成BIN文件,可以在Keil的项目设置中进行配置:
1.进入“Options for Target”的设置界面。
2.在User标签页中勾选Run#2,并按照模板填写如下指令字符串:
在这里插入图片描述

fromelf.exe --bin -o ./release.bin !L

每当成功编译完成后,就会依据设定好的规则在指定位置生成对应的BIN文件。

相关文章:

  • 卷积神经网络 - 梯度和反向传播算法
  • 六十天前端强化训练之第二十五天之组件生命周期大师级详解(Vue3 Composition API 版)
  • 2020年全国职业院校技能大赛改革试点赛高职组“云计算”竞赛赛卷第二场次题目:容器云平台部署与运维
  • spring.datasource.filters = stat,wall配置解释
  • 深入解析 Java Stream API:从 List 到 Map 的优雅转换!!!
  • 计算机基础:编码03,根据十进制数,求其原码
  • 工业数据驱动智能维护的深度调研报告
  • SystemVerilog 数据类型
  • DeepSeek的崛起:2025新春国产AI模型的全球影响力
  • C# 集合(Collection)详解以及区别
  • 【C++网络编程】第2篇:简单的TCP服务器与客户端
  • 【华为Pura先锋盛典】华为Pura X“阔折叠”手机发布:首次全面搭载HarmonyOS 5
  • 常用的 MyBatis 标签及其作用
  • Java EE(14)——网络原理——UDPTCP数据报的结构
  • C语言程序设计第四版-课本习题(第六章-循环控制结构)
  • 星越L_陡坡缓降使用讲解
  • 双系统下Linux挂载Windows硬盘失败
  • centos 7 部署ftp 基于匿名用户
  • 详解“二分”系列算法
  • 织梦DedeCMS让CKeditor编辑模板文件的方法(默认源码模式编辑)
  • 中国社科院:网文市场超430亿元,作者破3000万人
  • 构筑高地共伴成长,第六届上海创新创业青年50人论坛在沪举行
  • 上海国际电影节推出三大官方推荐单元,精选十部优秀影片
  • 中方就乌克兰危机提出新倡议?外交部:中方立场没有变化
  • 经济日报整版聚焦“妈妈岗”:就业路越走越宽,有温度重实效
  • 外卖员投资失败负疚离家流浪,经民警劝回后泣不成声给父母下跪