您的位置 首页 发布

《ARM与Linux少许问题》第一章:ARM作业形式

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

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

前期的ARM核有状况(ARM或Thumb)切换(经过BX等指令修正CPSR寄存器(当时程序状况寄存器,寄存条件码标志,中止制止位,当时处理器形式以及其他状况和操控信息)中T的操控位完结程序状况的切换),现在ARM都只运用Thumb状况了。所以,咱们不在评论状况切换相关。

一、ARM七种作业形式及其运用场合(Linux操作体系运用了其间USR和SVC形式、呈现反常时还或许经过进入其他形式转为Linux内核态)

在CPSR寄存器中设置M[4:0]位,别离对应如下七种形式(留意:用户形式和体系形式只要对CPSR的读权限,因而、这两种形式下不能够经过直接设置CPSR进入其他形式(SWI汇编指令在外)):

1.用户形式(USR):用于正常履行程序。在Linux操作体系中,用户空间进程便是在这种形式下运转。CPSR寄存器M[4:0]设置10000。

2.体系形式(SYS):运转有特权的操作体系使命。CPSR寄存器M[4:0]设置11011。

这个形式和用户形式共用R15-pc(程序计数器,寄存下一条指令地点单元的地址)的值,因而不必ARM强制赋值。

ARM进入以下几种形式后,都需求给R15-PC寄存器从头赋值、也便是开端履行新的指令。

3.管理形式(SVC):操作体系运用的保护形式(高权限)。在Linux操作体系中,内核空间在这种形式下运转。CPSR寄存器M[4:0]设置10011。

当ARM刚上电或复位时、进入该形式,并强制PC从0x0000 0000处取指令;当体系软中止(如体系调用,调用ARM的SWI汇编指令)时、进入该形式,并强制PC从0x0000 0008处取指令——这也是ARM从用户形式自动切入管理形式(Linux从用户态自动进入内核态)的仅有办法。后边章节会详细剖析。

《ARM与Linux少许问题》第三章:Linux怎么从用户态进入内核态

《ARM与Linux少许问题》第四章:ARM渠道体系调用原理剖析

当呈现反常状况时,Linux还有或许在如下几种ARM形式下运转;如硬件中止、程序问题导致的反常等。

4.快速中止形式(FIQ):用于高速数据传输。CPSR寄存器M[4:0]设置10001。

进入该形式后、ARM强制PC从0x0000 001C处取指令。

5.外部中止形式(IRQ):用于一般的中止处理。CPSR寄存器M[4:0]设置10010。

进入该形式后、ARM强制PC从0x0000 0018处取指令。

6.数据拜访停止形式(ABT):当数据或指令预取停止时进入该形式,可用于虚拟内存及存储保护。CPSR寄存器M[4:0]设置10111。

当指令取停止时、进入该形式,并强制PC从0x0000 000C处取指令;当数据取停止时、进入该形式;并强制PC从0x0000 0010处取指令。

7.未界说指令停止形式(UND):当未界说的指令履行时进入该形式,可用于支撑硬件。CPSR寄存器M[4:0]设置11111。

当程序中呈现未界说的指令时、进入该形式,并强制PC从0x0000 0004处取指令。

在非user形式下的其他6中形式,有SVC,FIQ,IRQ,ABT,UND,SYS 都能够修正CPSR寄存器、然后操控ARM作业形式的切换。

在Linux操作体系中;当CPU处于特权形式(Linux处于内核态)时,能够随意进入用户态。而当CPU处于用户形式(Linux处于用户态)时,Linux从用户态切换到内核态(ARM从用户形式切换到其他特权形式)只要在体系调用和中止(中止进入IRQ形式,也能够操作内核)两种状况下发生,一般程序一开端都是运转于用户态,当程序需求运用体系资源时,就必须经过调用软中止进入内核态。

每一种作业形式的R13-SP(仓库指针寄存器,在仓库操作中运用)都是独立的。因而,对程序中需求用到的每一种形式都要给SP界说一个仓库地址。办法是改动状况寄存器(CPSR)内的状况位,使处理器切换到不同的状况,然后给SP赋值。留意:不要切换到User形式进行User形式的仓库设置,由于进入User形式后就不能再操作CPSR回到其他形式了,或许会对接下去的程序履行形成影响。

ARM在刚上电或复位后、进入SVC管理形式,并从0x0000 0000开端取指令;bootloader和Linux Kernel都是作业在此形式。

二、ARM作业形式切换的两种办法

1.被迫切换:是指ARM在当时作业形式下,没有要求形式切换、而被迫地进入别的一种形式。在ARM运转的时分发生一些反常(包含软中止)或许中止(硬中止)来进行形式切换。如上边说到的Linux操作体系从用户态到内核态,如硬件中止或程序反常。内核态不会被迫切换到用户态。

2.自动切换:是指ARM在当时作业形式下,经过一些自主操作、自动的要求切换作业形式。ARM经过软件改动,即软件设置寄存器来进行ARM的形式切换,由于ARM的作业形式都是能够经过相应寄存器的赋值来切换的。如上边说到的Linux操作体系从内核态到用户态;这里边有一个比较特别的状况:Linux用户态能够经过体系调用首要要求切换到内核态。

后边,我还会剖析要点剖析从Linux从用户态到内核态的切换。见《ARM与Linux少许问题》第三章:Linux怎么从用户态进入内核态

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

ARM首要寄存器汇总:

CPSR及SPSR:当时程序状况寄存器和保存程序状况寄存器;

R15-PC及R14-LR:程序计数器和用户保存PC的衔接寄存器;

R13-SP:仓库指针。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/fabu/276821.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部