打印
[应用相关]

ARM处理器7种工作模式

[复制链接]
1023|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一、ARM处理器7种工作模式(特权模式 特权模式异常模式)
  • 用户模式(USR):正常程序执行模式,不能直接切换到其他模式
  • 系统模式(SYS):运行操作系统的特权任务,与用户模式类似,但具有可以直接切换到其他模式等特权
  • 快中断模式(FIQ):支持高速数据传输及通道处理,FIQ异常响应时进入此模式
  • 中断模式(IRQ):用于通用中断处理,IRQ异常响应时进入此模式
  • 管理模式(SVC):操作系统保护模式,系统复位和软件中断响应时进入此模式(由系统调用执行软中断SWI命令触发)
  • 中止模式(ABT):用于支持虚拟内存和/或存储器保护,在ARM7TDMI没有大用处
  • 未定义模式(UND):支持硬件协处理器的软件仿真,未定义指令异常响应时进入此模式
    除用户模式外,其余6种工作模式都属于特权模式
     特权模式中除了系统模式以外的其余5种模式称为异常模式
     大多数程序运行于用户模式
     进入特权模式是为了处理中断、异常、或者访问被保护的系统资源




    硬件权限级别:系统模式 > 异常模式 > 用户模式

快中断与慢中断区别:快中断处理时禁止中断
二、异常的优先级

            

三、存储器格式
  • 大端格式:高字节在低地址,低字节在高地址
  • 小端格式:高字节在高地址,低字节在低地址


四、ARM体系的CPU有两种工作状态
  • ARM状态
  • THumb状态

五、Linux操作系统与ARM工作模式
    首先,ARM开发板在刚上电或复位后都会首先进入SVC即管理模式,此时、程序计数器R15-PC值会被赋为0x0000 0000;bootloader就是在此模式下,位于0x0000 0000的NOR FLASH或SRAM中装载的,因此、开机或重启后bootloader会被首先执行。
     接着,bootloader引导Linux内核,此时、Linux内核一样运行在ARM的SVC即管理模式下;当内核启动完毕、准备进入用户态init进程时,内核将ARM的当前程序状态CPSR寄存器M[4:0]设置为10000、进而用户态程序只能运行在ARM的用户模式。
     由于ARM用户模式下对资源的访问受限,因此、可以达到保护Linux操作系统内核的目的。
     需要强调的是:Linux内核态是从ARM的SVC即管理模式下启动的,但在某些情况下、如:硬件中断、程序异常(被动)等情况下进入ARM的其他特权模式,这时仍然可以进入内核态(因为就是可以操作内核了);同样,Linux用户态是从ARM用户模式启动的,但当进入ARM系统模式时、仍然可以操作Linux用户态程序(进入用户态,如init进程的启动过程)。
     即:Linux内核从ARM的SVC模式下启动,但内核态不仅仅指ARM的SVC模式(还包括可以访问内核空间的所有ARM模式);Linux用户程序从ARM的用户模式启动,但用户态不仅仅指ARM的用户模式。



参考文献:

ARM7的工作模式

ARM体系的7种工作模式

Linux操作系统与ARM工作模式

ARM工作模式


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

沙发
wahahaheihei| | 2017-4-12 11:37 | 只看该作者
开机或重启后bootloader会被首先执行

使用特权

评论回复
板凳
feelhyq| | 2017-4-12 12:05 | 只看该作者
wahahaheihei 发表于 2017-4-12 11:37
开机或重启后bootloader会被首先执行

开机或重启后 bootrom最先执行,其次才是BootLoader

使用特权

评论回复
地板
wahahaheihei| | 2017-4-12 17:03 | 只看该作者
feelhyq 发表于 2017-4-12 12:05
开机或重启后 bootrom最先执行,其次才是BootLoader

bootrom是什么,跟那个BootLoader还不一回事?

使用特权

评论回复
5
feelhyq| | 2017-4-13 11:54 | 只看该作者
wahahaheihei 发表于 2017-4-12 17:03
bootrom是什么,跟那个BootLoader还不一回事?

举个简单的例子,STM32 boot0,boot1的值不一样会导致程序从不同的地方去执行代码,判断boot0,boot1的数值肯定是有一段代码去判断的。这段代码芯片厂商会永远的固化在芯片里面。再举个例子,通过USB进行对STM32下载程序的时候, 芯片内部肯定也有代码去接收从PC段USB助手发过来的数据,然后写进片内flash。说明STM32的bootrom肯定包含了USB接收程序。说白了 bootrom就是芯片厂商固化的一段最开始运行代码,是个黑盒,不会给用户看到。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

116

帖子

0

粉丝