ARM启动流程回顾

S3C2440:从Nandflash启动情况下,上电设备会自动把Nandflash前4KB的内容拷贝到位于0地址处的BootSRAM,这部分代码会继续将剩余的代码从Nandflash拷贝到内存,然后跳转到内存上去执行剩余的代码。
S3C6410:从SD卡或Nandflash启动时,IROM的内容会被自动映射到0地址处,IROM上的代码称为BL0,这部分代码会把Nandflash上的前8KB内容拷贝到ISRAM,称为BL1,BL1会把BL2拷贝到内存,然后跳转到内存执行,由BL2把剩余的操作系统代码拷贝到内存,然后将CPU交给操作系统。
S5PV210:与6410类似,不同的是,210的ISRAM比较大,可以同时容纳BL1和BL2,所以BL2也是拷贝到ISRAM执行,由BL2将剩余的操作系统拷贝到内存。

代码搬移分析

由于还未学习Nandflash的相关操作,所以我们现在还不能把代码从Nandflash中拷贝出来放到内存。此处的代码搬移指的是将代码从SRAM拷贝到内存,然后跳转到内存去执行。

下面分析各平台的代码搬移源地址和目的地址:
S3C2440:SRAM从0地址开始,DRAM从0x30000000开始
S3C6410:SRAM从0x0c000000开始,DRAM从0x50000000开始
S5P210:SRAM从0xD0020000开始,DRAM从0x20000000开始

编写搬移代码

copy_to_ram:
    ldr r0, =0x0c000000   @SRAM for 6410
    ldr r1, =0x50008000   @DRAM for 5410
    add r3, r0, #1024*4
    
copy_loop:
    ldr r2, [r0], #4
    str r2, [r1], #4
    cmp r0, r3
    bne copy_loop
    mov pc, lr

  • 无标签