前面一节已经完成了内存的初始化,以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
新闻热点
疑难解答