引导加载程序是一件好事。有了它们,我可以加载任何我喜欢的应用程序。电源具有一些复杂性,而仅引导加载程序本身已经是一件复杂的事情。但这也适用于应用程序部分。我需要将应用程序链接到内存空间中的特定偏移量,以便引导加载程序可以加载它,此外,应用程序通常需要添加一些额外的信息供引导加载程序使用。
本文介绍如何使用 MCUXpresso SDK 使用 Eclipse (MCUXpresso IDE) 构建引导加载程序应用程序。让我们开始吧。
您可能还喜欢:
带恩智浦基尼的K22微控制器的闪存驻留USB-HID引导加载器
大纲
我使用的是基于Eclipse的MCUXpresso IDE V11.0.1。我使用内置的托管链接器脚本方式自动将应用程序重新定位到地址,而不是”黑客攻击”链接器文件。在本教程:移植 BLE_NRF Kinetis 设计工作室项目到 MCUXpresso IDE, 我已经使用了自由标记机制, 但在这里, 我展示了如何在更高的级别使用它.
生成配置
这个想法是使用Eclipse构建配置在”无引导加载程序”和”地址引导程序应用程序”之间切换。创建新的生成配置。将其命名为”BL_lt;应用程序偏移>”,例如”BL_0xA000″:
命名很重要,因为如果是引导加载程序应用程序(以”BL_”开头),并且应用程序在哪个地址也链接在其中(十进制数字),我会在脚本中识别。
引导加载程序配置
引导加载程序需要配置数据。我已经将其放入一个”引导加载程序_config.c”和”引导加载器_config.h”。将它们添加到项目中:
files.wordpress.com/2019/10/bootloader-configuration.png?w=584&h=273 584w,https://mcuoneclipse.files.wordpress.com/2019/10/bootloader-configuration.png?w=150&h=70 150w,https://mcuoneclipse.files.wordpress.com/2019/10/bootloader-configuration.png?w=300&h=140 300w,https://mcuoneclipse.files.wordpress.com/2019/10/bootloader-configuration.png?w=768&h=359 768w,https://mcuoneclipse.files.wordpress.com/2019/10/bootloader-configuration.png894w”宽度=”584″/*
引导加载程序配置仅用于引导加载程序应用程序,因此只需在项目设置中使用以下定义将其打开:
BL_HAS_BOOTLOADER_CONFIG
自由标记脚本
IDE 使用FreeMarker脚本,这是生成链接器脚本文件的强大方法。我们现在要扩展和覆盖一些默认文件。在项目中创建名为”链接脚本”(命名很重要!)的文件夹,并创建三个文件(可以从GitHub复制它们 ):
- user.ldt:它包含其他脚本中使用的用户变量
- crp.ldt: 它包含引导加载程序配置数据的位置
- 内存.ldt:这定义了链接器内存范围
user.ldt使用生成配置名称为应用程序偏移量和配置偏移量生成链接器变量:
ldt”数据大文件\”https://mcuoneclipse.file.word.word.word.com/2019/10/user.ldt_.png?w=584″数据-中型文件=”https://mcuoneclipse.file.file.com/2019/10/user.ldt_.png?w_300″数据 eclipse.files.wordpress.com/2019/10/user.ldt_.png”数据-折号大小=”1115,283″数据-permalink=”https://mcuoneclipse.com/2019/10/06/链接-引导加载程序应用程序-带eclipse-和自由标记-脚本/用户-ldt-2/”高度=”148″大小=”(最大宽度:584px)100vw, 584px”src=”http://www.cheeli.com.cn/wp-内容/上传/2019/10/user.ldt_.png”srcset=”https://mcuoneclipse.file.com/2019/10/user.ldt_.png?w_584_148584w,https://mcuoneclipse.files.wordpress.com/2019/10/user.ldt_.png?w=150&h=38 https://mcuoneclipse.files.wordpress.com/2019/10/user.ldt_.png?w=300&h=76300瓦 https://mcuoneclipse.files.wordpress.com/2019/10/user.ldt_.png?w=768&h=195 768w,https://mcuoneclipse.files.wordpress.com/2019/10/user.ldt_.png?w=1024&h=260 1024w,https://mcuoneclipse.files.wordpress.com/2019/10/user.ldt_.png 1115w”标题=”用户.ldt”宽度=”584″/*
这是它在生成的链接器文件中的外观:
crp.ldt用于在矢量表之后将引导加载器配置数据放置在应用程序内存中的预期偏移量 (0x340) 处。
在<MCUXpresso IDE 安装路径中检查模板文件>\ide_Wizards_linker,我看到我可以”误用”crp.ldt”将引导加载程序录字程序放在矢量之后。理想情况下,IDE 将提供专用模板或挂钩。相反,我只是制作一个现有的crp.ldt的副本,并把它扩展。
wordpress.com/2019/10/after-vectors-placement.png?w=584″数据介质文件\”https://mcuoneclipse.file.word.word.com/2019/10/后矢量放置.png?w=300″数据-orig-file=”https://mcuoneclipse.file.file.wordpress.com/2019/10/后矢量放置。 png”数据折号大小=”585,378″数据-permalink=”https://mcuoneclipse.com/2019/10/06/链接-引导加载程序应用程序-带-流-和无标记-脚本/后向量-放置/”高度=””377″大小=”最大宽度:584px) 100vw, 584px”src=”http://www.cheeli.com.cn/wp-内容/上传/2019/10/后矢量放置.png”srcset=”https://mcuoneclipse.files.wordpress.com/2019/10/后矢量-放置.png?w_584&h_377 584w,https://mcuoneclipse.files.wordpress.com/2019/10/after-vectors-placement.png?w=150&h=97 https://mcuoneclipse.files.wordpress.com/2019/10/after-vectors-placement.png?w=300&h=194 300w,https://mcuoneclipse.files.wordpress.com/2019/10/after-vectors-placement.png 585w” 宽度=”584″/*
下面,我们在链接器文件中有结果:
可以验证正确的放置位置,例如使用EHEP:
wordpress.com/2019/10/bootloader-configuration-data-in-binary.png?w=584″ data-medium-file=”https://mcuoneclipse.files.wordpress.com/2019/10/bootloader-configuration-data-in-binary.png?w=300″ data-orig-file=”https://mcuoneclipse.files.wordpress.com/2019/10/bootloader-configuration-data-in-binary.png” data-orig-size=”931,546″ data-permalink=”https://mcuoneclipse.com/2019/10/06/linking-bootloader-applications-with-eclipse-and-freemarker-scripts/bootloader-configuration-data-in-binary/” height=”342″ sizes=”(max-width: 584px) 100vw, 584px” src=”http://www.cheeli.com.cn/wp-content/uploads/2019/10/bootloader-configuration-data-in-binary.png” srcset=”https://mcuoneclipse.files.wordpress.com/2019/10/bootloader-configuration-data-in-binary.png?w=584&h=342 584w, https://mcuoneclipse.files.wordpress.com/2019/10/bootloader-configuration-data-in-binary.png?w=150&h=88 150w, https://mcuoneclipse.files.wordpress.com/2019/10/bootloader-configuration-data-in-binary.png?w=300&h=176 300w, https://mcuoneclipse.files.wordpress.com/2019/10/bootloader-configuration-data-in-binary.png?w=768&h=450 768w, https://mcuoneclipse.files.wordpress.com/2019/10/bootloader-configuration-data-in-binary.png 931w” width=”584″/>
最后,memory.ldt在链接器文件中构建内存映射,并带有应用程序偏移量:
因此,根据生成配置名称,它会自动将应用程序链接到正确的内存区域!
wordpress.com/2019/10/build-configuration-for-bootloader-application.png?w=584″ data-medium-file=”https://mcuoneclipse.files.wordpress.com/2019/10/build-configuration-for-bootloader-application.png?w=300″ data-orig-file=”https://mcuoneclipse.files.wordpress.com/2019/10/build-configuration-for-bootloader-application.png” data-orig-size=”623,171″ data-permalink=”https://mcuoneclipse.com/2019/10/06/linking-bootloader-applications-with-eclipse-and-freemarker-scripts/build-configuration-for-bootloader-application/” height=”160″ sizes=”(max-width: 584px) 100vw, 584px” src=”http://www.cheeli.com.cn/wp-content/uploads/2019/10/build-configuration-for-bootloader-application-1.png” srcset=”https://mcuoneclipse.files.wordpress.com/2019/10/build-configuration-for-bootloader-application.png?w=584&h=160 584w, https://mcuoneclipse.files.wordpress.com/2019/10/build-configuration-for-bootloader-application.png?w=150&h=41 150w, https://mcuoneclipse.files.wordpress.com/2019/10/build-configuration-for-bootloader-application.png?w=300&h=82 300w, https://mcuoneclipse.files.wordpress.com/2019/10/build-configuration-for-bootloader-application.png 623w” width=”584″/>
总结
使用 FreeMarker 自定义脚本和 Eclipse 生成配置,我可自动生成和链接要与引导加载程序一起使用的应用程序。我可以使用”正常”调试配置来构建和调试应用程序,而无需引导加载程序。
快乐自由标记!
引用
- 自由标记主页
- 自由标记教程
- 教程:将 BLE_NRF 基内尼斯设计工作室项目移植到 MCUXpresso IDE
- 带 KL03Z 的引导加载程序:入门:恩智浦 FRDM-KL03Z 板上的 ROM 引导加载程序