S5PV210裸机程序之重定位与链接脚本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了S5PV210裸机程序之重定位与链接脚本相关的知识,希望对你有一定的参考价值。

s5pv210开发板要求代码在0xD0020010处开始执行(BL1),但是有时我们的程序需要重定位在另外一个地址执行(如uboot),这个时候需要我们在汇编代码处加入重定位操作的代码,使得程序能够长跳转到另外一个地址继续执行代码而不会因为执行了与地址有关编码而导致执行错误。

链接脚本如下:

SECTIONS
{
    . = 0xD0024000;

    .text : {
        start.o
        * (.text)    
    }

    .data : {
        * (.data)
    }
    
    bss_start = .;
    .bss : {
        * (.bss)
    }

    bss_end = .;
}

汇编重定位代码如下:

    adr r0, _start        //load runtime _strat to r0
    ldr r1, =_start        //load link _strat to r1
    ldr r2, =bss_start    //
    cmp r0,r1        //
    bleq c_led_blink    //

copy_loop:
    ldr r3, [r0], #4    //
    str r3, [r1], #4    //
    cmp r2, r1         //if(tr_start == lk_strat)
    bne copy_loop        //
clean_bss:
    ldr r0, =bss_end
    cmp r0, r2
    beq run_on_dram
    mov r3, #0
bss_clean_loop:
    str r3, [r2], #4
    cmp r2, r0        //if(bss_start == bss_end)
    bne bss_clean_loop

run_on_dram:
    ldr pc, =c_led_blink

其中,c_led_blink为一个c文件编写的函数。

本文出自 “沃特” 博客,请务必保留此出处http://water3700348.blog.51cto.com/13058625/1948369

以上是关于S5PV210裸机程序之重定位与链接脚本的主要内容,如果未能解决你的问题,请参考以下文章

嵌入式Linux裸机开发——S5PV210中断处理流程

S5PV210裸机程序之点亮LED基于九鼎X2103BVS

s5pv210——中断

嵌入式Linux裸机开发——S5PV210定时器

S5PV210-arm裸机-启动过程

s5pv210v3s开发板下载裸机程序的两种方式