6410 uboot代码重定位问题
2013-02-27 23:18
357 查看
6410uboot有一段代码用于重定位代码:
s3c6410启动分为三个阶段,即bl0,bl1,bl2,bl0会根据不同的启动方式将bl1运行所需的镜像拷贝到steppingstone里,然后从steppingstone开始运行bl1,在bl1中会对时钟,内存,调试口等进行初始化,并在bl1最后将bl2镜像拷贝到ram运行。
这段代码需要按不同的启动方式来分析:
第一种为网上讲得比较多的nand 启动方式,这种方式下6410会把用于nand启动的uboot镜像拷贝到地址00000000开始的steppingstone里,并从00000000开始运行,即这个时候_start为00000000,考虑到运行速度等原因,所以uboot会把本身在运行的用于nand启动的uboot镜像重新拷贝到ram里运行,在运行到nand启动最后,它会将uboot的bl2拷贝到内存里,然后再跳到拷贝的起始地址运行,这时会再次进到到start.s里运行,而这时的_start地址就应该为RAM地址,所以就不需要再去重定位了,接下来就会去为
c语言代码运行准备栈空间;
第二种为6410中datasheet里讲的irom启动方式,这种方式下bl0运行时会把用于bl1启动的镜像拷贝到0c000000开始的steppingstone里,然后从这个地址开始运行,mmc启动就属于IROM启动方式,这时的_start应该就为0xc000000,所以也需要进行代码重定位,然后也会将bl2的代码拷贝到内存里,然后再运行。
对这代码我是这样理解的, 不知道是不是正确,如果高手看到了感觉有问题,请帮我指出来,谢谢。
adr r0, _start cmp r0, r6 beq clear_bss /* skip relocation */ mov r1, r6 /* r1 <- scratch for copy_loop */ ldr r3, _bss_start_ofs add r2, r0, r3 /* r2 <- source end address */ copy_loop: ldmia r0!, {r9-r10} /* copy from source address [r0] */ stmia r1!, {r9-r10} /* copy to target address [r1] */ cmp r0, r2 /* until source end address [r2] */ blo copy_loop
s3c6410启动分为三个阶段,即bl0,bl1,bl2,bl0会根据不同的启动方式将bl1运行所需的镜像拷贝到steppingstone里,然后从steppingstone开始运行bl1,在bl1中会对时钟,内存,调试口等进行初始化,并在bl1最后将bl2镜像拷贝到ram运行。
这段代码需要按不同的启动方式来分析:
第一种为网上讲得比较多的nand 启动方式,这种方式下6410会把用于nand启动的uboot镜像拷贝到地址00000000开始的steppingstone里,并从00000000开始运行,即这个时候_start为00000000,考虑到运行速度等原因,所以uboot会把本身在运行的用于nand启动的uboot镜像重新拷贝到ram里运行,在运行到nand启动最后,它会将uboot的bl2拷贝到内存里,然后再跳到拷贝的起始地址运行,这时会再次进到到start.s里运行,而这时的_start地址就应该为RAM地址,所以就不需要再去重定位了,接下来就会去为
c语言代码运行准备栈空间;
第二种为6410中datasheet里讲的irom启动方式,这种方式下bl0运行时会把用于bl1启动的镜像拷贝到0c000000开始的steppingstone里,然后从这个地址开始运行,mmc启动就属于IROM启动方式,这时的_start应该就为0xc000000,所以也需要进行代码重定位,然后也会将bl2的代码拷贝到内存里,然后再运行。
对这代码我是这样理解的, 不知道是不是正确,如果高手看到了感觉有问题,请帮我指出来,谢谢。
相关文章推荐
- linux 下如何定位代码问题
- u-boot.lds 如何定位代码在flash和内存中地址
- XCode调试技巧–设置全局断点快速定位问题代码所在行
- U-Boot重定位代码分析
- OK6410-A编译u-boot时遇到的问题及解决
- U-BOOT-2016.07移植 (第三篇) 代码重定位
- U-Boot中关于TEXT_BASE,代码重定位,链接地址相关说明
- U-Boot重定位代码分析
- 解决IE6中固定定位问题(代码)
- OK6410之u_boot.bin等问题解决
- U-Boot中关于TEXT_BASE,代码重定位,链接地址相关说明
- ndk-stack定位不出崩溃代码行的问题
- infer静态代码扫描不能执行问题定位
- UBOOT-2012-10在OK6410平台的移植(四)uboot 2012.10 raise: Signal # 8 caught的问题
- ARM Uboot经历——Uboot代码重定位
- OK6410之u_boot.bin等问题解决
- 游戏安全资讯精选 2018年第八期:3975款游戏被查处,游戏圈重击;Memcached被利用UDP反射攻击漏洞预警;VentureBeat称区块链或可定位和消除恶意可执行代码的安全问题
- liunx下cpu占用率高如何定位代码问题
- s3c6410 uboot代码分析《一》
- OK6410-A编译u-boot时遇到的问题及解决