arm linux start_kernel之前页表初始化

在内核版本3.19.1中,启动进程start_kernel之前,页表初始化涉及多个步骤。首先,初始化包括设置CPU为svc模式,验证atags指针,然后创建页表。页表初始化主要映射三个区域:清零页表内容,平映射__turn_mmu_on到__turn_mmu_on_end空间,以及映射内核虚拟地址到物理地址。这样做确保开启MMU后,CPU能正确执行内核代码。
摘要由CSDN通过智能技术生成

内核版本是3.19.1

内核的入口在head.S的stext中,进入start_kernel之前,大概经历了如下几步:

1.将CPU工作模式设置成svc模式,屏蔽中断

2.获取CPU ID,然后依据CPU ID查找对应的PROC INFO

3.校验atags指针

4.__create_page_tables 创建页表,本文重点的记录一下这部分内容


页表初始化主要完成了三部分区域的映射。

初始化过程如下。

Step 1. 清零页表内容。

页表的停放在内核镜像前的16K物理空间内,即(phys_offset+text_offset - page_dir_size,phys_offset + text_offset)区间内。

这里的几个宏定义如下:

page_dir_size:页表的大小

phys_offset:代码中要求使用PLAT_PHYS_OFFSET这个宏,总之就是RAM的物理起始地址,比如tq2440中SDRAM挂在BANK6上,对应的值就是BANK6的物理地址。

text_offset:内核镜像的开始地址

Step 2, 映射 __turn_mmu_on 到 __turn_mmu_on_end这段空间,这段空间的物理地址与虚拟地址相同,即所谓的平映射。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值