[kernel 启动流程] (第六章)第一阶段之——打开MMU

本文详细介绍了Linux Kernel启动过程中打开MMU的步骤,包括配置CP15协处理器的c1、c2和c3寄存器,以及如何通过设置c1寄存器的bit0来启用MMU。同时,分析了__v7_setup、__enable_mmu和__turn_mmu_on等关键代码段,讲解了打开MMU前的寄存器设置和页表配置。
摘要由CSDN通过智能技术生成

[kernel 启动流程]系列

建议参考文档

================================================

零、说明

本文是《[kernel 启动流程] (第一章)概述》的延伸,
阅读本文前建议先阅读《[kernel 启动流程] (第一章)概述》

1、kernel启动流程第一阶段简单说明

arch/arm/kernel/head.S

  • kernel入口地址对应stext
ENTRY(stext)
  • 第一阶段要做的事情,也就是stext的实现内容

    • 设置为SVC模式,关闭所有中断
    • 获取CPU ID,提取相应的proc info
    • 验证tags或者dtb
    • 创建临时内核页表的页表项
    • 配置r13寄存器,也就是设置打开MMU之后要跳转到的函数。
    • 使能MMU
    • 跳转到start_kernel,也就是跳转到第二阶段

本文要介绍的是“使能MMU”的部分。

2、疑问

主要带着以下几个问题去理解

  • 如何打开MMU?
  • 打开MMU前的一些寄存器设置?

一、MMU控制

MMU的配置操作都是通过操作CP15协处理器来实现的。

1、CP15协处理器寄存器说明

寄存器说明请参考《ARM的CP15协处理器的寄存器》。
表格如下

寄存器编号 基本作用 在 MMU 中的作用 在 PU 中的作用
c0 ID 编码(只读) ID 编码和 cache 类型
c1 控制位(可读写) 各种控制位
c2 存储保护和控制 地址转换表基地址 Cachability 的控制位
c3 存储保护和控制 域访问控制位 Bufferablity 控制位
c4 存储保护和控制 保留 保留
c5 存储保护和控制 内存失效状态 访问权限控制位
c6 存储保护和控制 内存失效地址 保护区域控制
c7 高速缓存和写缓存 高速缓存和写缓存控制
c8 存储保护和控制 TLB 控制 保留
c9 高速缓存和写缓存 高速缓存锁定
c10 存储保护和控制 TLB 锁定 保留
c11 保留

重点从MMU的功能方面说明如下几个寄存器

(1)c1,MMU的控制寄存器

<
bit 15 14 13 12 11 10 9 8 7 6 5 4
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值