linux 内核是否假定它位于特定的物理地址?

Does linux kernel assume that it is located at a particular physical address?

引导加载程序可以将内核放置在内存中的任意物理地址吗? linux 内核是否假设它已被放置在特定地址?

例如,在Sparc中,内核_start符号位于虚拟地址=0xf0004000,通常位于物理地址=0x00004000。 引导加载程序能否将内核放置在任意物理地址,比如 0x10004000,前提是它在引导加载程序的页表中正确映射?如果不是,内核架构的假定物理位置是否特定?

内核确实希望位于特定位置。该位置是特定于体系结构的。你可以reconfigure and recompile内核来调整这个。

不过,我最近正在研究这个 x86/x86_64,也就是 well documented. I would expect to find Sparc documentation there, though it doesn't jump out at me. Some information can be found here

相关位似乎是:

The boot sector that gets loaded is what you find in /boot/first.b in your Linux-Sparc system, and is a bare 512 bytes. It is loaded to address 0x4000 and its role is retrieving from disk /boot/second.b and putting it to address 0x280000 (2.5 megs); the address has been chosen because the Sparc specifications state that at least three megabytes of RAM are mapped at boot time.

现在即将推出的 Linux 内核版本正在进行一些更改,使其可配置为将内核映像放置在任何地方。

最新信息可以在内核邮件列表中找到。

类似的讨论是here