ARM七种模式理解

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

          用户模式(usr):ARM处理器正常的程序执行状态

          快速中断模式(fiq):用于高速数据传输或通道处理

          中断模式(irq):用于通用的中断处理

          管理模式(svc):操作系统使用的保护模式,系统复位和软件中断进入此模式

          数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护

          系统模式(sys):运行具有特权的操作系统任务

          未定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真

除用户模式外,其他6种工作模式都属于特权模式,大多数程序运行于用户模式,进入特权模式是为了处理中断、异常,或者访问被保护的系统资源。

我们简单的来分析一下那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模式来说,可以访问资源的能力相同,但是拥有更多的硬件资源。

    例如,uboot初始化阶段CPU处于SVC模式,从理论上来说,虽然可以设置为sys和svc模式的任一种,但是从uboot方面考虑,其要做的事情是初始化系统相关硬件资源,需要获取尽量多的权限,以方便操作硬件,初始化硬件等。将CPU设置为SVC模式,便于展开工作。uboot最终目的是为了启动Linux的kernel,在做好准备工作(即初始化硬件,准备好kernel和rootfs等)跳转到kernel之前,本身就要满足一些条件,其中一个条件,就是要求CPU处于SVC模式的。所以,uboot在最初的初始化阶段,就将CPU设置为SVC模式,也是最合适的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章