load address:加载地址   load_addr      mkimage -a

entry point: 入口地址     entry_point     mkimage -e

bootm address:bootm 命令后面紧跟的地址,也就是加载地址  addr

kernel运行地址:zImage自解压后将kernel解压到实际运行的物理地址

所谓加载地址是指bootm将内核镜像文件拷贝到内存空间的位置,入口地址是加载地址确定后bootm从内核镜像文件中开始执行的地址

理论上 zImage转化为uImage需要添加0x40长度的header 头,  所以entry_point == load_addr + 0x40;

bootm对uImage处理:

  1.addr == load_addr

  也就是说bootm后的地址等于加载地址,即已经将内核镜像(带头部)加载到-a 指定的内存地址load_addr中, 

  此时:addr == load_addr == entry_point - 0x40;

  2.addr != load_addr:

  从addr所在地址提取取出内核镜像头部信息中进行处理, 并将去掉头部的内核直接加载到-a指定的地址load_addr。然后进入load_addr进行内核引导(entry_point)。所以此时地址:

  addr != load_addr == entry_point

  

switch (comp)
{
case IH_COMP_NONE:
if (load == blob_start || load == image_start) //addr == load_addr == entry_point - 0x40
{
printf(" XIP %s ... ", type_name);
no_overlap = 1;
}
else //addr != load_addr == entry_point
{
printf(" Loading %s ... ", type_name);
memmove_wd((void *)load, (void *)image_start,image_len, CHUNKSZ);
}
*load_end = load + image_len;
puts("OK\n");
break;
   .....
}

  

制作镜像头以及下载地址就有两种情况:

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

加载地址和入口地址相同    load_addr == entry_point

tftp 0x31000000 uImage

bootm 0x31000000

下载地址可以任意放.

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

入口地址在加载地址后面64个字节  entry_point == load_addr + 0x40

tftp 0x30008000 uImage

bootm 0x30008000

下载地址一定要在指定的加载地址上.

  

至于kernel的运行地址,其与前3个地址没有关系,除了要避免内存覆盖导致解压后kernel不完整的情况。zImage的头部有地址无关的自解压程序,因此刚开始执行的时候,zImage所在的内存地址(entry point)不需要同编译kernel的地址相同。自解压程序会把kernel解压到编译时指定的物理地址,然后开始地址相关代码的执行。在开启MMU之前,kernel都是直接使用物理地址

load address、entry point、 bootm address以及kernel运行地址的更多相关文章

  1. [New Portal]Windows Azure Virtual Machine (19) 关闭Azure Virtual Machine与VIP Address,Internal IP Address的关系(1)

    <Windows Azure Platform 系列文章目录> 默认情况下,通过Azure Management Portal创建的Public IP和Private IP都是随机分配的. ...

  2. [New Portal]Windows Azure Virtual Machine (20) 关闭Azure Virtual Machine与VIP Address,Internal IP Address的关系(2)

    <Windows Azure Platform 系列文章目录> 默认情况下,通过Azure Management Portal创建的Public IP和Private IP都是随机分配的. ...

  3. Access Violation at address 00000000.Read of address 00000000 解决办法

    是数组越标或没有初始化某个对象之类的问题,搂住细细检查一下代码, 使用指针前未做检查,而这个指针未初始化. 可能是new后没有delete,这样出现溢出的可能性比较大     检查代码或者跟踪试试 使 ...

  4. mkimage工具 加载地址和入口地址 内核启动分析

    第三章第二节 mkimage工具制作Linux内核的压缩镜像文件,需要使用到mkimage工具.mkimage这个工具位于u-boot-2013. 04中的tools目录下,它可以用来制作不压缩或者压 ...

  5. uboot代码2:stage2代码,启动内核

    一.uboot最终目的: 1.读出内核 do_nand read kernel { flash上存的内核:uImage = 头部 + 真正的内核; } 2.启动内核. do_bootm_linux { ...

  6. 基于AR9331(MIPS架构)分析系统启动过程(uboot)

    前提: 1.AR9331是基于MIPS 24K CPU的一款WIFI1X1芯片,其SDK采用uboot作为引导.AR9331中定义的基地址是:0x9f00,0000 2.MIPS24K芯片,将固定的起 ...

  7. mini2440移植uboot 2014.04(四)

    我修改的代码已经上传到github上,地址:https://github.com/qiaoyuguo/u-boot-2014.04-mini2440.git 参考文章: <mini2440移植u ...

  8. ARM64 Linux kernel virtual address space

    墙外通道:http://thinkiii.blogspot.com/2014/02/arm64-linux-kernel-virtual-address-space.html Now let's ta ...

  9. ARM32 Linux kernel virtual address space

    http://thinkiii.blogspot.jp/2014/02/arm32-linux-kernel-virtual-address-space.html   The 32-bit ARM C ...

随机推荐

  1. [TJOI2019]唱,跳,rap,篮球(生成函数,组合数学,NTT)

    算是补了个万年大坑了吧. 根据 wwj 的题解(最准确),设一个方案 \(S\)(不一定合法)的鸡你太美组数为 \(w(S)\). 答案就是 \(\sum\limits_{S}[w(S)=0]\). ...

  2. MySQL实战45讲学习笔记:第十一讲

    一.如何在邮箱这样的字段上建立合理的索引 现在,几乎所有的系统都支持邮箱登录,如何在邮箱这样的字段上建立合理的索引,是我们今天要讨论的问题. 假设,你现在维护一个支持邮箱登录的系统,用户表是这么定义的 ...

  3. 来吧!一文彻底搞定Vue组件!

    作者 | Jeskson 来源 | 达达前端小酒馆 Vue组件的概述 组件是什么呢,了解组件对象的分析,Vue组件中的data属性,props传递数据的原理到底是什么. 事件通信的那些事 如何了解父子 ...

  4. 关于被malloc分配内存的指针

    例如创建了一个链表指针p并为其malloc()分配了内存,那么这个指针指向的地方其实是有数据的. 你可以把p->data打印出来,会发现是一个随机值 因为只是分配内存而没有指定data的值,所以 ...

  5. sqlserver数据库使用navicat生成数据字典

    https://blog.csdn.net/Honnyee/article/details/86156832 SELECT 表名 then d.name else '' end, 表说明 then i ...

  6. Notepad++显示内容自动换行

  7. No package python-pip available. 解决方法

    问题描述: No package python-pip available. 解决办法: rpm -ivh http://dl.fedoraproject.org/pub/epel/6/i386/ep ...

  8. QuantLib 金融计算——收益率曲线之构建曲线(3)

    目录 QuantLib 金融计算--收益率曲线之构建曲线(3) 概述 估算期限结构的步骤 读取样本券数据 一些基本配置 配置 *Helper 对象 配置期限结构 估算期限结构 汇总结果 当前实现存在的 ...

  9. linux-centos安装图解及配置IP远程连接

    本次安装使用vm软件的15版本,系统为centos7.6(1810) 系统安装图解>配置IP信息联网>真实机是无线网络状态,虚拟机如何联网>远程工具连接虚拟机 一,vm安装cento ...

  10. golang语言特性

    1. 垃圾回收 a. 内存⾃动回收,再也不需要开发⼈员管理内存 b. 开发人员专注业务实现,降低了心智负担 c. 只需要new分配内存,不需要释放   2. 天然并发 a. 从语⾔层面⽀持并发,⾮常简 ...