在/arch/x86/include/asm/page_64_types.h下有如下两行:
#define __START_KERNEL_map _AC(0xffffffff80000000, UL)
#define KERNEL_IMAGE_START _AC(0xffffffff80000000, UL)
这就是对空间大小的划分,在0xffffffff80000000之前的是给用户空间,在0xffffffff80000000之后的给内核空间,如果你现在手里有大约12G的内存想让内核态下可以使用大小10G的空间可以修改此值,将上面两句改为如下:
#define __START_KERNEL_map _AC(0xfffffffc00000000, UL)
#define KERNEL_IMAGE_START _AC(0xfffffffc00000000, UL)
然后,再将你的内核加载到连续的物理内存起始地址即可,这样内核就可以有16G寻址空间。物理地址分布情况可以查看e820的信息取得。