内核页表映射
static void __init map_mem(pgd_t *pgdp)
path:/home/dipsy/work/runliunx/runninglinuxkernel_5.0/arch/arm64/kernel/setup.c
void __init setup_arch(char **cmdline_p)
paging_init();
map_mem(pgdp);
static void __init map_mem(pgd_t *pgdp)
相关名词
PGD -> PUD -> PMD -> PTE
PGD: Page Global Directory
PUD: Page Upper Directory
PMD: Page Mid-level Directory
PTE: page table entry
pfn :page frame number
内核创建映射流程:
__map_memblock
__create_pgd_mapping
alloc_init_pud //分配并初始化(pud)页表
alloc_init_cont_pmd //连续的分配并初始化(pmd)页表
init_pmd //初始化PMD页表
alloc_init_cont_pte //连续的分配并初始化页表(pte)
init_pte //初始化页表项
set_pte //设置页表项
页表分配函数:
static phys_addr_t __init early_pgtable_alloc(void)
set_pte(ptep, pfn_pte(__phys_to_pfn(phys), prot));
__phys_to_pfn//物理地址转换成页帧号
pfn_pte//页帧号转换为页表项