设为首页 加入收藏

TOP

U-Boot从ROM拷贝到RAM
2014-11-24 10:39:00 】 浏览:8712
Tags:U-Boot ROM 拷贝 RAM

U-BOOT从ROM拷到RAM


详见start.S
relocate: /* relocate U-Boot to RAM */
adr r0, _start /* r0 <- current position of code */
ldr r1, _TEXT_BASE /* test if we run from flash or RAM */
cmp r0, r1 /* don't reloc during debug */
beq stack_setup


ldr r2, _armboot_start
ldr r3, _bss_start
sub r2, r3, r2 /* r2 <- size of armboot */
add r2, r0, r2 /* r2 <- source end address */


copy_loop:
ldmia r0!, {r3-r10} /* copy from source address [r0] */
stmia r1!, {r3-r10} /* copy to target address [r1] */
cmp r0, r2 /* until source end addreee [r2] */
ble copy_loop


其中,
adr r0, _start
是取得_start行在内存(Nor Flash ROM)的实际位置,_TEXT_BASE则是RAM中的位置。
实际把plain binary格式的u-boot烧写到NOR Flash运行时,需要把Nor Flash中的代码拷贝到RAM。当u-boot在NorFlash中运行时,adr r0,_start可以取得该行的实际位置。


_armboot_start的值
_armboot_start:
.word _start
此值在编译时已经决定,为0x33F80000


_bss_start的值
_bss_start:
.word __bss_start
此值在编译时已经决定,即__bss_start的值,在link script中定义。


u-boot代码长度 = _armboot_start - _bss_start
u-boot代码末地址 = r2


ldmia : 每次取8个word
ldmia r0!, {r3-r10} /* copy from source address [r0] */
stmia r1!, {r3-r10} /* copy to target address [r1] */
直到r0 > r2 ,其中ble表示 <=,即r0<=r2时循环拷贝


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇TCP/IP编程中协议无关性的函数get.. 下一篇Android TabHost解决下面白线

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目