Linux 如何在ARM64上解释虚拟内核内存布局?

Linux 如何在ARM64上解释虚拟内核内存布局?,linux,arm64,memory-layout,Linux,Arm64,Memory Layout,以下内存布局信息是linux内核在引导时在我的SoC平台(使用4核Cortex-A53处理器和2.75GiB DRAM)上打印的,但我并不完全理解布局的内容: [ 0.000000] Memory: 2736316K/2883584K available (4796K kernel code, 488K rwdata, 1360K rodata, 448K init, 341K bss, 130884K reserved, 16384K cma-reserved) [ 0.00000

以下内存布局信息是linux内核在引导时在我的SoC平台(使用4核Cortex-A53处理器和2.75GiB DRAM)上打印的,但我并不完全理解布局的内容:

[    0.000000] Memory: 2736316K/2883584K available (4796K kernel code, 488K rwdata, 1360K rodata, 448K init, 341K bss, 130884K reserved, 16384K cma-reserved)
[    0.000000] Virtual kernel memory layout:
[    0.000000]     modules : 0xffffff8000000000 - 0xffffff8008000000   (   128 MB)
[    0.000000]     vmalloc : 0xffffff8008000000 - 0xffffffbebfff0000   (   250 GB)
[    0.000000]       .text : 0xffffff8008080000 - 0xffffff8008530000   (  4800 KB)
[    0.000000]     .rodata : 0xffffff8008530000 - 0xffffff8008690000   (  1408 KB)
[    0.000000]       .init : 0xffffff8008690000 - 0xffffff8008700000   (   448 KB)
[    0.000000]       .data : 0xffffff8008700000 - 0xffffff800877a200   (   489 KB)
[    0.000000]        .bss : 0xffffff800877a200 - 0xffffff80087cf76c   (   342 KB)
[    0.000000]     fixed   : 0xffffffbefe7fd000 - 0xffffffbefec00000   (  4108 KB)
[    0.000000]     PCI I/O : 0xffffffbefee00000 - 0xffffffbeffe00000   (    16 MB)
[    0.000000]     vmemmap : 0xffffffbf00000000 - 0xffffffc000000000   (     4 GB maximum)
[    0.000000]               0xffffffbf00000000 - 0xffffffbf02c00000   (    44 MB actual)
[    0.000000]     memory  : 0xffffffc000000000 - 0xffffffc0b0000000   (  2816 MB)
您能否浏览这些部分和/或指定URL以了解更多详细信息


非常感谢

在阅读了一些帖子之后,我想出了以下内存映射图

与:

  • CONFIG\u ARM64\u PAGE\u SHIFT=12
  • CONFIG\u PGTABLE\u LEVELS=3
  • CONFIG\u ARM64\u VA\u BITS=39
整个虚拟内存布局:

--------------------> +--------------------------+
ffff:ffff:ffff:ffff   |                          |
                      |                          |                
                      |                          | 
ffff:ffc0:0000:0000   |----- Kernel (512G)-------| <-- PAGE_OFFSET
                      |                          |
                      |                          |
ffff:ff80:0000:0000   |                          |
--------------------> +--------------------------+
ffff:ff7f:ffff:ffff   |//////////////////////////|
                      |//////////////////////////|
                      |//////////////////////////|
                      |//////////////////////////|
                      |//////////////////////////|
                      |//////////////////////////|
                      z //////////////////////// z
                      |//////////////////////////|
                      |//////////////////////////|
                      |//////////////////////////|
                      |//////////////////////////|
                      |//////////////////////////|
0000:0080:0000:0000   |//////////////////////////|
--------------------> +--------------------------+
0000:007f:ffff:ffff   |                          |
                      |                          |
                      |                          |
                      |      User (512G)         |
                      |                          |
                      |                          |
0000:0000:0000:0000   |                          |
--------------------> +--------------------------+
ffff:ffff:ffff:ffff   +--------------------------+
                      |                          |
                      |                          |
                      z                          z
                      |                          |
                      |                          |
ffff:ffc0:b000:0000   |--------------------------|                       1:b000:0000 +------------------------+
                      |                          |                                   |                        |
                      |     memory (2.75G)       |                                   | Physical DRAM (2.75G)  |
                      |                          |                                   |                        |
ffff:ffc0:0000:0000   +==========================+  <-- PAGE_OFFSET  --> 1:0000:0000 +------------------------+
                      |                          |
                      |                          |
                      |                          |
                      |      vmemmap (4G)        |
                      | +----------------------+ |
                      | |    actual (44M)      | |
ffff:ffbf:0000:0000   +--------------------------+
                      |//////////////////////////|
ffff:ffbe:ffe0:0000   +--------------------------+
                      |     PCI I/O (16M)        |
ffff:ffbe:fee0:0000   +--------------------------+
                      |//////////////////////////|
ffff:ffbe:fec0:0000   +--------------------------+
                      |     fixed (4M)           |
ffff:ffbe:fe7f:d000   +--------------------------+
                      |//////////////////////////|
ffff:ffbe:bfff:0000   +--------------------------+
                      |                          |
                      |                          |
                      |                          |
                      |                          |
                      |                          |
                      |                          |
                      z     vmalloc (250G)       z
                      |                          |
                      |                          |
                      |                          |
                      |                          |
                      |                          |
                      |                          |
ffff:ff80:087c:f76c   | +----------------------+ |
                      | |        .bss          | |
                      | |        .data         | |
                      | |        .init         | |  Kernel
                      | |        .rodata       | |
                      | |        .text         | |
ffff:ff80:0808:0000   | +----------------------+ |
ffff:ff80:0800:0000   +--------------------------+
                      |     modules (128M)       |
ffff:ff80:0000:0000   +--------------------------+
------------->+--------------------------+
ffff:ffff:ffff:ffff||
|                          |                
|                          | 
ffff:ffc0:0000:0000----内核(512G)------内核+--------------------------+
ffff:ff7f:ffff:ffff|//////////////////////////|
|//////////////////////////|
|//////////////////////////|
|//////////////////////////|
|//////////////////////////|
|//////////////////////////|
z//////////z
|//////////////////////////|
|//////////////////////////|
|//////////////////////////|
|//////////////////////////|
|//////////////////////////|
0000:0080:0000:0000   |//////////////////////////|
--------------------> +--------------------------+
0000:007f:ffff:ffff||
|                          |
|                          |
|用户(512G)|
|                          |
|                          |
0000:0000:0000:0000   |                          |
--------------------> +--------------------------+
…以及内核虚拟内存布局:

--------------------> +--------------------------+
ffff:ffff:ffff:ffff   |                          |
                      |                          |                
                      |                          | 
ffff:ffc0:0000:0000   |----- Kernel (512G)-------| <-- PAGE_OFFSET
                      |                          |
                      |                          |
ffff:ff80:0000:0000   |                          |
--------------------> +--------------------------+
ffff:ff7f:ffff:ffff   |//////////////////////////|
                      |//////////////////////////|
                      |//////////////////////////|
                      |//////////////////////////|
                      |//////////////////////////|
                      |//////////////////////////|
                      z //////////////////////// z
                      |//////////////////////////|
                      |//////////////////////////|
                      |//////////////////////////|
                      |//////////////////////////|
                      |//////////////////////////|
0000:0080:0000:0000   |//////////////////////////|
--------------------> +--------------------------+
0000:007f:ffff:ffff   |                          |
                      |                          |
                      |                          |
                      |      User (512G)         |
                      |                          |
                      |                          |
0000:0000:0000:0000   |                          |
--------------------> +--------------------------+
ffff:ffff:ffff:ffff   +--------------------------+
                      |                          |
                      |                          |
                      z                          z
                      |                          |
                      |                          |
ffff:ffc0:b000:0000   |--------------------------|                       1:b000:0000 +------------------------+
                      |                          |                                   |                        |
                      |     memory (2.75G)       |                                   | Physical DRAM (2.75G)  |
                      |                          |                                   |                        |
ffff:ffc0:0000:0000   +==========================+  <-- PAGE_OFFSET  --> 1:0000:0000 +------------------------+
                      |                          |
                      |                          |
                      |                          |
                      |      vmemmap (4G)        |
                      | +----------------------+ |
                      | |    actual (44M)      | |
ffff:ffbf:0000:0000   +--------------------------+
                      |//////////////////////////|
ffff:ffbe:ffe0:0000   +--------------------------+
                      |     PCI I/O (16M)        |
ffff:ffbe:fee0:0000   +--------------------------+
                      |//////////////////////////|
ffff:ffbe:fec0:0000   +--------------------------+
                      |     fixed (4M)           |
ffff:ffbe:fe7f:d000   +--------------------------+
                      |//////////////////////////|
ffff:ffbe:bfff:0000   +--------------------------+
                      |                          |
                      |                          |
                      |                          |
                      |                          |
                      |                          |
                      |                          |
                      z     vmalloc (250G)       z
                      |                          |
                      |                          |
                      |                          |
                      |                          |
                      |                          |
                      |                          |
ffff:ff80:087c:f76c   | +----------------------+ |
                      | |        .bss          | |
                      | |        .data         | |
                      | |        .init         | |  Kernel
                      | |        .rodata       | |
                      | |        .text         | |
ffff:ff80:0808:0000   | +----------------------+ |
ffff:ff80:0800:0000   +--------------------------+
                      |     modules (128M)       |
ffff:ff80:0000:0000   +--------------------------+
ffff:ffff:ffff:ffff+--------------------------+
|                          |
|                          |
z z
|                          |
|                          |
ffff:ffc0:b000:0000 |------------------------------------------1:b000:0000+------------------------+
|                          |                                   |                        |
|内存(2.75G)| |物理DRAM(2.75G)|
|                          |                                   |                        |
ffff:ffc0:0000:0000+=====================================+1:0000:0000+------------------------+
|                          |
|                          |
|                          |
|vmemmap(4G)|
| +----------------------+ |
||实际(44M)||
ffff:ffbf:0000:0000+--------------------------+
|//////////////////////////|
ffff:ffbe:FF0:0000+--------------------------+
|PCI I/O(16M)|
ffff:ffbe:fee0:0000+--------------------------+
|//////////////////////////|
ffff:ffbe:fec0:0000+--------------------------+
|固定(4米)|
ffff:ffbe:fe7f:d000+--------------------------+
|//////////////////////////|
ffff:ffbe:bfff:0000+--------------------------+
|                          |
|                          |
|                          |
|                          |
|                          |
|                          |
zVMalloc(250G)z
|                          |
|                          |
|                          |
|                          |
|                          |
|                          |
ffff:ff80:087c:f76c |+-----------------------------------+|
|| bss ||
||数据||
||.init | |内核
||罗达塔||
||文本||
ffff:ff80:0808:0000 |+-----------------------------------+|
ffff:ff80:0800:0000+--------------------------+
|模块(128M)|
ffff:ff80:0000:0000+--------------------------+
参考资料:


?感谢您的评论。我确实看到了那个帖子,但它是针对32位机器的…我猜32位和64位机器之间有一些区别。。。顺便说一句,在我的系统上,似乎VA_位=
39
,页偏移量=
0xffff:ffc0:0000:0000
。我不知道为什么在这个布局中,大多数范围都在pageu OFFSET之下,最后一项在pageu OFFSET之上……似乎我对pageu OFFSET的理解是错误的(我假设这是用户和内核空间之间的边界,但事实并非如此,这是内核内存空间的一半,用户空间和内核空间之间有一个大洞)。”给出了带有VA_位39的Arm64内存映射的良好说明。