如何将带构建偏移的 PlatformIO 固件转换为不带偏移的固件
一些固件构建时带有构建偏移,以为在固件之前启动的引导加载程序留出闪存空间(如 32k - 0x8000)。使用此类固件的缺点之一是它始终依赖于存在兼容的引导加载程序(兼容性主要由为引导加载程序分配的闪存量定义)
如果你想将固件转换为"正常"的非引导加载程序固件,你需要做以下事情:
- 将
board_build.offset设置为0x0- 不仅在platformio.ini中的构建配置和所有包含的文件中查找,还要在你的配置扩展的配置中查找(如果有)。 - 将
board_upload.offset_address设置为0x0。这主要影响使用调试器上传,但你应始终保持此信息一致,因为调试它是一场巨大的噩梦。 - 编辑你的固件正在使用的特定链接器脚本并适当设置闪存偏移:
查找类似这样的 MEMORY 部分:
linker_memory_section.ld
MEMORY
{
FLASH (rx) : ORIGIN = 0x8008000, LENGTH = 512K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
}如你在
linker_flash_origin.txt
FLASH (rx) : ORIGIN = 0x8008000, LENGTH = 512K中看到的,此 STM32(示例)的闪存不在 MCU 的闪存地址 0x8000000,而在 0x8008000 - 基本上,链接器被告知跳过引导加载程序占用的 0x8000(32k)(否则,它会覆盖引导加载程序。
将此更改为你的 MCU 的闪存地址。对于像 STM32 这样的 ARM,这通常是 0x8000000。
现在重新编译,你的固件应该无需引导加载程序即可工作。
Check out similar posts by category:
Embedded, PlatformIO, STM32
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow