U-BOOT从ROM拷到RAM
来源:互联网 发布:JAVA绘制窗体 编辑:程序博客网 时间:2024/05/17 03:37
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时循环拷贝
详见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时循环拷贝
0 0
- U-BOOT从ROM拷到RAM
- UBoot从ROM拷贝到RAM
- 龙芯软件开发(18)-- 乾坤大挪移,从ROM到RAM
- u-boot-2010.12移植到2440(二,移植在RAM中运行)
- [转]u-boot-2010.12移植到2440(二,移植在RAM中运行)
- [转]u-boot-2010.12移植到2440(二,移植在RAM中运行)
- [转]u-boot-2010.12移植到2440(二,移植在RAM中运行)
- U-BOOT runs in RAM on FL2440
- ROM RAM
- ram & rom
- RAM ROM
- U-boot 传递 RAM 和 Linux kernel 读取 RAM 参数
- U盘RAM、ROM和硬盘的内部结构、物理原理
- u-boot分析 六 (从code flow看u-boot到kernel的启动过程)
- 把程序从ROM中拷贝到RAM中运行模块的设计【ARM指令和Thumb指令的区分】
- 移植u-boot到mini2440--从norflash启动
- 嵌入式开发中用到的存储RAM FLASH ROM
- 嵌入式开发中用到的存储RAM FLASH ROM
- 仿ios侧滑退出主题引起的button问题
- activiti实战系列 排他网关(ExclusiveGateWay)
- php 纯静态缓存
- H.264(H264)视频文件的制作
- PHP中的变量
- U-BOOT从ROM拷到RAM
- centos6.5下python2.6.6版本升级Python2.7.6安装过程
- Dubbo高级篇_10_Dubbo消费端直连服务提供者(开发调试)
- 安卓开发 第二篇 我的安卓应用架构设计
- 年月日计算
- activiti实战系列 并行网关(parallelGateWay)
- 2016.4.16 随想
- poj 1239 Increasing Sequences dp lis
- C# Socket多线程编程实例-聊天程序