Linux内存初始化

1、启动阶段,uboot将kernel image和dtb拷贝到内存中,并将dtb的物理地址告诉kernel;
问题:kernel此时只知道dtb的物理地址,没有完成映射,如何访问

/*
 * PGD: 页全局目录,一级页表
 * PUD:页上级目录,二级页表
 * PMD:页中间目录,三级页表
 * PT:页表,四级页表
 */
void __init early_fixmap_init(void)

2、Fixed map机制:编译kernel时,在虚拟地址空间中预留一段fixed区域,其中的一部分虚拟地址空间,预留用来映射dtb所在的物理地址,
fixed map区域描述的一个例子:arch/arm64/include/asm/fixmap.h 中的 enum fixed_address 结构;

arm64:
default page size: CONFIG_ARM64_4K_PAGES
default va space size: CONFIG_ARM64_VA_BITS_39
default arm64 va bits: CONFIG_ARM64_VA_BITS=39

posted @ 2021-07-01 17:16  hug567  阅读(183)  评论(0)    收藏  举报