版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lvjianxin6015/article/details/55225473
前面一节已经完成了内存的初始化,以mini2440为例,要完成bootloader的启动,在板子上电后,cpu会自动将nand flash中前4kb的内存拷贝到SRAM(垫脚石)中,再由垫脚石将nand flash中剩余的代码拷贝到内存中。但是nand flash还没初始化,可以尝试将SRAM中的代码搬移到内存中去:
SRAM的起始地址为0
内存的地址是0x30080000
代码如下:
bl copy_to_ram
copy_to_ram:
ldr r0, =0x0
ldr r1, =0x30008000
add r3, r0, #1024*4
copy_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