Linux kernel 为什么Linux ARM64引导中的文本地址如此之高?

Linux kernel 为什么Linux ARM64引导中的文本地址如此之高?,linux-kernel,boot,arm64,Linux Kernel,Boot,Arm64,我目前正在学习ARM64体系结构,我很难理解Linux如何引导。从链接器脚本中,我们可以看到: SECTIONS { . = PAGE_OFFSET + TEXT_OFFSET; .head.text : { _text = .; HEAD_TEXT } 初始的\u文本符号非常高,类似于0xfffffffc00008000。据我所知,这个地址是一个物理地址,但在基于8Gb RAM的电路板上,这似乎是不可能的。这怎么可能?我错过什么了

我目前正在学习ARM64体系结构,我很难理解Linux如何引导。从链接器脚本中,我们可以看到:

  SECTIONS {
    . = PAGE_OFFSET + TEXT_OFFSET;

    .head.text : {
        _text = .;
        HEAD_TEXT
    }
初始的
\u文本
符号非常高,类似于
0xfffffffc00008000
。据我所知,这个地址是一个物理地址,但在基于8Gb RAM的电路板上,这似乎是不可能的。这怎么可能?我错过什么了吗

编辑:声明:

- Caches, MMUs
  The MMU must be off.

“我遗漏了什么吗?”-是的。它不是一个物理地址(即
PHYS_OFFSET
)。但是Linux请求在关闭MMU的情况下启动,或者可能不再是这种情况?当然,在关闭MMU的情况下运行的少量入口点代码不使用虚拟地址(直接)。这并不影响vmlinux是从最终的线性映射地址范围(在TTBR1中)链接运行的事实,因此问题的前提是无效的。好吧,你说整个内核都链接了高地址,但是早期启动代码是位置独立的,所以不必担心它的实际位置。我理解对了吗?这有点简单,但基本上是的。当您从正确的虚拟地址运行C代码时,只是从head.s的一端到另一端发生了很多事情(我甚至不能完全理解)。“我遗漏了什么吗?”-是的。它不是一个物理地址(即
PHYS_OFFSET
)。但是Linux请求在关闭MMU的情况下启动,或者可能不再是这种情况?当然,在关闭MMU的情况下运行的少量入口点代码不使用虚拟地址(直接)。这并不影响vmlinux是从最终的线性映射地址范围(在TTBR1中)链接运行的事实,因此问题的前提是无效的。好吧,你说整个内核都链接了高地址,但是早期启动代码是位置独立的,所以不必担心它的实际位置。我理解对了吗?这有点简单,但基本上是的。当您从正确的虚拟地址运行C代码时,只是从head.s的一端到另一端发生了很多事情(我甚至不能完全理解这一点)。