mkimage的-a 和 –c参数和内核引导
目录
二、-a参数与-e参数和内核引导的关系
三、实例测试
- 3.1 -a参数与-e参数相同,可以将内核下载到SDRAM的任何地址,然后从这启动
- 3.2 -a参数与-e参数不同,只能将内核下载到-a参数后面的地址,然后从这启动;否则无法引导内核
- 3.3 -a参数与-e参数不同,下载地址和-a参数后面的地址不同(无法引导)
- 3.4 覆盖了U-Boot传给内核的参数,会导致这样情形(无法引导)
一、mkimage工具简介
U-Boot源代码的tools/目录下有mkimage工具,这个工具可以用来制作不压缩或者压缩的多种可启动映象文件。mkimage在制作映象文件的时候,是在原来的可执行映象文件的前面加上一个0x40字节的头,记录参数所指定的信息,这样U-Boot才能识别这个映象是针对哪个CPU体系结构的,哪个OS的,哪种类型,加载内存中的哪个位置, 入口点在内存的那个位置以及映象名是什么
root@www.linuxidc.com:~/桌面# ./mkimage
Usage: ./mkimage -l image
-l ==> list image header information
./mkimage -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file[:data_file...] image
-A ==> set architecture to 'arch'
-O ==> set operating system to 'os'
-T ==> set image type to 'type'
-C ==> set compression type 'comp'
-a ==> set load address to 'addr' (hex)
-e ==> set entry point to 'ep' (hex)
-n ==> set image name to 'name'
-d ==> use image data from 'datafile'
-x ==> set XIP (execute in place)
参数说明:
-A 指定CPU的体系结构:
取值 表示的体系结构
alpha Alpha
arm ARM
x86 Intel x86
ia64 IA64
mips MIPS
mips64 MIPS 64 Bit
ppc PowerPC
s390 IBM S390
sh SuperH
sparc SPARC
sparc64 SPARC 64 Bit
m68k MC68000
-O 指定操作系统类型:
可以取以下值:
openbsd、netbsd、freebsd、4_4bsd、linux、svr4、esix、solaris、irix、sco、dell、ncr、lynxos、vxworks、psos、qnx、u-boot、rtems、artos
-T 指定映象类型:
可以取以下值:
standalone、kernel、ramdisk、multi、firmware、script、filesystem
-C 指定映象压缩方式:
可以取以下值:
none 不压缩
gzip 用gzip的压缩方式
bzip2 用bzip2的压缩方式
-a 指定映象在内存中的加载地址
映象下载到内存中时,要按照用mkimage制作映象时,这个参数所指定的地址值来下载
-e 指定映象运行的入口点地址
这个地址就是-a参数指定的值加上0x40(因为前面有个mkimage添加的0x40个字节的头)
-n 指定映象名
-d 指定制作映象的源文件
二、-a参数与-e参数和内核引导的关系
- -a参数后是内核的运行地址,-e参数后是入口地址。
- 如果我们没用mkimage对内核进行处理的话,那直接把内核下载到0x30008000再运行就行,内核会自解压运行(不过内核运行需要一个tag来传递参数,而这个tag建议是由BootLoader提供的,在U-Boot下默认是由bootm命令建立的)。
- 如果使用mkimage生成内核镜像文件的话,会在内核的前头加上了64byte的信息,供建立tag之用。bootm命令会首先判断bootm xxxx 这个指定的地址xxxx是否与-a指定的加载地址相同。如果不同的话会从这个地址开始提取出这个64byte的头部,对其进行分析,然后把去掉头部的内核复制到-a指定的load地址中去运行之。如果相同的话那就让其原封不同的放在那,但-e指定的入口地址会推后64byte,以跳过这64byte的头部。
三、实例测试
3.1 -a参数与-e参数相同,可以将内核下载到SDRAM的任何地址,然后从这启动
*****************
root@www.linuxidc.com:~/桌面# ./mkimage -n 'linux-2.6.30' -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008000 -d zImage zImage.img
Image Name: linux-2.6.30
Created: Sat Mar 3 23:41:49 2012
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1907440 Bytes = 1862.73 kB = 1.82 MB
Load Address: 0x30008000
Entry Point: 0x30008000
root@www.linuxidc.com:~/桌面#
Linux引导时的输出
*******************
czu2440 # tftp 0x30000000 zImage.img
TFTP from server 192.168.1.1; our IP address is 192.168.1.5
Filename 'zImage.img'.
Load address: 0x30000000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
################################################
done
Bytes transferred = 1907504 (1d1b30 hex)
czu2440 # bootm 0x30000000
## Booting image at 30000000 ...
Image Name: linux-2.6.30
Created: 2012-03-03 15:41:49 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1907440 Bytes = 1.8 MB
Load Address: 30008000
Entry Point: 30008000
Verifying Checksum ... OK
OK
Starting kernel ...
Uncompressing Linux.............................................................
............................................................. done, booting the
kernel.
3.2 -a参数与-e参数不同,只能将内核下载到-a参数后面的地址,然后从这启动;否则无法引导内核
*****************
Image Name: linux-2.6.30
Created: Sun Mar 4 00:18:05 2012
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1907440 Bytes = 1862.73 kB = 1.82 MB
Load Address: 0x30008000
Entry Point: 0x30008040
root@www.linuxidc.com:~/桌面#
Linux引导时的输出
*******************
czu2440 # tftp 0x30008000 zImage.img
TFTP from server 192.168.1.1; our IP address is 192.168.1.5
Filename 'zImage.img'.
Load address: 0x30008000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
################################################
done
Bytes transferred = 1907504 (1d1b30 hex)
czu2440 # bootm 0x30008000
## Booting image at 30008000 ...
Image Name: linux-2.6.30
Created: 2012-03-03 16:18:05 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1907440 Bytes = 1.8 MB
Load Address: 30008000
Entry Point: 30008040
Verifying Checksum ... OK
XIP Kernel Image ... OK
Starting kernel ...
Uncompressing Linux.............................................................
............................................................. done, booting the
kernel.
3.3 -a参数与-e参数不同,下载地址和-a参数后面的地址不同(无法引导)
TFTP from server 192.168.1.1; our IP address is 192.168.1.5
Filename 'zImage.img'.
Load address: 0x30009000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
################################################
done
Bytes transferred = 1907504 (1d1b30 hex)
czu2440 # bootm 0x30009000
## Booting image at 0x30009000 ...
Image Name: linux-2.6.30
Created: 2012-03-03 16:18:05 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1907440 Bytes = 1.8 MB
Load Address: 30008000
Entry Point: 30008040
Verifying Checksum ... OK
OK
Starting kernel ...
=============================================================
3.4 覆盖了U-Boot传给内核的参数,会导致这样情形(无法引导)
czu2440 # tftp 0x30000000 zImage.img
TFTP from server 192.168.1.1; our IP address is 192.168.1.5
Filename 'zImage.img'.
Load address: 0x30000000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
################################################
done
Bytes transferred = 1907504 (1d1b30 hex)
czu2440 # bootm 0x30000000
## Booting image at 30000000 ...
Image Name: linux-2.6.30
Created: 2012-03-03 16:18:05 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1907440 Bytes = 1.8 MB
Load Address: 30008000
Entry Point: 30008040
Verifying Checksum ... OK
OK
Starting kernel ...
mkimage的-a 和 –c参数和内核引导的更多相关文章
- Linux 内核引导参数简介
概述 内核引导参数大体上可以分为两类:一类与设备无关.另一类与设备有关.与设备有关的引导参数多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导参数.比如,如果你想知道可以向 AHA ...
- linux kexec内核引导
linux kexec 介绍 kexec的功能是用一个运行的内核去运行一个新内核,就像运行一个应用程序一样.这种机制因为跳过了bootloader,可以实现系统的快速重启.另外kdump也是基于kex ...
- Linux 内核引导选项简介
Linux 内核引导选项简介 作者:金步国 连接地址:http://www.jinbuguo.com/kernel/boot_parameters.html 参考参数:https://www.cnbl ...
- 非常好!!!Linux源代码阅读——内核引导【转】
Linux源代码阅读——内核引导 转自:http://home.ustc.edu.cn/~boj/courses/linux_kernel/1_boot.html 目录 Linux 引导过程综述 BI ...
- 羽夏看Linux内核——引导启动(上)
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你的,如有闲钱,可以打赏支持我的创作.如想转载,请把我的转载信息附在文章后面,并 ...
- bootm命令中地址参数,内核加载地址以及内核入口地址
bootm命令只能用来引导经过mkimage构建了镜像头的内核镜像文件以及根文件镜像,对于没有用mkimage对内核进行处理的话,那直接把内核下载到连接脚本中指定的加载地址0x30008000再运行就 ...
- The Kernel Boot Process.内核引导过程
原文标题:The Kernel Boot Process 原文地址:http://duartes.org/gustavo/blog/ [注:本人水平有限,只好挑一些国外高手的精彩文章翻译一下.一来自己 ...
- Linux CentOS 修改内核引导顺序
CentOS 7.0 系统更改内核启动顺序 可以 uname -a查下当前的 由于 CentOS 7 使用 grub2 作为引导程序,所以和 CentOS 6 有所不同,并不是修改 /etc/grub ...
- 云服务器 ECS Linux CentOS 修改内核引导顺序
由于 CentOS 7 使用 grub2 作为引导程序,所以和 CentOS 6 有所不同,并不是修改 /etc/grub.conf 来修改启动项,需要如下操作: 1. 查看系统内部有多少个内核: c ...
随机推荐
- MenuItem
private void 文件ToolStripMenuItem_Click(object sender, EventArgs e) { MessageBox.Show("打开测试" ...
- Java中的IO流系统详解
Java 流在处理上分为字符流和字节流.字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符.字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组. Java 内用 U ...
- 【学习总结】OS X , IOS , IOS SDK , XCode之间的关系
几个基本的概念 : OS X : 属于桌面PC级别(IMac,MacPro等)对应安装的操作系统 IOS : 属于移动设备级别(Iphone,Ipad等)对应安装的操作系统 XCode: 是一个IDE ...
- 使用tolua++编译pkg,从而创建自定义类让Lua脚本使用
步骤一:首先自定义类(这里Himi自定义类名 “MySprite”) MySprite.h 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 // // ...
- Myeclipse 2013 professional 破解,下载
昨天重装了系统,今天重新搭建开发环境,就顺便把Myeclipse升级到了2013,点击下载Myeclipse2013.惯例,需要破解Myeclipse2013,不过我发现我之前的破解Myeclipse ...
- 动态内存 this指针
#include <iostream> #include <string> class Company { public: Company(std::string theNam ...
- IntelliJ IDEA 进行js Debug调试
idea的js调试目前看来不同给力,一是玩转它需要安装谷歌插件支持,二是貌似存在一些bug... 一.新建一个jsp并打上断点 二.调试 idea出现提示: 安装JetBrains IDE Suppo ...
- [转载]html5直接在网页上播放视频音频兼容所有浏览器
文章给大家分享一个html5直接在网页上播放视频兼容所有浏览器,有需要的同学可参考. HTML5可以用video标签来播放视频 当前,video 元素支持三种视频格式: 格式 IE Firefox O ...
- 团体程序设计天梯赛-练习集L1-020. 帅到没朋友
L1-020. 帅到没朋友 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 当芸芸众生忙着在朋友圈中发照片的时候,总有一些人因为 ...
- Java中堆、栈、常量池分析
栈用于存储局部变量,包括基本类型的变量(方法语句块内部定义的变量.方法中的形参).引用类型的变量,它们都是存储在各自的方法栈中,随着方法的执行完成而消失: 堆用于存储引用类型变量所指向的对象,包括普通 ...