![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux 源码学习
文章平均质量分 66
朝搴夕揽
这个作者很懒,什么都没留下…
展开
-
linux 恒等映射 idmap 的作用
在head.S 中,__create_page_table时,将 __idmap_text_start 到 __idmap_text_end 的范围创建和恒等映射(物理地址与虚拟地址相同,详见。所以说,恒等映射保证了打开mmu 之后,cpu 仍然可以继续使用物理地址(因为物理地址会被mmu 作为虚拟地址翻译成相同的值)执行代码。通过搜索“idmap.text”,可以看到只有下表中的这些符合被放在了idmap.text 段中。原创 2024-04-16 08:52:14 · 214 阅读 · 0 评论 -
linux arm64 __create_page_tables 的结果验证
内核代码一开始,在完成了el2_setup, set_cpu_boot_mode_flag之后,就开始__create_page_tables本文主要概述__create_page_tables 的作用和过程。代码没必要一行一行分析,都是基础的汇编代码。并且内核本身有很全面的注释。本文目的是把这个过程拆解成很多个小段,从而更容易理解。原创 2024-04-08 08:30:39 · 830 阅读 · 0 评论 -
idmap_pg_dir 大小及作用
43ARM64_HW_PGTABLE_LEVELS 的含义是:在不使用段映射的情况下,需要多少个页表级别来寻址宽度为 ‘va_bits’ 的地址。因为我们用每个页表级别的 (PAGE_SHIFT - 3) 位来解析最高的 (va_bits - PAGE_SHIFT) 位。所以就需要(48-12) / (12-9) = 4 个级别,也就是PGD,PUD, PMD, PT (L0-L3)四级。即ARM64_HW_PGTABLE_LEVELS(48) = 41。原创 2023-08-10 08:40:15 · 259 阅读 · 0 评论 -
init_pg_dir 的大小及作用
在vmlinux.lds.S 中,有01EARLY_PGDSEARLY_PUDSEARLY_PMDS从System.map 中可以看到。原创 2023-08-08 08:18:21 · 301 阅读 · 0 评论 -
ARM64_HW_PGTABLE_LEVEL_SHIFT 宏的作用
所以,ARM64_HW_PGTABLE_LEVEL_SHIFT(4 - CONFIG_PGTABLE_LEVELS) 得到的其实是PGD, L0页表索引在64bit 虚拟地址所处的偏移量,即39。在 4K page 的情况下,因为pow(4, 12) = 4K,所以需要用bit11-0来表示某地址在该page中的偏移。比如四级页表,每级页表所占的bit 个数就是36/4 = 9,也就是下图所示的情况。设页表等级数 为n,那每级索引所占的bit个数就是36/n。原创 2023-07-18 08:50:48 · 206 阅读 · 0 评论