0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MCUXpresso IDE下生成镜像文件的方法

恩智浦MCU加油站 来源:恩智浦MCU加油站 作者:恩智浦MCU加油站 2022-10-20 09:16 次阅读
本人很久以前写过一篇文章 《ARM Cortex-M镜像文件(.bin/.hex/.s19)》,详细介绍了三种流行的镜像文件格式,这些镜像文件不同于可执行文件(.elf),它们主要保存的是芯片能够执行的二进制机器码数据,以及辅助的地址信息和校验和,其他像 .elf 文件里有的工程信息、代码信息、调试信息全部被去除了,说白了镜像文件主要是为最终量产过程而生的。

一般情况下,在 IDE 开发环境里编译链接生成的是可执行文件,然后可以在工程选项做一些设置能进一步生成镜像文件。不同 IDE 下生成镜像文件的方法不同,今天主要介绍来MCUXpresso IDE下生成镜像文件的方法以及与 IAR/MDK 的对比。

注:本文测试的MCUXpresso IDE版本是v11.6.0_8187。

一、各种IDE下生成镜像文件的方法

我们先来看看MCUXpress以外的其它IDE下是如何生成各种格式镜像文件的。我们以 SDK_2.11.1_MIMXRT1170-EVKoardsevkmimxrt1170demo_appshello_worldcm7 目录下的工程文件为例。1.1 IAR EWARM下编译hello_world_demo_cm7.eww工程(随便选择 debug build),会在工程目录 debug文件夹下生成可执行文件hello_world_demo_cm7.out。如果在工程选项Output Converter里开启Generate additional output,则可以指定生成想要的镜像文件(bin/hex/srec)。

63a85118-5014-11ed-a3b6-dac502259ad0.png

如果你仔细看Build窗口的log信息,会发现IDE其实是在可执行文件生成之后,再借助 IAR SystemsEmbedded Workbench 9.10.2arminielftool.exe 小工具对可执行文件做的二次转换生成的镜像文件。

ielftool.exe --bin app.out app.binielftool.exe --ihex app.out app.hexielftool.exe --srec app.out app.s19

所以其实在工程选项Build Actions里的Post-build command line添加如下调用 ielftool.exe做转换的命令(CMD /C 的意思是以 bat 文件内容方式打开后面的命令;命令需要用双引号括起来;路径也需要单独用双引号括起来,防止路径中存在空格,导致命令出错),也能达到一样的效果。

CMD /C ""$TOOLKIT_DIR$inielftool.exe" --bin "$PROJ_DIR$/debug/hello_world_demo_cm7.out" "$PROJ_DIR$/debug/hello_world_demo_cm7.bin""

63bc9baa-5014-11ed-a3b6-dac502259ad0.png

1.2 Keil MDK下

编译hello_world_demo_cm7.uvprojx工程(也选择debug build),会在工程目录debug文件夹下生成可执行文件hello_world_demo_cm7.out。如果在工程选项Output里开启Create HEXfile,则可以生成hex格式镜像文件,不过要想生成其他bin/srec格式镜像文件需要想其他办法。

63c51794-5014-11ed-a3b6-dac502259ad0.png

MDK下其实也有类似IAR下的镜像文件转换小工具,即 Keil_v5ARMARMCCinfromelf.exe,这个小工具可以帮助生成其他格式的镜像文件。

fromelf.exe --bin app.out --output app.binfromelf.exe --i32 app.out --output app.hexfromelf.exe --m32 app.out --output app.srec

在工程选项User里的After build添加如下调用formelf.exe做转换的命令就可以得到指定格式的镜像文件了。

$KARMARMCCinfromelf.exe --bin --output=debug@L.bin !L

63d909b6-5014-11ed-a3b6-dac502259ad0.png

二、MCUXpresso下生成镜像文件的方法

MCUXpresso IDE 下生成镜像文件的方法与IAR/MDK稍有不同,其并不是在工程选项里去开启,而是工程目录里会有Binaies虚拟文件夹(如果看不到该文件夹,可以按 F5 刷新一下),编译完成后在Binaies文件夹下会看到可执行文件(evkmimxrt1170_hello_world_demo_cm7.axf),右击可执行文件在Binary Utilities里可以看到不同格式镜像文件生成选项。

63e335a8-5014-11ed-a3b6-dac502259ad0.png

我们知道MCUXpresso IDE是基于标准ARMGCC的二次封装,所以其生成镜像文件的能力其实是依靠MCUXpressoIDE_11.6.0_8187ide oolsinarm-none-eabi-objcopy.exe 小工具。

arm-none-eabi-objcopy.exe -O binary app.axf app.bin

arm-none-eabi-objcopy.exe -O ihex app.axf app.hex

arm-none-eabi-objcopy.exe -O srec app.axf app.srec

因此在MCUXpresso IDE下我们也可以像IAR/MDK那样添加Post-build steps命令来完成镜像文件的生成。

arm-none-eabi-objcopy -O binary "${BuildArtifactFileName}" "${BuildArtifactFileBaseName}.bin"

63f1a688-5014-11ed-a3b6-dac502259ad0.png


审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16254

    浏览量

    345628
  • IDE
    IDE
    +关注

    关注

    0

    文章

    329

    浏览量

    46443
  • 镜像
    +关注

    关注

    0

    文章

    156

    浏览量

    10618

原文标题:MCUXpresso IDE下生成镜像文件的方法及其与IAR,MDK差异

文章出处:【微信号:NXP_SMART_HARDWARE,微信公众号:恩智浦MCU加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    stm32mp157编译烧录运行到uboot串口无输出怎么解决?

    1.大概2月前后,参考第2部分的方法生成sdcard镜像文件并烧录的步骤,生成了sdcard镜像文件并烧录到sd卡,然后我一直使用这个sd
    发表于 07-05 08:11

    STM32MP157烧录Yocto下载完的镜像文件时发生错误的原因?

    当下载完Yocto基本镜像文件后打算烧录到系统里,却发生了这个错误,使用的.tsv文件是 FlashLayout_emmc_stm32mp157d-ev1-optee.tsv 错误是说 Error
    发表于 03-29 09:02

    如何使用Yocto更新已更改的TF-A设备树来产生新的镜像文件

    求助大佬, 我用Yocto构建了STM32MP157的镜像文件,但我需要更改和移植TF-A和U-BOOT来适配我的板子, 我按照它正点原子教程里更改了.bl2和创建了新的.dtsi设备树文件,但
    发表于 03-29 08:01

    keil如何生成bin文件

    Keil是一种集成开发环境(IDE),专为ARM架构的嵌入式系统开发而设计。在Keil中生成bin文件是将代码编译并转换为可执行文件的过程。本文将详细介绍Keil
    的头像 发表于 12-15 13:43 6897次阅读

    怎么下载centos镜像文件

    CentOS 是一个基于 Linux 的操作系统,它是一种稳定、强大且易于使用的发行版。CentOS 镜像文件是用于安装和部署 CentOS 操作系统的文件。在本文中,我们将详细介绍如何下载
    的头像 发表于 11-23 10:48 709次阅读

    MCUXpresso IDE下将源码制作成Lib库方法及其与IAR,MDK差异

    MCUXpresso IDE下将源码制作成Lib库方法及其与IAR,MDK差异
    的头像 发表于 11-07 17:13 783次阅读
    <b class='flag-5'>MCUXpresso</b> <b class='flag-5'>IDE</b>下将源码制作成Lib库<b class='flag-5'>方法</b>及其与IAR,MDK差异

    安全引导的作用和原理是什么

    安全引导可用于保证系统的完整性,防止系统中重要镜像文件被破坏或替换。 一般情况下,安全引导需要保护 • 系统的BootLoader镜像文件、 • TEE镜像文件、 • Linux内核镜像文件
    的头像 发表于 11-07 15:21 866次阅读

    手把手带您使用MCUXpresso Config Tools生成USB组合设备

    手把手带您使用MCUXpresso Config Tools生成USB组合设备
    的头像 发表于 10-31 16:55 865次阅读
    手把手带您使用<b class='flag-5'>MCUXpresso</b> Config Tools<b class='flag-5'>生成</b>USB组合设备

    MCUXpresso调试其它工具链生成的项目

    MCUXpresso调试其它工具链生成的项目
    的头像 发表于 10-31 16:42 335次阅读
    用<b class='flag-5'>MCUXpresso</b>调试其它工具链<b class='flag-5'>生成</b>的项目

    MCUXpresso IDE下生成镜像文件方法及其与IAR,MDK差异

    MCUXpresso IDE下生成镜像文件方法及其与IAR,MDK差异
    的头像 发表于 09-28 17:05 657次阅读
    <b class='flag-5'>MCUXpresso</b> <b class='flag-5'>IDE</b><b class='flag-5'>下生成</b><b class='flag-5'>镜像文件</b>的<b class='flag-5'>方法</b>及其与IAR,MDK差异

    如何在MCUXpresso IDE中测量能耗?

    如何在MCUXpresso IDE中测量能耗?
    的头像 发表于 09-19 16:40 370次阅读
    如何在<b class='flag-5'>MCUXpresso</b> <b class='flag-5'>IDE</b>中测量能耗?

    MCU双镜像机制的工作原理和应用实例

    嵌入式设备升级过程中会由于断电、强行中断等外部因素,导致新固件写入Flash时不能完整写入,使系统启动时出现问题。或设备运行中,镜像文件被意外损坏,导致系统瘫痪,设备无法运行。面对以上问题,可以
    的头像 发表于 08-01 18:10 992次阅读
    MCU双<b class='flag-5'>镜像</b>机制的工作原理和应用实例

    【Milk-V Duo 开发板免费体验】编译源码并生成镜像文件

    1、介绍按照官方github上的说明可以一步一步搭建源码编译环境并编译生成镜像文件。源码github网址:https://github.com/milkv-duo/duo-buildroot-sdk
    发表于 07-30 07:50

    USB/UART/SPI/I2C-ISP模式更新镜像文件

    应用背景 LPC55(S)XX和即将发布的MCX系列产品支持在ISP模式下载更新镜像文件(ELF, HEX, BIN or SREC/S19),包括USB,UART,SPI,I2C四种连接方式。之前
    的头像 发表于 07-27 08:55 943次阅读
    USB/UART/SPI/I2C-ISP模式更新<b class='flag-5'>镜像文件</b>

    Linux平台大文件生成和处理方法

    在日常工作中,为了验证某些场景下的功能,经常需要人为构造一些大文件进行测试,有时需要用大文件来测试下载速度,有时需要用大文件来覆盖磁盘空间;偶尔会看到一些网络博文会教大家如何构造大文件
    发表于 07-14 16:38 3611次阅读