U-boot Start.s

_TEXT_BASE:
.word TEXT_BASE


.globl lowlevel_init
lowlevel_init:
/* memory control configuration */
/* make r0 relative the current location so that it */
/* reads SMRDATA out of FLASH rather than memory ! */
ldr     r0, =SMRDATA
ldr r1, _TEXT_BASE
sub r0, r0, r1    //
r0 减去 r1 其结果存入 r0 ,也即 SMDATA 中的起始地 0x33F8xxxx

减去0x33F80000,其结果就是13个寄存器的值在NOR Flash存放的开始地址

 


ldrr1, =BWSCON/* Bus Width Status Controller */
add     r2, r0, #13*4
0:
ldr     r3, [r0], #4
str     r3, [r1], #4
cmp     r2, r0

bne     0b


relocate: /* U-BOOT重新定位到RAM*/

         //r0=0;

    adr r0, _start      /* r0是代码的当前位置*/

    //r1=TEXT_BASE = 0x33F80000

    ldr r1, _TEXT_BASE  /*测试判断是从FLASH启动,还是RAM  */

    cmp     r0, r1     /*比较R0R1,调试的时候不需要重定位。 */

    beq     stack_setup  /*如果R0等于R1,跳到重定位代码。*/

 

    //如果不是从RAM运行的话,则将代码拷贝到_TEXT_BASE标识的RAM中。

    /*准备重新定义代码。*/

    ldr r2, _armboot_start//_armboot_start=_start

    ldr r3, _bss_start  //

    sub r2, r3, r2      /* r2得到armboot的大小*/

    add r2, r0, r2      /* r2得到要复制代码的末尾地址*/

//kaobei guo cheng

copy_loop:/*重新定位代码*/

    ldmia   r0!, {r3-r10}       /*从源地址[r0]复制,r0指向_start(=0)*/

    stmia   r1!, {r3-r10}       /*复制到目的地址[r1],r1指向_TEXT_BASE(=0x33F80000)*/

    cmp r0, r2          /* 复制数据块直到源数据末尾地址[r2]*/

    ble copy_loop

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值