前面一節已經完成了內存的初始化,以mini2440為例,要完成bootloader的啟動,在板子上電后,cpu會自動將nand Flash中前4kb的內存拷貝到SRAM(墊腳石)中,再由墊腳石將nand flash中剩余的代碼拷貝到內存中。但是nand flash還沒初始化,可以嘗試將SRAM中的代碼搬移到內存中去:
SRAM的起始地址為0 內存的地址是0x30080000
代碼如下:
bl copy_to_ramcopy_to_ram: ldr r0, =0x0 ldr r1, =0x30008000 add r3, r0, #1024*4copy_loop: ldr r2, [r0], #4 str r2, [r1], #4 cmp r0, r3 bne copy_loop mov pc, lr注意:b和bl都是相對跳轉,比如在鏈接器腳本中,.start的起始地址是0x30080000,但并不是將0x30080000賦值給pc指針,程序第一步跳轉到reset處,又反匯編可以看到reset的地址為0x3008058,pc指針的值=跳轉pc+偏差=0+0x58=0x58
新聞熱點
疑難解答