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
    +关注

    关注

    147

    文章

    19110

    浏览量

    403229
  • IDE
    IDE
    +关注

    关注

    0

    文章

    368

    浏览量

    49206
  • 镜像
    +关注

    关注

    0

    文章

    181

    浏览量

    11699

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    MCUXpresso SDK创建自定义清单

    。 本指南包含以下组件: 克隆 MCUXpresso SDK 清单 创建自定义清单文件 初始化 West 工作区 使用 West 完成导入 Test and build a project 克隆
    发表于 04-07 07:11

    RT1176 定制板 – 重置后 LED 闪烁应用程序不运行怎么解决?

    二进制输出 项目成功生成生成.bin文件。 编程方法 由于这是一个自定义板,所以我只有USB-C 访问串行下载器. 我用了恩智浦安全配置工具(blhost) 擦除闪存,请从项目
    发表于 04-06 07:54

    Keil MDK生成LIB库及使用LIB库

    ) { ....... } 将这两个文件添加到项目中(只需要添加生成库所需要的头文件和源文件),并做以下设置: 选中Create Library 3. 编译之后在目录
    发表于 01-22 07:17

    别再装系统了!Linux 镜像到底是什么?一篇讲到你怀疑人生

    多小、环境多复杂,如何快速安装、部署和维护 Linux 系统,都是开发者和运维人员必须掌握的核心技能。 这时,“Linux 镜像文件”就显得尤为重要。它就像一份完整的系统快照,让你可以在不同设备之间快速迁移、复制,甚至批量部署。理解镜像文件,是从零开
    的头像 发表于 12-03 16:12 1008次阅读
    别再装系统了!Linux <b class='flag-5'>镜像</b>到底是什么?一篇讲到你怀疑人生

    使用NucleiStudio生成tb仿真需要的.verilog文件

    打开仿真顶层文件tb_top.v,存放在ITCM模块里面的指令是通过readmemh函数读入.verilog文件实现的: 下面通过对NucleiStudio IDE进行设置,实现将c
    发表于 11-05 07:07

    使用qemu-vexpress-a9 运行用户程序跑不了怎么解决?

    qemu-vexpress-a9 的 sd.bin 镜像文件中。 然后成功编译rt-threadbspqemu-vexpress-a9的内核态.elf文件 使用./qemu-nographic.sh 模拟用户态程序的运行,显示如下 sd.bin中是有elf
    发表于 10-09 07:41

    【嘉楠堪智K230开发板试用体验】 使用非 docker 环境构建系统镜像

    prepare_sourcecode 下载工具链和 buildroot package, AI package。 4 带完成之后就执行 sudo `make CONF=k230_canmv_01studio_defconfig 即可完成镜像制作 如下生成成功
    发表于 09-06 22:35

    恩智浦MCU教程 基于MCUXpresso和FRDM-MCXA346的RT-Thread Nano移植

    本篇还是以移植RT-Thread Nano到MCUXpresso IDE为主,移植的代码可以在nxpic.org.cn论坛搜索到。
    的头像 发表于 08-21 09:49 6931次阅读
    恩智浦MCU教程 基于<b class='flag-5'>MCUXpresso</b>和FRDM-MCXA346的RT-Thread Nano移植

    AICube生成部署文件失败的原因?怎么解决?

    我按照网上的方法安装了dotnet,和AICube,并且我是安装在非中文路径,但是尝试了一天了,都不能成功的生成部署文件,我使用软件自带的样例,但是就是不能生成部署
    发表于 08-05 06:26

    使用K230 BurningTool 烧录 EMMC镜像报错怎么解决?

    误删了文件,故重新烧录SD卡镜像,还是发生如上报错。然后又想重新烧录EMMC镜像,突然发现无法烧录。 想求解的第一个问题是 dev下的文件是保存在SD卡内还是开发板EMMC内 第二个问
    发表于 07-23 06:03

    【VisionFive 2单板计算机试用体验】+ 烧写系统

    :balenaEtcher 3.2、安装镜像 下载的系统,使用SD目录下的镜像文件 解压镜像文件 烧录镜像 四、启动系统 4.1、设置启动模式 将烧写完成的TF卡插入开发板,设置为
    发表于 06-29 22:36

    ElfBoard技术贴|如何在ELF 2开发板中适配 AX200NGW WiFi模块

    ,指导屏幕前的小伙伴完成这一适配过程。方法一:重新制作镜像文件方法是在SDK源码中,将内核编译生成的模块文件部署到
    的头像 发表于 06-24 09:09 2743次阅读
    ElfBoard技术贴|如何在ELF 2开发板中适配 AX200NGW WiFi模块

    如何将kmodel放置到镜像内部,用于emmc烧录?

    ,而在烧录完成后,链接板子不会弹出虚拟u盘,所以无法进行之前的操作,想请问应该在生成镜像前,应该如何进行操作将kmodel和main文件放置,放置在什么位置呢
    发表于 06-20 06:03

    恩智浦MCU MCXN947 基于MCUXpresso Config tools创建IIC的教程步骤

    MCXN947是NXP推出的高性能微控制器,支持丰富的通信接口,如I2C。借助MCUXpresso Config Tools,开发者可快速配置I2C外设,生成初始化代码。该工具提供图形化界面,简化
    的头像 发表于 05-22 09:40 2197次阅读
    恩智浦MCU MCXN947 基于<b class='flag-5'>MCUXpresso</b> Config tools创建IIC的教程步骤

    Linux文件系统打包及镜像制作,触觉智能RK3562开发板演示

    本文介绍Linux开发板文件系统打包及镜像制作的方法,演示Linux文件系统打包及镜像制作,适用于想将配置好的系统环境打包成
    的头像 发表于 04-28 16:45 1147次阅读
    Linux<b class='flag-5'>文件</b>系统打包及<b class='flag-5'>镜像</b>制作,触觉智能RK3562开发板演示