bootm命令中地址参数,内核加载地址以及内核入口地址
2015-06-01 09:33
435 查看
bootm命令用紧随其后的参数来寻找magic number,以此来确认数据的有效性。若有效,则bootm会根据找到的image的头64字节信息建立tag信息供linux kernel使用
根据内核加载地址和入口地址的不同,有以下三种情况:
1. 内核加载地址和入口地址相同。此时内核存放在ram的地址不能与入口地址相同,否则无法启动。
NewSTO平台实验: 内核的入口地址和加载地址都是0x8000,内核从nand读取到0x8000,然后boom 0x8000
u-boot首先比较bootm的参数与加载地址,发现二者相同,略去搬移内核的步骤,直接从入口地址0x8000启动,但此时真正的内核启动代码应该在0x8040处,因此启动失败。
2. 内核加载地址和入口地址相同。此时内核存放在ram的地址不能与入口地址不同,可以启动。
NewSTO平台实验: 内核的入口地址和加载地址都是0x8000,内核从nand读取到0x10000,然后boom 0x8000
u-boot首先比较bootm的参数与加载地址,发现二者不同,u-boot首先读取位于0x10000处的64字节文件头,然后将0x10040之后的内核部分搬移到0x8000处,接着从入口地址0x8000启动,启动成功。
3. 内核加载地址和入口地址不同。内核一定要存放在加载地址处才可以成功启动。
未做实验验证,从上面两例分析可以推断出此结论。
根据内核加载地址和入口地址的不同,有以下三种情况:
1. 内核加载地址和入口地址相同。此时内核存放在ram的地址不能与入口地址相同,否则无法启动。
NewSTO平台实验: 内核的入口地址和加载地址都是0x8000,内核从nand读取到0x8000,然后boom 0x8000
u-boot首先比较bootm的参数与加载地址,发现二者相同,略去搬移内核的步骤,直接从入口地址0x8000启动,但此时真正的内核启动代码应该在0x8040处,因此启动失败。
2. 内核加载地址和入口地址相同。此时内核存放在ram的地址不能与入口地址不同,可以启动。
NewSTO平台实验: 内核的入口地址和加载地址都是0x8000,内核从nand读取到0x10000,然后boom 0x8000
u-boot首先比较bootm的参数与加载地址,发现二者不同,u-boot首先读取位于0x10000处的64字节文件头,然后将0x10040之后的内核部分搬移到0x8000处,接着从入口地址0x8000启动,启动成功。
3. 内核加载地址和入口地址不同。内核一定要存放在加载地址处才可以成功启动。
未做实验验证,从上面两例分析可以推断出此结论。
相关文章推荐
- 刚开通,发布第一篇文章!!
- oracle 分库分表(sharding)
- 遍历Map的四种方法
- 如何通过配置文件实现数据库配置-grails
- 为什么学CCNA
- 为什么学CCNA
- Android平台根目录文件
- Replication还可以这样玩
- 【并查集】hdu5176
- ACdream 1224 Robbers (贪心)
- eval、json.parse()的介绍和使用注意点
- Android与服务器端数据交互(基于SOAP协议整合android+webservice)
- Esper专栏介绍
- LeetCode String to Integer (atoi)
- (HDU-5246)2015Astar-初赛-1001-超级赛亚ACMer
- [转载] 运维平台规划体系全介绍
- oracle判断一个字符串中是否包含另外一个字符串
- notepad++什么快捷键可以选择一行?
- css :before :after
- php用于URL的base64