zoukankan      html  css  js  c++  java
  • uboot搬移部分和重定位部分的代码分析

    来看一下搬移部分和重定位部分的代码:


    relocate: /* U-BOOT重新定位到RAM*/
             //r0=0;
    adr r0, _start /* r0
    是代码的当前位置*/
    ldr r1, _TEXT_BASE /*测试判断是从FLASH启动,还是RAM  *///r1=TEXT_BASE = 0x33F80000

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


    //如果当前的位置就是0x33F80000,既然uboot能够正常执行,起始地址肯定是0x33F80000,所以如果起始地址等于0x33F80000,那肯定现在是从norflash中启动的。


    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
  • 相关阅读:
    QT1 HelloWorld
    SDL2.0 播放YUV
    vim寄存器
    Makefile模板
    apue初学--DIR
    apue初学--平台的判断
    各种推导式
    文件操作
    list tuple dict set
    字符串和编码
  • 原文地址:https://www.cnblogs.com/alan666/p/8312202.html
Copyright © 2011-2022 走看看