1.ARM简介
关于arm的一些概念性的知识,这里就不再说明,因此需要了解三个方面的内容:
架构:ARMV5 ARMV6 ARMV7
内核:ARM9 ARM11 Cortex-A8
芯片:S3C2440 S3C6410
关于这三款芯片的比较:
2.arm处理器工作模式
关于arm处理器的工作模式,可以从手册中找到相关描述:
从上面可以看到,arm共有7种工作模式:
如图所示,ARM处理器一共有7种工作模式,其中用户态程序运行在用户模式,而Linux内核运行在SVC模式,
CPU的模式可以简单的理解为当前CPU的工作状态,比如:当前操作系统正在执行用户程序,那么当前CPU工作在用户模式,这时网卡上有数据到达,产生中断信号,CPU自动切换到一般中断模式下处理网卡数据(普通应用程序没有权限直接访问硬件),处理完网卡数据,返回到用户模式下继续执行用户程序。
- 特权模式
除用户模式外,其它模式均为特权模式(Privileged Modes)。ARM内部寄存器和一些片内外设在硬件设计上只允许(或者可选为只允许)特权模式下访问。此外,特权模式可以*的切换处理器模式,而用户模式不能直接切换到别的模式。
- 异常模式
特权模式中除系统(system)模式之外的其他5种模式又统称为异常模式。它们除了可以通过在特权下的程序切换进入外,也可以由特定的异常进入。比如硬件产生中断信号进入中断异常模式,读取没有权限数据进入中止异常模式,执行未定义指令时进入未定义指令中止异常模式。其中管理模式也称为超级用户模式,是为操作系统提供软中断的特有模式,正是由于有了软中断,用户程序才可以通过系统调用切换到管理模式。
- (1)用户模式(user)
用户模式是用户程序的工作模式,它运行在操作系统的用户态,它没有权限去操作其它硬件资源,只能执行处理自己的数据,也不能切换到其它模式下,要想访问硬件资源或切换到其它模式只能通过软中断或产生异常。
- (2)系统模式(system)
系统模式是特权模式,不受用户模式的限制。用户模式和系统模式共用一套寄存器,操作系统在该模式下可以方便的访问用户模式的寄存器,而且操作系统的一些特权任务可以使用这个模式访问一些受控的资源。
- (3)一般中断模式(irq)
一般中断模式也叫普通中断模式,用于处理一般的中断请求,通常在硬件产生中断信号之后自动进入该模式,该模式为特权模式,可以*访问系统硬件资源。
- (4)快速中断模式(fiq)
快速中断模式是相对一般中断模式而言的,它是用来处理对时间要求比较紧急的中断请求,主要用于高速数据传输及通道处理中。
- (5)管理模式(supervisor)svc
管理模式是CPU上电后默认模式,因此在该模式下主要用来做系统的初始化,软中断处理也在该模式下,当用户模式下的用户程序请求使用硬件资源时通过软件中断进入该模式。
- (6)终止模式(abort)
中止模式用于支持虚拟内存或存储器保护,当用户程序访问非法地址,没有权限读取的内存地址时,会进入该模式,linux下编程时经常出现的segment fault通常都是在该模式下抛出返回的。
- (7)未定义模式(undef)
未定义模式用于支持硬件协处理器的软件仿真,CPU在指令的译码阶段不能识别该指令操作时,会进入未定义模式。
Linux内核运行在SVC(管理模式),用户态程序运行在用户模式(user)
3.arm寄存器
arm共有37个寄存器,主要如下:
关于arm的寄存器,需要了解以下几点:
1.无论处于什么工作模式下,R0~R7都会被使用,并且发生工作模式切换时,需要进行现场保护
2.在快速中断模式时,可以对R8_fiq~R12_fiq的内容不进行保护,其他模式必须对R8~R12的内容进行保护
3.R14有两点作用:通过BL或者BLX指令调用子程序时存放当前的子程序的返回地址、在发生异常时用来保存该模式基于PC的返回地址
菜鸟一枚,如有错误,多多指教。。。