uboot初始化中,为何要设置CPU为SVC模式而不是设置为其他模式

举报
嵌入式与Linux那些事 发表于 2022/03/28 23:43:22 2022/03/28
【摘要】 uboot初始化中,为何要设置CPU为SVC模式而不是设置为其他模式在看Uboot的start.S文件时候,发现其最开始初始化系统,做的第一件事情,就是将CPU设置为SVC模式...
uboot初始化中,为何要设置CPU为SVC模式而不是设置为其他模式

在看Uboot的start.S文件时候,发现其最开始初始化系统,做的第一件事情,就是将CPU设置为SVC模式,但是S3C2440的CPU的core是ARM920T,其有7种模式,为何非要设置为SVC模式,而不是设置为其他模式呢?对此,经过一些求证,得出如下原因:


首先,先要了解ARM的CPU的7种模式是哪些:

http://www.docin.com/p-73665362.html


图表 22 ARM中CPU的模式

处理器模式 说明 备注
用户
(usr)
正常程序工作模式 此模式下程序不能够访问一些受操作系统保护的系统资源,应用程序也不能直接进行处理器模式的切换。
系统
(sys)
用于支持操作系统的特权任务等 与用户模式类似,但具有可以直接切换到其它模式等特权
快中断
(fiq)
支持高速数据传输及通道处理 FIQ异常响应时进入此模式
中断
(irq)
用于通用中断处理 IRQ异常响应时进入此模式
管理
(svc)
操作系统保护代码 系统复位和软件中断响应时进入此模式
中止
(abt)
用于支持虚拟内存和/或存储器保护 ARM7TDMI没有大用处
未定义
(und)
支持硬件协处理器的软件仿真 未定义指令异常响应时进入此模式

另外,7种模式中,除用户usr模式外,其它模式均为特权模式。


对于为何此处是svc模式,而不是其他某种格式,其原因,可以从两方面来看:

【第一方面】

我们先简单的来分析一下那7种模式:

中止abt和未定义und模式:

首先可以排除的是,中止abt和未定义und模式,那都是不太正常的模式,此处程序是正常运行的,所以不应该设置CPU为其中任何一种模式,所以可以排除。

快中断fiq和中断irq模式:

其次,对于快中断fiq和中断irq来说,此处uboot初始化的时候,也还没啥中断要处理和能够处理,而且即使是注册了终端服务程序后,能够处理中断,那么这两种模式,也是自动切换过去的,所以,此处也不应该设置为其中任何一种模式。

用户usr模式:

虽然从理论上来说,可以设置CPU为用户usr模式,但是由于此模式无法直接访问很多的硬件资源,而uboot初始化,就必须要去访问这类资源,所以此处可以排除,不能设置为用户usr模式。

系统sys模式 vs 管理svc模式:

首先,sys模式和usr模式相比,所用的寄存器组,都是一样的,但是增加了一些访问一些在usr模式下不能访问的资源。

而svc模式本身就属于特权模式,本身就可以访问那些受控资源,而且,比sys模式还多了些自己模式下的影子寄存器,所以,相对sys模式来说,可以访问资源的能力相同,但是拥有更多的硬件资源。

所以,从理论上来说,虽然可以设置为sys和svc模式的任一种,但是从uboot方面考虑,其要做的事情是初始化系统相关硬件资源,需要获取尽量多的权限,以方便操作硬件,初始化硬件。


从uboot的目的是初始化硬件的角度来说,设置为svc模式,更有利于其工作。

因此,此处将CPU设置为SVC模式。


【第二方面】

uboot作为一个bootloader来说,最终目的是为了启动Linux的kernel,在做好准备工作(即初始化硬件,准备好kernel和rootfs等)跳转到kernel之前,本身就要满足一些条件,其中一个条件,就是要求CPU处于SVC模式的。

(关于满足哪些条件,详情请参考:

ARM Linux Kernel Boot Requirements

http://www.arm.linux.org.uk/developer/booting.php

或者Linux内核文档:

kernel_source_root\documentation\arm\booting

中也是同样的解释:

“The CPU must be in SVC mode”)

所以,uboot在最初的初始化阶段,就将CPU设置为SVC模式,也是最合适的。


综上所述,uboot在初始化阶段,就应该将CPU设置为SVC模式。

文章来源: blog.csdn.net,作者:嵌入式与Linux那些事,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq_16933601/article/details/106268620

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200