Android培训班(94)内核解压过程7

通过上面的架构的学习,可以知道ARM体系总共有8个架构,每个架构有着不同的功能,因此下面的这个宏,就是选择第2个架构,因为第2个构架与后面的架构是有着很大的区别,比如第2个架构是24位地址线的,而后面架构全是32位的。并且支持的指令和寄存器也存在着差别,所以需要根据不同的架构来选择编译的代码,否则就会让CPU运行不能识别的指令。从这里学习到的知识点,就是可以定义宏来选择不同的CPU兼容性的代码。


#ifndef__ARM_ARCH_2__


ARM体系中主要有以下三种调试方式:

1ARMulator,打开AXD软件时默认打开的目标就是ARMulator

2)基于JTAG的调试代理Multi-ICE

3Angel调试监控程序

AngelARM公司的调试监控程序,也称为调试代理,由多个程序部件组成,与传统调试监控程序是差不多。Angel接收主机上发送过来的调试命令,执行指定的调试操作,诸如设置断点、单步执行目标程序、观察或修改寄存器等存储器内容之类的操作。与基于JTAG的调试代理不同,Angel调试监控程序需要占用一定的系统资源,如内存、串行端口等。使用Angel调试监控程序可以调试在目标系统运行的ARM程序或Thumb程序。并将调试结果反馈回主机,适用于各种ARM硬件平台。

下面这段代码,就会判断是否从Angel调试模式进入,当是从这种模式进入时,它还是处于用户运行模式下,软件中断也没有关闭,这样进入内核运行是不行的,因为内核系统要使用到内核特权指令,只有在内核模式才可以运行这些特权指令,才可以让操作系统处理特别的数据。因为现代操作系统的发展,需要把软件分为两个特权级,一个特权级是用户级别,一个特权级是系统级别。你也许问为什么要分为两个特权级呢?只有一个特权级不是更方便,更简单吗?从简单这一点来说,只有一个特权级别是比较简单,容易理解的,但是从安全和稳定的角度来看,就明显不足了。比如当一个黑客要进入系统时,设定CPU运行的操作系统在特权级别,而黑客的软件只能运行在用户级别,就很多指令和寄存器不能访问了,访问特别的设备,都需要通过调用系统的软件运行,这样系统里就可以挡住相应的请求。在稳定性方面,就更加重要了,比如不同软件,质量不一样,有一些软件有BUG,访问了不应访问的内存,就会导致整个系统死掉,这时就可以使用特权级来区分内存的访问的范围,只有处于特权级别的系统程序才可以访问所有内存,而应用软件无权访问系统的内存,就达到隔离的目的。

/*

* Booting from Angel - need to enter SVC mode and disable

* FIQs/IRQs (numeric definitions from angel arm.h source).

* We only do this if we were in user mode on entry.

*/

mrs r2,cpsr @ get current mode

tst r2,#3 @ not user?

bne not_angel

这三行程序是先从cpsr寄存器里读取当前CPU所处的状态,接着判断是否还处理用户模式,如果不是用户模式,就处理系统模式了,不再需要切换,直接跳到not_angel运行。否则,就需使用下面的指令从用户模式切换到系统模式。


mov r0,#0x17 @ angel_SWIreason_EnterSVC

swi 0x123456 @angel_SWI_ARM

这两行程序是先设置功能号在r0,以便传送给中断处理程序,然后使用软中断指令swi调用0x123456的中断功能,这样CPU就会进入系统模式SVC,运行0x08处的中断处理程序。Angel的中断处理程序发现0x170x123456的功能号,就不再返回用户模式,然后直接返回下一条指令执行,就运行下面的指令了,意思就是丢掉上一次保存的用户状态寄存器的内容,这样就进入SVC模式了。

not_angel:

mrs r2,cpsr @ turn off interrupts to

orr r2,r2, #0xc0 @ prevent angel from running

msr cpsr_c,r2

这三行代码主要用来关闭中断,以便运行系统过程中避免中断发生,导致系统设置参数不正常。当然是指一般可屏蔽的中断,如果是断电中断是无法阻止的。


#else

teqp pc,#0x0c000003 @ turn off interrupts

#endif

这一行代码主要第2架构ARMCPU设置CPU中断的指令。


通过上面几行代码的学习,发现理解几行汇编代码,就需要很多很多相关的系统知识,比如CPU的架构,系统的模式切换,中断系统,软中断,中断向量表,CPU的状态寄存器等等。如果一下子,理解不了这么多,就需要不断地重复学习,加上动手在开发板上实践了。



//QQ:9073204 EMAIL:9073204@qq.com

//蔡军生  2012-3-11

//培训文档100元一份


转载于:https://www.cnblogs.com/ajuanabc/archive/2012/03/11/2463028.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值