难度:★★ 本文首发于我的嵌入式技术号「OneChan讲Soc嵌入式」,未经授权禁止转载。
在前面所有的 .sct 文件示例里,我们看到的都是“一个加载域统领全局”的结构:
LR_IROM1 0x08000000 0x00080000 {
ER_IROM1 0x08000000 0x00080000 {
*.o (RESET, +First)
*.o (+RO)
}
RW_IRAM1 0x20000000 0x00010000 {
*.o (+RW)
*.o (+ZI)
}
}
整个固件——代码、只读数据、.data 初始值——全装在 LR_IROM1 这一个加载域里。烧录时,一个连续的 Flash 区间搞定一切。
但真实的嵌入式产品,几乎从来不长这样。
真实产品长这样:
LR_BOOT 0x08000000 0x00004000 {
…
}
LR_APP 0x08004000 0x0007C000 {
…
}
两个加载域,共享同一颗芯片的 Flash,各自独立,各自为政。
这就是今天要讲的主题:为什么链接器允许同一个固件里有多个加载域?它们怎么共存?如果不这样设计,世界会怎样?




