- 论坛徽章:
- 0
|
8可用积分
关于U-BOOT的问题!请大家帮帮忙 ,先谢了!
最近看了u-boot关于s3c440bx的移植代码,其中对于start.s中有几处不明白的地方
/*
now copy to SRAM the interrupt vector
*/
adr r0, real_vectors
add r2, r0, #1024
ldr r1, =0x0c000000
add r1, r1, #0x08 <===为什么要加上0x08?
vector_copy_loop:
ldmia r0!, {r3-r10}
stmia r1!, {r3-r10}
cmp r0, r2
ble vector_copy_loop
还有一个问题:
real_vectors:
b reset
b undefined_instruction
b software_interrupt
b prefetch_abort
b data_abort
b not_used
b irq
b fiq
/*************************************************/
undefined_instruction:
mov r6, #3
b reset
software_interrupt:
mov r6, #4
b reset
prefetch_abort:
mov r6, #5
b reset
data_abort:
mov r6, #6
b reset
not_used:
/* we *should* never reach this */
mov r6, #7
b reset
irq:
mov r6, #8
b reset
fiq:
mov r6, #9
b reset
为什么用r6附值,为什么给r6附不同的值?
不同的模式跳转到reset时,r6中的值是不同的,通过这个值来判断当前处于什么模式,这具体是怎么实现的?
源代码见附件
[ 本帖最后由 jun_h_sc 于 2008-8-21 16:08 编辑 ] |
最佳答案
查看完整内容
大概看了一下code。基本上没看出来什么特别的地方。对于uboot的code真没怎么研究过。给一些我的想法吧:第一个 +0x8,这个让我想起内核中THREAD_START_SP,是THREAD_SIZE - 8,也不是从头开始,为什么呢?感觉这两个似乎有点联系,但是不太清楚原因。第二个r6的值,我感觉是用来调试使用的,这样在reset的时候,可以从r6的值判断出来是从哪里reset的。
|