Uboot 引导内核时加载地址与入口地址问题

本文探讨了UBoot在引导内核时如何处理加载地址与入口地址的问题。当内核镜像带有64字节头部时,bootm命令会根据加载地址和指定地址是否相同来决定是否移除头部。如果不同,内核会被复制到加载地址运行,入口地址需调整;如果相同,入口地址需推后64字节。在设置加载和入口地址时必须考虑下载地址,否则可能导致启动失败。
摘要由CSDN通过智能技术生成

如果使用 mkimage 生成内核镜像文件的话,会在内核的前头加上了 64 bytes 的信息头,供建立 tag 之用。bootm 命令会首先判断 bootm xxx 这个指定的地址 xxx 与 -a 指定的加载地址是否相同。

如果不同的话会从这个地址开始提取出这个 64 bytes 的头部,对其进行分析,然后把去掉头部的内核复制到 -a 指定的加载地址去运行;
如果相同的话那就让其原封不同的放在那,但 -e 指定的入口地址会推后 64 bytes,以跳过这 64 bytes 的头部。
我们来看看这两种不同的情况:

1) mkimage -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -n linux-3.0.2 -d zImage uImage

这种情况,只能把 uImage download 到 0x30008000 的位置上,否则从 0x30008040 是启动不了的。

原因:如果将 uImage (加了头的镜像文件)下载到不同于指定加载地址的地方,则会进行上面的操作,将去掉头部的内核拷贝到指定的加载地址,此时加载地址和入口地址需要是相同的,因为已经没有镜像头了,所以此时入口地址也应该为 0x30008000,而不应该再加上 64 个字节。所以在构建镜像头部中的加载地址和入口地址时千万要考虑下载的地址,否则将会启动失败。

2) mkimage -A arm -O linux -T kernel -C none -a 30008000 -e 30008000 -n linux-3.0.2 -d zImage uImage

这种情

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值