痞子衡維護的 NXP-MCUBootUtility 工具距離上一個版本(v2.3.1)發(fā)布過去 2 個月了,這一次痞子衡為大家?guī)砹税姹旧?v2.4.0,這個版本主要有一個非常重要的更新需要跟大家特別說明一下。
?
一、v2.4 更新記錄
?
二、關于 Flashloader 的更換支持
Flashloader 在嵌入式世界里有很多種不同含義和應用場景,其中最讓人熟知的非配合仿真器使用的 Flashloader(下載算法)莫屬,有了合適的 Flashloader,我們便可以在 IDE 里一鍵下載和調(diào)試應用程序,項目開發(fā)效率大大提升。
i.MXRT(主要是四位數(shù)系列)世界里也有一個專用的 Flashloader,它專門配合 BootROM 工具鏈(blhost.exe)使用,這個 Flashloader 可以幫助你將應用程序下載進 i.MXRT 可啟動的各種外部設備里(NOR/NAND/SD/eMMC),關于其使用方法痞子衡之前寫過一篇詳細的文章 《Flashloader 初體驗(blhost)》。
NXP-MCUBootUtility 軟件核心功能都是通過這個 Flashloader 和 blhost 工具來實現(xiàn)的,由于 Flashloader 本身也是一個嵌入式應用程序,是程序就可能存在功能缺陷,我們有時候遇到的 NXP-MCUBootUtility 使用缺陷可能是 Flashloader 本身的缺陷造成的,因此必要的時候我們需要為 NXP-MCUBootUtility 更新 Flashloader 文件。
?
2.1 獲取方式
2.1.1 下載獨立包(僅可執(zhí)行文件)
在恩智浦官網(wǎng) i.MXRT 芯片主頁 TOOLS & SOFTWARE 一欄下,我們可以下載到適用 i.MXRT 芯片的各種軟件工具,F(xiàn)lashloader 及其配套工具就在其中,如下是 i.MXRT1050 的 Flashloader 包:
下載地址:https://www.nxp.com/webapp/Download?colCode=IMX-RT1050-FLASHLOADER&appType=license
Flashloader 包解壓后,可以看到里面包含了文檔、example、工具以及最重要的 Flashloader 可執(zhí)行文件:
Flashloader 可執(zhí)行文件有如下三種格式,其中 ivt_flashloader.bin 是 flashloader.elf/srec 經(jīng)過 elftosb.exe 轉(zhuǎn)換而來:
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 月發(fā)布的),較新的 i.MXRT 型號(RT1170/RT1010)以及未來最新型號官方不再提供獨立包。
?
2.1.2 下載 SDK(源碼和工程)
Flashloader 源碼其實已經(jīng)被官方開源在了 SDK 包里,在 MCUX 主頁 可下載對應 i.MXRT 型號的 SDK 包(繼續(xù)以 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 本身是持續(xù)更新的,F(xiàn)lashloader 作為其中組件,也是實時在更新,因此我們不用擔心 Flashloader 的維護問題,另外源碼都開放了,不得已的情況下我們還可以自己改 Flashloader。
?
2.2 更換方式
NXP-MCUBootUtility 在其目錄 /src/targets/ 下默認存放了 Flashloader 可執(zhí)行文件,主要是 flashloader.srec 和 ivt_flashloader.bin。但是上一節(jié)兩種方式下得到的 flashloader.srec 和 ivt_flashloader.bin 能不能直接放到 NXP-MCUBootUtility 里替換使用呢?答案是否定的。
NXP-MCUBootUtility 其實并沒有自動識別默認的 flashloader 鏈接地址,而是將其鏈接和跳轉(zhuǎn)地址放到了 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 的存在,便會獲取其鏈接和跳轉(zhuǎn)地址,并自動生成對應的 ivt_flashloader_user.bin 文件(在 /gen/bootable_image/ivt_flashloader_user.bin)去使用,這樣的設計下更換 flashloader 是不是相當輕松!
至此,這次更新的主要特性便介紹完了。MCUBootUtility 項目地址為 https://github.com/JayHeng/NXP-MCUBootUtility , 雖然當前版本(v2.4.0)功能已經(jīng)非常完備,你還是可以在此基礎上再添加自己想要的功能。如此神器,還不快快去下載試用?