[kernel 启动流程] (第三章)第一阶段之——proc info的获取

本文深入探讨了Linux Kernel在arm平台上启动的第一阶段,特别是如何获取CPU ID和对应的proc info。讲解了通过mrc指令获取CPU ID,以及通过__lookup_processor_type函数找到匹配的proc info结构体。proc info包含CPU ID、MMU标志等关键信息,用于初始化阶段的内存管理和MMU配置。
摘要由CSDN通过智能技术生成

本文是基于arm平台。例子都是以tiny210(s5pv210 armv7)为基础的。
参考《ARM 的 CP15 协处理器的寄存器》

[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,也就是跳转到第二阶段

本文要介绍的是“获取CPU ID,提取相应的proc info”的部分。

2、疑问

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

  • 为什么要获取CPU ID和proc info?也就是说proc info存放了什么东西以至于有必要在第一阶段、打开MMU之前就去获取?
  • 如何获取对应CPU的proc info?

3、对应代码实现

    __HEAD
ENTRY(stext)
    mrc p15, 0, r9, c0, c0      @ get processor id,用于获取CPU ID,具体参考第二节
    bl  __lookup_processor_type     @ r5=procinfo r9=cpuid,根据cpu id获取proc info,具体参考第一节和第三节。
    movs    r10, r5             @ invalid processor (r5=0)?,判断proc info是否存在
 THUMB( it  eq )        @ force fixup-able long branch encoding
    beq __error_p           @ yes, error 'p'

mrc p15, 0, r9, c0, c0 @ get processor id,用于获取CPU ID,具体参考第二节
bl __lookup_processor_type @ r5=procinfo r9=cpuid,根据cpu id获取proc info,具体参考第一节和第三节。

一、procinfo

1、说明
procinfo使用proc_info_list结构体,用来说明一个cpu的信息,包括这个cpu的ID号,对应的内核数据映射区的MMU标识等等。

<

  • 11
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值