Linux内核6.18 内存管理 (18)__map_memblock 页表映射
本次看的是map_mem里的__map_memblock函数,里面会涉及到四级页表的内容。同样继续补充一些虚拟地址和物理地址的转换
https://elixir.bootlin.com/linux/v6.6/source/arch/arm64/mm/mmu.c#L607
6.6 的kernel出了点问题,用6.18的替一下
https://elixir.bootlin.com/linux/v6.18-rc1/source/arch/arm64/mm/mmu.c#L941
这就开始创建页表映射了
上锁
初始化下一级页表,映射下一级页表
直到pte
__phys_to_pfn(phys):将物理地址转换为物理页帧号(PFN,Page Frame Number),公式为 phys / PAGE_SIZE(如 4KB 页下,0x8000 对应 PFN 0x8)
pfn_pte(pfn, prot):生成 PTE 表项,将 PFN 和权限(prot)编码为硬件可识别的 PTE 格式(ARM64 中 PTE 占 64 位,包含物理页地址、读写权限、缓存策略等信息)。
__set_pte_nosync(ptep, pte):将生成的 PTE 表项写入 PTE 表(ptep 指向的位置),_nosync 表示不立即刷新 TLB(缓存同步操作延迟到后续统一执行)。
pfn pte PA VA之间的区别和联系
在内核init_pte中加了打印
PTE表项解析
访问权限和缓存策略下一节再讲
#嵌入式笔面经分享##嵌入式##笔试##嵌入式转岗的难度怎么样#