Memory management 了解内核中的物理和虚拟内存布局

Memory management 了解内核中的物理和虚拟内存布局,memory-management,linux-kernel,vmalloc,Memory Management,Linux Kernel,Vmalloc,我有一个基于arm64的dragonboard410c,当它启动时,它会显示内存布局: software IO TLB [mem 0xb6c00000-0xbac00000] (64MB) mapped at [ff] Memory: 780212K/951296K available (9940K kernel code, 1294K rwda) Virtual kernel memory layout: vmalloc

我有一个基于arm64的dragonboard410c,当它启动时,它会显示内存布局:

software IO TLB [mem 0xb6c00000-0xbac00000] (64MB) mapped at [ff]
Memory: 780212K/951296K available (9940K kernel code, 1294K rwda)
Virtual kernel memory layout:                                    
vmalloc : 0xffffff8000000000 - 0xffffffbdbfff0000   (   246 )
vmemmap : 0xffffffbdc0000000 - 0xffffffbfc0000000   (     8 )
          0xffffffbdc0000000 - 0xffffffbdc1000000   (    16 )
fixed   : 0xffffffbffa7fd000 - 0xffffffbffac00000   (  4108 )
PCI I/O : 0xffffffbffae00000 - 0xffffffbffbe00000   (    16 )
modules : 0xffffffbffc000000 - 0xffffffc000000000   (    64 )
memory  : 0xffffffc000000000 - 0xffffffc040000000   (  1024 )
.init : 0xffffffc000e49000 - 0xffffffc000f43000   (  1000 )
.text : 0xffffffc000080000 - 0xffffffc000e483e4   ( 14113 )
我找不到它的意思的解释。 特别是什么是VMEMAP区域?为什么它有两个地址间隔? 还有,“固定”和“记忆”区域是什么

我发现,每当我使用带有what标志的kmalloc no meter时,我都会从内存区域获得一个地址。即使我使用vmalloc,我收到的地址也不是来自vmalloc区域。
那么,在内核模块中是否可以使用内存区域以外的区域呢

有关
vmemmap
的说明,请参见
mm/sparse-vmemmap.c
文件顶部的注释。有关值的含义,请参见
arch/arm64/mm/init.c
中的
mem_init()
函数(这些打印实际发生的位置)。对于
fixed
区域--请阅读
arch/arm64/include/asm/fixmap.h
文件中的注释。而
memory
zone就是DRAM的虚拟地址。