uboot load address、entry point、 bootm address以及kernel运行地址的意义及联系
来源:互联网 发布:知无涯者 豆瓣 编辑:程序博客网 时间:2024/05/16 09:58
按各地址起作用的顺序,uboot引导linux内核启动涉及到以下地址:
- load address:
- entry point: 这两个地址是mkimage时指定的
- bootm address:bootm为uboot的一个命令,以此从address启动kernel
- 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
具体细节可参看uboot代码common/cmd_bootm.c中bootm_load_os函数的实现:
switch (comp) { case IH_COMP_NONE: if (load == blob_start || load == image_start) { printf(" XIP %s ... ", type_name); no_overlap = 1; } else { printf(" Loading %s ... ", type_name); memmove_wd((void *)load, (void *)image_start, image_len, CHUNKSZ); } *load_end = load + image_len; puts("OK\n"); break;
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
因此,在mkimage以及设置uboot boot command的时候需要注意到以上两种情况。
至于kernel的运行地址,其与前3个地址没有关系,除了要避免内存覆盖导致解压后kernel不完整的情况。
zImage的头部有地址无关的自解压程序,因此刚开始执行的时候,zImage所在的内存地址(entry point)不需要同编译kernel的地址相同。自解压程序会把kernel解压到编译时指定的物理地址,然后开始地址相关代码的执行。在开启MMU之前,kernel都是直接使用物理地址(可参看System.map)。
----
1. if bootm address equal load address, don't mov and go (load address + 0x40) to excute, so entry point is load address +0x40.
2. if bootm address not equal load address, mov (bootm address + 0x40) to load address and excute here, so entry point is load address.
====
http://www.cnblogs.com/sywtt/archive/2012/01/25/2329284.html
- uboot load address、entry point、 bootm address以及kernel运行地址的意义及联系
- uboot load address、entry point、 bootm address以及kernel运行地址的意义及联系
- linux基础之uboot load address、entry point、 bootm address以及kernel运行地址的意义及联系
- linux基础之uboot load address、entry point、 bootm address以及kernel运行地址的意义及联系
- linux基础之uboot load address、entry point、 bootm address以及kernel运行地址的意义及联系
- uboot mkimage load address entry address
- Linux3.6.7中Make uImage的load address 和 Entry Point相同的问题
- Linux3.6.7中Make uImage的load address 和 Entry Point相同的问题
- 嵌入式Linux Make uImage的load address 和 Entry address相同的问题
- IMPORT ADDRESS TABLE ENTRY
- ARM Android内核虚拟地址到物理地址的转换实例 (ARM Android kernel virtual address to physical address)
- uboot向kernel的传参机制bootm与tags
- uboot knowledge address
- Load Effective Address指令的作用
- linux kernel linear address
- [uboot] uboot启动kernel篇(二)——bootm跳转到kernel的流程
- [uboot] uboot启动kernel篇(二)——bootm跳转到kernel的流程
- address
- 手势监听类
- 关于symbian
- 解决Set property 'System.Windows.ResourceDictionary.DeferrableContent'threw an exception.
- 安装配置RMS服务器步骤
- remote gdb
- uboot load address、entry point、 bootm address以及kernel运行地址的意义及联系
- about modbus
- C#在Form之间传值问题
- linux network api
- IOS中输入框被软键盘遮挡的解决办法
- svn
- c# webservice
- java入门2
- symbian fp 区别