痞子衡维护的 NXP-MCUBootUtility 工具距离上一个版本(v2.3.1)发布过去 2 个月了,这一次痞子衡为大家带来了版本升级 v2.4.0,这个版本主要有一个非常重要的更新需要跟大家特别说明一下。
一、v2.4 更新记录
二、关于 Flashloader 的更换支持
Flashloader 在嵌入式世界里有很多种不同含义和应用场景,其中最让人熟知的非配合仿真器使用的 Flashloader(下载算法)莫属,有了合适的 Flashloader,我们便可以在 IDE 里一键下载和调试应用程序,项目开发效率大大提升。
i.MXRT(主要是四位数系列)世界里也有一个专用的 Flashloader,它专门配合 BootROM 工具链(blhost.exe)使用,这个 Flashloader 可以帮助你将应用程序下载进 i.MXRT 可启动的各种外部设备里(NOR/NAND/SD/eMMC),关于其使用方法痞子衡之前写过一篇详细的文章 《Flashloader 初体验(blhost)》。
NXP-MCUBootUtility 软件核心功能都是通过这个 Flashloader 和 blhost 工具来实现的,由于 Flashloader 本身也是一个嵌入式应用程序,是程序就可能存在功能缺陷,我们有时候遇到的 NXP-MCUBootUtility 使用缺陷可能是 Flashloader 本身的缺陷造成的,因此必要的时候我们需要为 NXP-MCUBootUtility 更新 Flashloader 文件。
2.1 获取方式
2.1.1 下载独立包(仅可执行文件)
在恩智浦官网 i.MXRT 芯片主页 TOOLS & SOFTWARE 一栏下,我们可以下载到适用 i.MXRT 芯片的各种软件工具,Flashloader 及其配套工具就在其中,如下是 i.MXRT1050 的 Flashloader 包:
下载地址:https://www.nxp.com/webapp/Download?colCode=IMX-RT1050-FLASHLOADER&appType=license
Flashloader 包解压后,可以看到里面包含了文档、example、工具以及最重要的 Flashloader 可执行文件:
Flashloader 可执行文件有如下三种格式,其中 ivt_flashloader.bin 是 flashloader.elf/srec 经过 elftosb.exe 转换而来:
Flashloader_RT1050_1.1Flashloaderflashloader.elf
Flashloader_RT1050_1.1Flashloaderflashloader.srec
Flashloader_RT1050_1.1Toolsmfgtools-relProfilesMXRT105XOS Firmwareivt_flashloader.bin
但是 Flashloader 独立包的方式不是最推荐的获取方式,早期 i.MXRT 型号(RT1050/RT1060 等)官方提供了独立包(其实并没有实时更新,V1.1 版本还是 2018 年 3 月发布的),较新的 i.MXRT 型号(RT1170/RT1010)以及未来最新型号官方不再提供独立包。
2.1.2 下载 SDK(源码和工程)
Flashloader 源码其实已经被官方开源在了 SDK 包里,在 MCUX 主页 可下载对应 i.MXRT 型号的 SDK 包(继续以 i.MXRT1050 为例),记得务必在 middleware 选项里勾选 mcu-boot 后再下载:
SDK 包解压后,可在如下路径找到 Flashloader 源工程(IAR/MDK/MCUX/GCC 都有)以及跟独立包里一样的 ivt_flashloader.bin,注意此时我们需要自己编译 Flashloader 源工程生成一个 flashloader.srec 文件。
SDK_2.8.2_EVKB-IMXRT1050boardsevkbimxrt1050bootloader_examplesflashloader
SDK_2.8.2_EVKB-IMXRT1050middlewaremcu-bootbinToolsmfgtools-relProfilesMXRT105XOS Firmwareivt_flashloader.bin
因为 SDK 本身是持续更新的,Flashloader 作为其中组件,也是实时在更新,因此我们不用担心 Flashloader 的维护问题,另外源码都开放了,不得已的情况下我们还可以自己改 Flashloader。
2.2 更换方式
NXP-MCUBootUtility 在其目录 /src/targets/ 下默认存放了 Flashloader 可执行文件,主要是 flashloader.srec 和 ivt_flashloader.bin。但是上一节两种方式下得到的 flashloader.srec 和 ivt_flashloader.bin 能不能直接放到 NXP-MCUBootUtility 里替换使用呢?答案是否定的。
NXP-MCUBootUtility 其实并没有自动识别默认的 flashloader 链接地址,而是将其链接和跳转地址放到了 src/targets/xxx/bltargetconfig.py 文件中,这意味着你在替换默认 flashloader 文件时必须保证其跟 bltargetconfig.py 里的两个地址保持一致(不一致则需要改 flashloader 链接文件或者改 bltargetconfig.py 里的地址),这也是 NXP-MCUBootUtility v2.3 及其之前版本不方便更换 Flashloader 的原因。
NXP-MCUBootUtility v2.4 做的一个重要更新,就是能够自动识别新 flashloader 地址,只有一个小小的要求,就是更新的 flashloader 文件(srec 格式)需要固定命名为 flashloader_user.srec 并放到 /src/targets/xxx/ 目录下:
NXP-MCUBootUtility 运行时一旦检测到 flashloader_user.srec 的存在,便会获取其链接和跳转地址,并自动生成对应的 ivt_flashloader_user.bin 文件(在 /gen/bootable_image/ivt_flashloader_user.bin)去使用,这样的设计下更换 flashloader 是不是相当轻松!
至此,这次更新的主要特性便介绍完了。MCUBootUtility 项目地址为 https://github.com/JayHeng/NXP-MCUBootUtility , 虽然当前版本(v2.4.0)功能已经非常完备,你还是可以在此基础上再添加自己想要的功能。如此神器,还不快快去下载试用?