首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >u-boot :重定位

u-boot :重定位
EN

Stack Overflow用户
提问于 2013-05-24 01:10:36
回答 3查看 6.5K关注 0票数 18

这是一个与u-boot相关的基本问题。

为什么u-boot代码会重新定位?

好吧,如果u-boot是从非闪存或引导ROM空间执行的,这是有意义的,但如果它已经从SDRAM运行,为什么它必须再次重新定位自己?

EN

回答 3

Stack Overflow用户

发布于 2013-05-24 05:07:57

这个问题经常出现。Good answers有时也是如此。

我同意在开发期间将构建加载到SDRAM是很方便的。这对我来说很管用,我一直都在这么做。我在闪存中有一些特殊的启动代码,它不能启用MMU/缓存。对于我的u-boot构建,我在闪存和ram构建之间切换CONFIG_SYS_TEXT_BASE。我经常这样运行我的开发构建。

作为一个实际问题,处理MMU/缓存的重新初始化将是一件非常重要的事情。而U-Boot从简单性中受益于IMO,因为省略了这样的东西。

丹尼克斯的技术领导已经表达了他的opinion。IIRC他的其他帖子的措辞比那篇更强烈。我得到的印象是他不喜欢重复自己的话。

更新:为什么要重新定位。从RAM访问内存比从ROM访问更快,如果目标没有指令缓存,这将特别重要。从RAM执行允许闪存重新编程;此外(更小的)它允许带有“陷阱”指令的软件断点;此外,它更像是目标的正常操作模式,因此,如果从RAM的突发读取有问题,将在早期启动时看到故障。

票数 5
EN

Stack Overflow用户

发布于 2014-04-17 22:37:05

U-boot必须在内存中保留3个区域来存储: 1) u-boot本身,2) uImage (压缩内核),以及3)未压缩内核。这3个区域必须小心地放置在u-boot中,以防止冲突。

然而,上一阶段的引导加载程序(BL2或BL1)将u-boot带入内存并不知道u-boot在这三个区域上的运行情况。因此,它只能将u-boot加载到DRAM内存中的较低地址并跳转到该地址。然后,在u-boot执行一些基本的初始化并检测到当前PC不在计划的位置之后,u-boot调用重定位函数,该重定位函数将u-boot移动到计划的位置并跳转到它。

票数 3
EN

Stack Overflow用户

发布于 2017-04-25 17:00:24

NOR flash的代码必须初始化SDRAM,然后将代码从Nor Flash复制到SDRAM中,这个过程会自行复制,因为可以启用内存管理单元,所以我们将启动虚拟地址映射。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16719986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档