uboot load address、entry point、 bootm address以及kernel运行地址的意义及联系

linux基础之uboot load address、entry point、 bootm address以及kernel运行地址的意义及联系

按各地址起作用的顺序,uboot引导linux内核启动涉及到以下地址:

1. load address:

2. entry point: 这个地址及load address 是mkimage时指定的

3. bootm address:bootm为uboot的一个命令,以此从address启动kernel

4. kernel运行地址:在具体mach目录中的Makefile.boot中指定,为kernel启动后实际运行的物理地址

mkimage -n 'linux-3.2.1' -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008000 -d zImage uImage

理论上因为mkimage要为zImage加上0x40字节的header,所以entry point = load address + 0x40

但由于uboot 的bootm对uImage处理不是简单的go操作,其对前三个地址都有比较判断,所以在实际的操作中,就分为两种不同的情况:

1: bootm地址和load address一样

    此种情况下,bootm不会对uImage header后的zImage进行memory move的动作,而会直接go到entry point开始执行。因此此时的entry point必须设置为load address + 0x40。

    如果kernel boot过程没有到uncompressing the kernel,就可能是这里设置不对。

    boom address == load address == entry point - 0x40

2: bootm地址和load address不一样(但需要避免出现memory move时出现覆盖导致zImage被破坏的情况)

  此种情况下,bootm会把uImage header后的zImage move到load address(见上方代码),然后go到entry point开始执行。 由此知道此时的load address必须等于entry point。

    boom address != load address == entry point

 

事实上我自己验证的时候发现都可以,至少对于内核而言 0x40及地址是否一致都可以跑起来

其中zImage是真正的内核代码编译的文件,添加设备树之后就变成了zImage-dtb,而uImage就是mkimg的结果文件,添加了64字节,支持uboot来引导启动内核

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值