临时页表分析mmu开启前,需要建立好kernel、dtb、trampoline等页表。以便mmu开启后,并且在内存管理模块运行之前,kernel可以正常初始化,dtb可以正常地被解析。这部分页表都是临时页表,最终的页表在setup_vm_final()建立。
临时页表创建顺序:
首先为fixmap创建早期的pgd、pmd,这时pgd使用early_pg_dir。然后对从kernel开始的前2m内存建立二级页表,此时pgd使用trampoline_pg_dir,为这2m建立的页表也叫作superpage。再然后,对整个kernel创建二级页表,此时pgd使用early_pg_dir。最后为dtb预留4m大小创建二级页表。
页表创建函数create_pgd_mapping()void __init create_pgd_mapping(pgd_t *pgdp, uintptr_t va, phys_addr_t pa, phys_addr_t sz, pgprot_t prot)pgdp:pgd页表
va:虚拟地址
pa:物理地址
sz:映射大小,pgdir_size或pmd_size或pte_size
prot:page_kernel_exec/page_kernel表示当前是最后一级页表,否则pa代表下一级页表的物理地址
create_pmd_mapping()static void __init create_pmd_mapping(pmd_t *pmdp, uintptr_t va, phys_addr_t pa, phys_addr_t sz, pgprot_t prot)pmdp:pmd页表
va:虚拟地址
pa:物理地址
sz:映射大小,pmd_size或page_size
prot:权限,page_kernel_exec/page_kernel表示当前是最后一级页表,否则pa代表下一级页表的物理地址
create_pte_mapping()static void __init create_pte_mapping(pte_t *ptep, uintptr_t va, phys_addr_t pa, phys_addr_t sz, pgprot_t prot)ptep:pte页表
va:虚拟地址
pa:物理地址
sz:映射大小,page_size
prot:权限,page_kernel_exec/page_kernel表示当前是最后一级页表,否则pa代表下一级页表的物理地址
使用举例例如,将虚拟地址page_offset映射到物理地址pa,映射大小为4k,创建三级页表pgd、pmd和pte:
create_pgd_mapping(early_pg_dir,page_offset, (uintptr_t)early_pmd,pgdir_size,page_table);create_pmd_mapping(early_pmd,page_offset, (uintptr_t)early_pte,pgdir_size,page_table);create_pte_mapping(early_pte,page_offset, (uintptr_t)pa,page_size,page_kernel_exec);这样创建后,mmu就会根据page_offset在pgd中找到pmd,然后再pmd中找到pte,最后取出物理地址。
大数据的十大应用领域,你会用到哪一个
中芯国际14nm良率追平台积电 苹果下一款M1X芯片曝光
长城魔镜T600炫彩机箱评测 堪称装机利器
深度学习在工业缺陷检测中的应用
三星发布新一代Family Hub智能冰箱 集成了AI语音助手Bixby
RISC-V Linux的页表创建
工业大数据的概念
详解光伏监控系统在光伏电站的作用
如何通过FPGA变成我们看到的色彩斑斓的图片
DDR3价格水涨船高 产能紧缺何时才能改善
简述单点触摸,点触摸,多点触摸的关系与区别
乌兹别克斯坦200兆瓦太阳能招标吸引54家企业,中国电建在列
电池修复技术:了解设备就是这么简单
虚拟存储有什么样子的特点
OpenAI 把在模拟器中强化学习学到的方案迁移到机械手上
stm32单片机gpio工作原理是怎样的呢?看完立马学会了
虚拟现实内容症结:除了技术 还缺什么
将树莓派设置为媒体服务器的7种方法
微软跨Windows、WinPhone和Xbox平台游戏展示
肖特基二极管选型参数解读