gpt4 book ai didi

linker - 强制链接器将相同的代码放在 2 个部分中

转载 作者:行者123 更新时间:2023-12-01 03:36:51 28 4
gpt4 key购买 nike

我试图强制链接器(来自 XC32 的 ld)将相同的可执行代码放置在闪存的两个不同部分中。

该应用程序使得代码可以作为独立应用程序运行,并且复位向量可以被引导加载程序覆盖,然后引导加载程序可以分支到伪复位向量。

我的链接器脚本的相关部分是

MEMORY
{
kseg1_boot_mem : ORIGIN = 0xBFC00000, LENGTH = 0x480
bootload_boot_mem : ORIGIN = 0x9D1F0000, LENGTH = 0x480
}

SECTIONS
{
.reset 0xBFC00000 :
{
KEEP(*(.reset))
} > kseg1_boot_mem

.bootloadreset 0x9D1F0000 :
{
KEEP(*(.reset))
} > bootload_boot_mem
}

使用它,0xBFC00000 处的区域按预期填充,但没有放置在 0x9D1F0000 处。我尝试将选项 --no-gc-sections 传递给链接器,但似乎没有任何区别。

我的问题是:是否可以强制链接器将相同的代码放入 2 个不同的部分,以及如何这样做?

最佳答案

不管这是否是解决这个问题的正确方法,我想出的解决方案是:

通过从 .reset 部分中删除 KEEP(*(.reset)) 块,将启动代码移动到 0x9D1F0000 处的区域。
在跳转到重定位的启动代码的复位地址处放置一个 asm 函数。
允许引导加载程序覆盖 asm 函数,因为它会在完成工作后跳转到启动代码。

关于linker - 强制链接器将相同的代码放在 2 个部分中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33937887/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com