《ARM与Linux些许问题》第一章:ARM工作模式

发布者:lambda21最新更新时间:2016-06-24 来源: eefocus关键字:ARM  Linux  工作模式 手机看文章 扫描二维码
随时随地手机看文章
====================================================================================================================================

    早期的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:堆栈指针。

关键字:ARM  Linux  工作模式 引用地址:《ARM与Linux些许问题》第一章:ARM工作模式

上一篇:《ARM与Linux些许问题》第二章:Linux操作系统与ARM工作模式
下一篇:ARM寄存器的7种工作模式和几种寻址方式

推荐阅读最新更新时间:2024-03-16 14:58

ARM9的嵌入式仿人传感器设计
0 引 言 传感器技术是仿人机器人研究的关键技术之一.仿人机器人之所以能在已知或未知的环境中完成一定的作业功能,是因为它能够通过传感器感知外部环境信息和自身状态,获得反馈信息,实现系统的闭环控制.目前在仿人机器人中应用的传感器种类繁多,例如视觉传感器、电子罗盘、加速度计和超声波传感器等都是仿人机器人中常用的传感器. DF-1机器人是我院自主研制的一款仿人机器人.本文首先对DF-1机器人总系统进行了介绍,然后根据DF-1机器人需要实现的功能,设计DF-1机器人的传感器系统,然后实现传感器系统的具体工作电路,利用arm9实现了传感器系统信息的采集,最后对传感器系统的效果进行了试验验证. 1 DF-1仿人机器人简介 DF
[单片机]
<font color='red'>ARM</font>9的嵌入式仿人传感器设计
NIOS软核处理器的Linux引导程序U-boot设计
摘要:针对将cClinux向Nios处理器移植过程中的启动加载程序U-boot bootloader进行研究。首先介绍移植的步骤,然后利用bootloader的设计思想,着重讨论U-boot在Nios中的设计与实现,最后对U-boot在基于Linux的嵌入式系统 中的运用作了探索和展望。 关键词:U-boot bootloader uClinux Nios软核 1 概述 1.1 Nios简介 Nios是Altera公司以RISC为基础的可配置、可裁减软核处理器。它具有16位指令集和16/32位数据通路,通过将包括16或32位高性能处理器在内的移种应用模块嵌入到通用FPGA/CPLD内,实现完全可配置的嵌入式系统。其开发套件
[半导体设计/制造]
ARM处理器简介
  在关注Android的时候,有一些CPU架构方面的术语知识需要给自己补充的。主要有ARM、X86/Atom、MIPS、PowerPC,其中ARM在智能手机上面一枝独秀:)   其中ARM/MIPS/PowerPC均是基于精简指令集机器处理器的架构;   X86则是基于复杂指令集的架构,Atom是x86或者是x86指令集的精简版。   根据各种新闻,Android在支持各种处理器的现状:   ARM+Android 最早发展、完善的支持,主要在手机市场、上网本、智能等市场;   X86+Android 有比较完善的发展。有ATOM+Android的上网本,且支持Atom+Android 和 Atom+Window7双系统;
[单片机]
<font color='red'>ARM</font>处理器简介
黑客将任天堂Switch变成了一个Linux平板电脑
    许多人都可以想到一个主要原因来破解一台游戏主机。很明显,你可以在破解主机上玩盗版游戏。   这就是为什么现代的游戏机很难被破解的原因,因为盗版游戏涉及到成千上万的收入。   但是有些人只是想在他们自己的硬件上运行他们选择的软件。对于那些人来说,Linux on the Switch是一个巨大的成就。   几个星期前,fail0verflow黑客集体在Twitter上推出了一个启动Linux的Nintendo Switch的提议。   现在终于有了结果,fail0verflow有一个完整版的Linux发行版的视频,它运行在被黑的Switch上,支持触摸屏,一个完全可操作的web浏览器,甚至还有一个GPU驱动的演示应用程序。
[手机便携]
关于ARM的三种中断调试方法介绍
  嵌入式软件开发流程   参照嵌入式软件的开发流程。第一步:工程建立和配置。第二步:编辑源文件。第三步:工程编译和链接。第四步:软件的调试。第五步:执行文件的固化。   在整个流程中,用户首先需要建立工程并对工程做初步的配置,包括配置处理器和配置调试设备。编辑工程文件,包括自己编写的汇编和C语言源程序,还有工程编译时需要编写的链接脚本文件,调试过程中需要编写存储区映像文件和命令脚本文件,以及上电复位时的程序运行入口的启动程序文件。   对后四种文件的理解很重要,其作用解释如下。   (1) 链接脚本文件:在程序编译时起作用。该文件描述代码链接定位的有关信息,包括代码段,数据段,地址段等,链接器必须使用该文件对整个系统的代码
[单片机]
eil MDK 和 IAR 两款ARM开发工具区别比较
一、概述 Keil MDK-ARM(旧称RealView MDK)开发工具源自德国Keil公司,被全球上百万的嵌入式开发工程师验证和使用,是ARM公司目前最新推出的针对各种嵌入式处理器的软件开发工具。 KEIL MDK集成了业内最领先的技术,包括uVision3、uVision4、uVision5集成开发环境与ARM编译器。支持ARM7、ARM9、Cortex-M0、Cortex-M0+、Cortex-M3、Cortex-M4、Cortex-R4内核核处理器。 Keil MDK可以自动配置启动代码,集成Flash烧写模块,强大的Simulation设备模拟,性能分析等功能,与ARM之前的工具包ADS等相比,ARM编译器
[单片机]
ARM异常中断的原因及处理措施
当ARM异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。当异常中断处理程序执行完成后,程序返回到发生中断指令的下条指令处执 行。在进入异常中断处理程序时,要保存被中断程序的执行现场,从异常中断处理程序退出时,要恢复被中断程序的执行现场。 1、引起异常的原因 对于ARM核,可以且只能识别7种处理器异常,每种异常都对应一种ARM处理器模式,当发生异常时,ARM处理器就切换到相应的异常模式,并调用异常处理 程序进行处理。 (1)、指令执行引起的异常 软件中断、未定义指令(包括所要求的协处理器不存在是的协处理器指令)、预取址中止(存储器故障)、数据中止。 (2)、外部产生的中断 复位、FIQ、IRQ。
[单片机]
基于ARM9处理器的嵌入式Boa服务器网络远程监测实现
随着高科技技术逐渐融入到传统的农副业,温室培养已成为生产反季节作物的方式。介绍了基于S3C2410处理器的温室监测控制系统的设计,并设计了一种基于ARM9处理器的嵌入式Boa服务器的网络远程监测实现方案,用户通过以太网对温室内的环境进行监测和一些设备的控制,提高远端机器的安全可靠性。 随着经济的快速发展和科技的进步,人们的生活水平不断提高,对生活质量的要求越来越高,对春茶的需求也大大增加。使得春茶供不应求,从而提出了温室培养茶树,以缓解人们对春茶的需求。 随着Internet技术的兴起,在嵌入式设备的管理与交互中,基于Web方式的应用成为目前的主流,这种程序结构也就是大家非常熟悉的B/S结构,即在嵌入式设备上运行一个支持脚
[单片机]
基于<font color='red'>ARM</font>9处理器的嵌入式Boa服务器网络远程监测实现
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved