在/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的信息取得。