主题 : Uboot完全手册!内容非常全面!裸机学习必备! 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 47559
精华: 1
发帖: 20
金钱: 150 两
威望: 30 点
贡献值: 1 点
综合积分: 60 分
注册时间: 2011-05-23
最后登录: 2014-12-10
楼主  发表于: 2011-09-19 11:22

 Uboot完全手册!内容非常全面!裸机学习必备!


截取一段给大家看看,全文在下面的附件中,喜欢的可以下载。


3.2.1 中断向量表的设置
.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
Start.s文件一开始,就定义了_start的全局变量。也即,在别的文件,照样能引用这个_start变量。这段代码验证了我们之前学过的arm体系的理论知识:中断向量表放在从0x0开始的地方。其中,每个异常中断的摆放次序,是事先规定的。比如第一个必须是reset异常,第二个必须是未定义的指令异常等等。
需要注意的是,在这里,我们也可以理解:为何系统一上电,会自动运行代码。因为系统上电后,会从0x0地方取指令,而0x0处放置的是reset标签,直接就跳去reset标签处去启动系统了。
另外,这里使用了ldr指令。而ldr指令中的label,分别用一个.word伪操作来定义。比如:
_undefined_instruction: .word undefined_instruction
我们用source insight跟踪代码后,发现,undefined_instruction在start.s的后面给出了具体的操作,如下:
undefined_instruction:
get_bad_stack
bad_save_user_regs
bl do_undefined_instruction
在跳转到中断服务子程序之前,先有两个宏代码,一个是对stack的操作,一个是用户regs的保存。然后才能跳转如中断服务子程序中执行。请参考《ARM体系结构与编程》等相关书籍,自然能获得详细的答案。
值得一提的是,当发生异常时,都将执行u-boot-1.2.0\cpu\arm920t\ interrupts.c中定义的中断函数。也就是说,start.s中要跳转的这些中断子程序的代码,均在u-boot-1.2.0\cpu\arm920t\ interrupts.c中定义。
附件设置隐藏,需要回复后才能看到
级别: 新手上路
UID: 143383
精华: 0
发帖: 4
金钱: 20 两
威望: 4 点
贡献值: 0 点
综合积分: 8 分
注册时间: 2019-11-25
最后登录: 2019-12-03
1楼  发表于: 2019-11-26 13:52
学习一下