|
.extern main
.text
.global _start
@ 0x00: 系統入口,此處放置一條跳轉語句,跳過中斷向量表,至于中斷向量表,實際是最后被copy到SDRAM的高端地址,通過MMU來處理進入
_start: @-------->這里定義的入口處
b real_start @-------->這里是跳過reset,但是reset實際是存在的,但不是程序真正的開始
@ 0x04: 中斷向量表并非從0地址開始放置,因為我們使用的直接SDRAM調試時,中斷入口是需要通過MMU來映射的
Reset:
b Reset @直接在SDRAM中調試的話,實際是不使用Reset的,因此一Reset,硬件系統將從nand flash中讀取uboot來執行,所以此處實際是個空語句處理
@ 0x08: Undefined instruction exception
HandleUndef:
b HandleUndef
@ 0x0c: Software interrupt exception
HandleSWI:
b HandleSWI
@ 0x10: Prefetch Abort (Instruction Fetch Memory Abort)
HandlePrefetchAbort:
b HandlePrefetchAbort
@ 0x14: Data Access Memory Abort
HandleDataAbort:
b HandleDataAbort
@ 0x18: Not used
HandleNotUsed:
b HandleNotUsed
@ 0x1c: IRQ(Interrupt Request) exception
ldr pc,HandleIRQAddr
@ 0x20: FIQ(Fast Interrupt Request) exception
HandleFIQ:
b HandleFIQ
HandleIRQAddr:
.long HandleIRQ
real_start:
@here,跳過系統上電后從0地址出的中斷向量表開始執行,這是為了不用燒寫FLASH來進行調試
@here,此處應該先將系統設置為上電時系統的默認模式,因為此時系統尚運行于uboot的環境
ldr sp, =0x30100000 @設置運行于SDRAM時的堆棧
bl disable_watch_dog @關閉看門狗
bl clock_init @初始化時鐘,啟動PLL,FCLK=200MHz,HCLK=100MHz,PCLK=50MHz
bl memsetup_2 @設置SDRAM
@ bl init_nand @SDARM調試,不使用nand flash,所以不用初始化nand 控制器
bl copy_vectors_to_high @此處使用lelee自己的代碼,將0x3000 0004地址開始的中斷向量表copy到SDRAM的高端去
-----------------------------------------------------------
以上為head.s的開頭處
00000000 <.data>:
0: e1a0c00d mov ip, sp
4: e92dd800 stmdb sp!, {fp, ip, lr, pc}
8: e24cb004 sub fp, ip, #4 ; 0x4
c: e3a02313 mov r2, #1275068416 ; 0x4c000000
10: e3e034ff mvn r3, #-16777216 ; 0xff000000
14: e5823000 str r3, [r2]
18: e3a03313 mov r3, #1275068416 ; 0x4c000000
1c: e2833014 add r3, r3, #20 ; 0x14
20: e3a02003 mov r2, #3 ; 0x3
24: e5832000 str r2, [r3]
28: ee111f10 mrc 15, 0, r1, cr1, cr0, {0}
2c: e3811103 orr r1, r1, #-1073741824 ; 0xc0000000
30: ee011f10 mcr 15, 0, r1, cr1, cr0, {0}
34: e3a02313 mov r2, #1275068416 ; 0x4c000000
38: e2822004 add r2, r2, #4 ; 0x4
3c: e3a03917 mov r3, #376832 ; 0x5c000
40: e2833040 add r3, r3, #64 ; 0x40
44: e5823000 str r3, [r2]
48: e89da800 ldmia sp, {fp, sp, pc}
4c: 43434700 cmpmi r3, #0 ; 0x0
50: 4728203a undefined
54: 2029554e eorcs r5, r9, lr, asr #10
58: 2e342e33 mrccs 14, 1, r2, cr4, cr3, {1}
5c: 00000031 andeq r0, r0, r1, lsr r0
60: eafffffe b 0x60 @---->這里是中斷入口了
64: eafffffe b 0x64
68: eafffffe b 0x68
6c: eafffffe b 0x6c
70: eafffffe b 0x70
74: eafffffe b 0x74
78: e59ff000 ldr pc, [pc, #0] ; 0x80
7c: eafffffe b 0x7c
80: 300040c4 andcc r4, r0, r4, asr #1
84: e59fd04c ldr sp, [pc, #76] ; 0xd8
-----------------------------------------------
很納悶,不知道為什么突然邊成這樣了,之前都還是好好的,反匯編的開始處是中斷入口
誰給個答案?小弟謝謝了
|
|