gpt4 book ai didi

linux - 如何解释 ARM64 上的虚拟内核内存布局?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:03:55 27 4
gpt4 key购买 nike

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

[    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_ARM64_PAGE_SHIFT=12
  • CONFIG_PGTABLE_LEVELS=3
  • CONFIG_ARM64_VA_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 +--------------------------+

引用资料:

关于linux - 如何解释 ARM64 上的虚拟内核内存布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51928583/

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