uboot的中断向量初始化

柔情痞子 提交于 2020-03-22 07:33:48

第一层引导程序的开始部分如下,正常启动的情况下程序从_start入口执行(config.mk定义,地址为0x00000000)。

但是开始有个疑问:就是_start入口后,第一个指令就执行了b reset,进入了reset标签,正常启动了,对于改指令后的红色部分,并不能有效执行,怎么才能把中断向量正常初始化呢?(中断函数在其他地方也没有执行、或定义过,只有此地方)。

经查,根据s3c2440的定义,中断向量的定义,是固定定义在0x0000000开始的地址上的,比如reset中断的地址是0x00000000,undefined_instruction是0x00000004,.......,这就可以解释了,编译时在固定位置上存储指定的中断处理方式即可(就是直接存储中断函数到pc,进行中断跳转)。而正常情况下是不需要执行的!

之所以执行b reset,是因为在启动时,中断已经发生了(重启)。

.globl _start
_start: b       reset
 ldr pc, _undefined_instruction
 ldr pc, _software_interrupt
 ldr pc, _prefetch_abort
 ldr pc, _data_abort
 ldr pc, _not_used
 ldr pc, _irq
 ldr pc, _fiq

_undefined_instruction: .word undefined_instruction
_software_interrupt: .word software_interrupt
_prefetch_abort: .word prefetch_abort
_data_abort:  .word data_abort
_not_used:  .word not_used
_irq:   .word irq
_fiq:   .word fiq

 .balignl 16,0xdeadbeef

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!