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表项解析

访问权限和缓存策略下一节再讲

#嵌入式笔面经分享##嵌入式##笔试##嵌入式转岗的难度怎么样#
全部评论

相关推荐

程序员花海:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
秋招吐槽大会
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务