异常比中断的优先级高,中断可以屏蔽,但异常是一定要去处理的。 1.undefined_instruction CPU遇到了不认识的指令,则会进入未定义指令异常处理函数,因为CPU不认识该指令,所以通常CPU遇到非法指令,则无法继续执行,会使内核崩溃panic。但在崩溃前会操作系统会打印一些debug信息,供工程师分析。 undefined instruction 2.software_interrupt 软中断,一般用在系统调用,用用户模式进入保护模式,或者是超级用户模式。 3.prefetch_abort 预取值终止,比如cpu内存只有512k,而有指令让程序跳转到1G的地方运行,就会出错。 4.data_abort 告诉cpu到一个不存在的地方去取数据,cpu取不到数据,不得不停下来处理异常。 ARM Linux异常处理之data abort(一) DataAbort简单分析 5.irq 就是一般意义上的中断,定时器中断,外部触发中断等 6.fiq 快中断
ldr pc, _undefined_instruction
把undefined_instruction标号处的内容,放入pc指针。 例如: 把abc标号处的内容放入pc指针中去,即跳转到0x1000去运行。 加入abc标号处不是放了一个立即数,而是途中的xyz,那么意思就是跳转到0x200去运行。
对_undefined_instruction这异常来说,发生异常时,如果是当前在spl中,则调到1处,否则调到2处 spl是第二段程序加载器,这部分代码比较小,只用来配置一些简单的功能,然后引导后一级loader加载,发生异常时,就跳转到自身,做死循环。 2处的就是uboot的主体部分,异常时就跳转到如下部分。