1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
关于u-boot的代码重定位疑惑,这个疑惑存在好久,而且查了好多资料,都有不同的解读,希望有关大神解惑
1、第一阶段代码在RAM的4K空间,把nandflash的bootloader代码复制到SDRAM的过程中,是只复制第二阶段的还是整个uboot? 在第一课的毕业班代码中,从nandflash中复制代码的起始地址是0,难道不是整个uboot吗?书中为什么说是复制第二阶段的代码? 2、跳转 是跳转到第二阶段C入口点 还是 链接地址uboot的起始地址处 3、如果是跳转到C入口点,如何计算C入口点相对于uboot起始的偏移? 希望知道问题的大神解惑,谢谢!!1 |
|
相关推荐
3个回答
|
|
复制的是整个uboot这句话理解应该是对的
2440设为nand启动的时候,片内有4k的ram(从0地址开始),外面接有64M的sdram(地址从0x30000000),裸板程序烧在nand flash上面,一上电nand 的内容会自动复制到4kram那里,然后从0地址开始运行。如果程序超过4k(比如u-boot)(或者不想程序在ram上运行),那么就把nand的内容复制到sdram,sdram有64m,应该复制到那里呢 答:复制到链接地址(就是程序运行后它应该位于的地方) 问:一开始地址为0,为什么能执行 答:因为这段代码是用位置无关码写的 位置无关码:CPU取址时,总是相对于本条执行指令的相对地址去取指。比如执行一个ADD指令时,PC要取下一指令的地址,就在原来的基础上+4。这就不管你代码放在存储器的任何位置,只要他们的相对地址没有改变,就能正常执行程序。一般上电复位那几条语句就必须是位置无关码指令。
|
|
|
|
我也想过这个问题。 我的理解是,复制的是整个uboot,比如uboot有5步,第一步是复制,然后5步都被拷贝到SDRAM中,之后从SDRAM中的第二部开始执行。 这里应该把握的就是程序的链接地址的概念。
|
|
|
|
我想通了,
复制的是整个uboot 跳转的时候跳转到start_armboot,用的是ldr pc , start_armboot,而start_armboot在链接的时候有个绝对地址,该地址大于33f80000,跳转过去就是第二阶段的代码,不知道理解的对不对 |
|
|
|
只有小组成员才能发言,加入小组>>
197个成员聚集在这个小组
加入小组为什么点亮LED的例子放在NORFlash上跑会出现奇怪的现象?
2181 浏览 6 评论
1983 浏览 5 评论
韦东山老师推出的《玩转ARM裸机实战》课程将帮你以上问题一扫而光!
4541 浏览 1 评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 20:29 , Processed in 0.607753 second(s), Total 80, Slave 61 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号