内存管理(三):内核上电启动阶段的页表映射
Linux版本:4.14.74 目录 1 启动阶段所需页表 2 创建过程 2.1启动阶段的页表大小 2.2创建描述符函数 2.3 创建中间页表 2.4 section mapping 2.5 映射的整体流程 1 启动阶段所需页表 在kernel启动阶段,会创建两次地址映射 Identity mapping Kernel image mapping 在BootLoader以及uboot中,mmu功能是关闭的,操作的都是物理地址。为了提高性能,加快初始化速度,我们必须某个阶段(越早越好)打开MMU和cache,打开MMU之后操作的就是虚拟地址,为了从物理地址(Physical Address,简称PA)转换到虚拟地址(Virtual Address,简称VA)的平滑过渡,ARM推荐创建VA和PA相等的一段映射(例如:虚拟地址addr通过页表查询映射的物理地址也是addr)。这段映射在linux中称为identity mapping。 而为了执行kernel image,自然需要映射kernel image。 turn on MMU相关的代码被放入到一个特别的section,名字是.idmap.text,实际上对应上图中物理地址空间的IDMAP_TEXT这个block。这个区域的代码被mapping了两次,做为kernel image的一部分,它被映射到了__idmap_text