内核head.S的__create_page_tables介绍
各位老铁们,前片文章咱们粗略地堆MMU有了一定的认识,知道了他是谁干什么用的?有了堆MMU的理解,咱们才能进一步理解__create_page_tables。
在uboot完成相关硬件的初始化后,最后跳转到kernel的入口函数(假设地址为0x40000000,那么就会将PC设置为0x40000000),此时,由于MMU尚未开启,所以程序一直运行在物理地址空间,也就是PC的值,也就是指令地址,都是物理地址。
一旦MMU开始后,地址就会经过MMU转换为物理地址,也就是所有地址就会被认为是虚拟地址,所以__create_page_tables的使命是在开启MMU前,做一下前期的准备,那下面我们看下__create_page_tables都做了那些工作?
__create_page_tables都做了什么?
__create_page_tables会把内核镜像编译链接的虚拟地址与其所存放在memory内的物理地址二者之间的映射建立起来,这样,一旦开启MMU,MMU就会把CPU发出访问的编译链接虚拟地址依照这种建立好的映射进而转换翻译为memory的物理地址,这样CPU就可以正确的得到其发出访问虚拟地址对应物理地址内的指令或数据