uboot load address、entry point、 bootm address以及kernel运行地址的意义及联系
按各地址起作用的顺序,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)。
转载于:https://www.cnblogs.com/sywtt/archive/2012/01/25/2329284.html
uboot load address、entry point、 bootm address以及kernel运行地址的意义及联系相关推荐
- ENSP的The specified address conflicts with another address.以及其中一个Protocol是down的问题
如下图是不小心分配错了,本来要把地址赋给子接口1.1和1.2的,结果弄成1.2和1.3了,导致其中一个Protocol是down,而且修改IP地址也不行,出现错误The specified addre ...
- 认知BLE中多个MAC地址类型:Public Device Address、Random Device Address、Non-resolvable Private Address
1. 前言 BLE设备有多种类型的设备地址,如Public Device Address.Random Device Address.Static Device Address.Private Dev ...
- uboot加载linux内核加载那些内容,uBoot和Linux内核中涉及到的几个地址参数的理解...
uBoot和Linux内核中涉及到的几个地址参数的理解 ************************************************* arch/arm/Makefile //内核 ...
- linux 内核load addr,linux2.4启动分析(1)---内核启动地址的确定 vmlinux LOAD_ADDR ZRELADDR...
http://blog.chinaunix.net/u/31100/showart_244622.html ================================ Author: taoyu ...
- 10 编译2022年最新的U-Boot v2023.01-rc2源码,并用QEMU模拟器运行
编译2022年最新的U-Boot v2023.01-rc2源码,并用QEMU模拟器运行 作者 将狼才鲸 创建日期 2022-11-26 Gitee源码和工程地址:才鲸嵌入式 / 嵌入式QEMU教程 C ...
- Access Violation at address 00000000.Read of address 00000000 解决办法
是数组越标或没有初始化某个对象之类的问题,搂住细细检查一下代码, 使用指针前未做检查,而这个指针未初始化. 可能是new后没有delete,这样出现溢出的可能性比较大 检查代码或者跟踪试试 使 ...
- SAP Spartacus shipping address页面请求1 - Address
前三个CMS page请求可以忽略: 请求path:/occ/v2/electronics-spa/users/current/addresses?lang=en&curr=USD curre ...
- 指出Linux内核中boot,uBoot和Linux内核中涉及到的几个地址参数的理解
************************************************* arch/arm/Makefile //内核运行虚拟地址TEXTADDR = 0xC0008000 ...
- 基于AR9331(MIPS架构)分析系统启动过程(uboot)
前提: 1.AR9331是基于MIPS 24K CPU的一款WIFI1X1芯片,其SDK采用uboot作为引导.AR9331中定义的基地址是:0x9f00,0000 2.MIPS24K芯片,将固定的起 ...
最新文章
- 华为10GE LAN板与Wan板区别
- 使用LitePal操作数据库(CRUD增删改查) 项目已上传GitHub
- bzoj4427【Nwerc2015】Cleaning Pipes清理管道
- python监控服务器信息,Python监控服务器实现邮件微信报警
- 网上的画板代码收集和整理
- oracle关联视图查询满_对于复杂的SQL, Oracle是怎么做的?
- Python字符串详解(包含长字符串和原始字符串)
- 单精度浮点数(float)加法计算出错
- java大学实用教程(第四版)_Java大学实用教程(第4版)
- android svg 线条动画教程,SVG 实现复杂线条动画
- WEB服务器硬件配置要求
- npm ERR! File exists: /XXX/xxx npm ERR! Move it away, and try again.
- Raptor软件与学习资料
- 二叉树遍历-层序-递归
- 吐血推荐珍藏的Visual Studio Code插件
- 黑客用我们服务器挖矿了
- java集合类的一些总结——Arrays.asList和Guava操作集合
- 学GIS开发怎么入门,GIS专业的学生应该掌握什么知识 ?
- 全球5G发展洞察2022(中)
- CSP 201609-3 炉石传说(C++)
热门文章
- .Net对SQL数据库的web备份
- asp.net 跨页面传值(一)
- Save info in Hidden Field
- C# CheckedListBox控件的用法
- uglifyjs报错 webpack_webpack3里使用uglifyjs压缩js时打包报错的解决
- java sql 登录失败_java – 接收连接到SQL Server 2008的SQLException“用户登录失败”
- Mat的初始化以及Mat与数组的相互转化
- mysql数据库char类型长度_mysql数据库设计字符类型及长度
- 材料成形计算机辅助设计,材料成型及计算机辅助设计(综述)
- array python 交集_模糊数学Python库简介和评测