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文件编写的函数。
时间: 2024-10-13 23:39:49