关于 mkimage
在嵌入式系统中,Linux内核和根文件系统一般都与bootloader一起烧写在flash芯片中,系统启动后,bootloader将Linux内核压缩到RAM中,并把压缩的根文件系统复制到RAM中,然后启动内核,由内核解压缩根文件系统,并调用文件系统中的应用程序和脚本文件启动系统。
在烧写Linux内核和根文件系统之前应该对它们进行适当处理,在它们的头部加入一些提供给bootloader的信息字符,以便bootloader能够辨认它们并获取它们的信息,从而正确地将它们解压缩、复制到RAM中的正确位置,并正确启动内核。这个为Linux内核和根文件系统添加头部的工作一般由编译bootloader时生成的一个小应用程序来完成,比如u-boot编译后会在其tools子目录下生成一个叫mkimage的应用程序,而cfe在编译后也会在其cfe/hosttools子目录下生成一个叫mkflashimage的应用程序,它们就是完成上述功能的工具程序,此处我们只介绍u-boot的mkimage。
mkimage命令格式如下:
# mkimage [-x] -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file[:data_file...] image
其中各字段含义如下:
|
字 段 |
含 义 |
|
-x |
指定内核就在Flash中运行,即XIP(execute in place) |
|
-T |
指定输入文件的类型,如“kernel”、“filesystem”、“firmware”、“ramdisk” |
|
-A |
指定处理器体系架构 |
|
-O |
指定操作系统类型名字,如“linux”、“vxworks”、“psos”等 |
|
-C |
指定压缩模式,可能设置为“none”、“bzip2”、“gzip” |
|
-a |
指定程序被解压缩或复制到RAM中的地址 |
|
-e |
指定程序(内核)的入口地址 |
|
-n |
指定image文件的名字 |
|
-d |
指定输入的程序文件,可是有多个文件,如内核或/和根文件系统二进制文件 |
|
image |
输出文件名 |
mkimage命令举例如下:
#mkimage -n "My Kernel" -A arm -O linux -T kernel -C gzip –a 0x8000 –e 0x8000 -d kernel.gz kernel.img
以上命令将压缩了的内核二进制文件kernel.gz转换成u-boot能够辨认的二进制文件kernel.img,并指定kernel.img的名字为“My Kernel”,处理器体系架构为arm,操作系统类型为linux,程序类型为操作系统内核,程序由gzip压缩,程序的链接起始地址为0x8000,程序的入口地址为0x8000,注意这两个地址一定要是物理地址而不是对应的虚拟地址。
#mkimage -n "My Rootfs" -A arm -O linux -T ramdisk -C gzip -d ramdisk.gz ramdisk.img
以上命令将压缩了的ramdisk根文件系统二进制文件ramdisk.gz转换成u-boot能够辨认的二进制文件ramdisk.img,并指定ramdisk.img的名字为“My Rootfs”,处理器体系架构为arm,操作系统类型为linux,程序类型为ramdisk,程序由gzip压缩,不需要指定ramdisk的链接起始地址和入口地址。
如果我们将kernel.img和ramdisk.img文件分别写到flash芯片的0xFF000000和0xFF200000位置,系统启动后进入u-boot命令行界面,执行以下u-boot命令:
# bootm 0xFF000000 0xFF200000
那么u-boot将把0xFF000000位置的Linux内核解压缩到RAM中的0x8000位置,再将0xFF200000位置的ramdisk文件系统映像文件刨掉u-boot头部后复制到RAM中的某个位置,然后跳转到内核的入口地址0x8000位置启动内核,同时把板子信息、ramdisk在RAM中的起始地址和结束地址、命令行字符串传给内核,这样Linux开始启动运行。
关于 mkimage的更多相关文章
- "mkimage" command not found - U-Boot images will not be built
编译内核的时候出现错误:"mkimage" command not found - U-Boot images will not be built 参考链接 http://blog ...
- mkimage command not found
转载:http://blog.csdn.net/armeasy/article/details/6217621 UIMAGE arch/arm/boot/uImage"mkimage&qu ...
- U-boot mkimage指定Linux内核地址时的两种方式
http://blog.csdn.net/embededswordman/article/details/6704197 uImage的制作是使用的u-boot工具mkimage,build完u-bo ...
- mkimage工具 加载地址和入口地址 内核启动分析
第三章第二节 mkimage工具制作Linux内核的压缩镜像文件,需要使用到mkimage工具.mkimage这个工具位于u-boot-2013. 04中的tools目录下,它可以用来制作不压缩或者压 ...
- mkimage的-a 和 –c参数和内核引导
目录 一.mkimage工具简介二.-a参数与-e参数和内核引导的关系三.实例测试 3.1 -a参数与-e参数相同,可以将内核下载到SDRAM的任何地址,然后从这启动 3.2 -a参数与-e参数不同, ...
- mkimage使用详解
uboot源代码的tools/目录下有mkimage工具,这个工具可以用来制作不压缩或者压缩的多种可启动映象文件. mkimage在制作映象文件的时候,是在原来的可执行映象文件的前面加上一个0x40字 ...
- uboot mkimage使用详解
mkimage使用详解uboot源代码的tools/目录下有mkimage工具,这个工具可以用来制作不压缩或者压缩的多种可启动映象文件. mkimage在制作映象文件的时候,是在原来的可执行映象文件的 ...
- 编译U-boot时,make[1]: *** 没有规则可以创建mkimage.o”
执行完make smdk2440_config 对Uboot重行编译怎么会出现这样的错误 make[1]: Entering directory `/home/win/S3-ARM/Part4/ubo ...
- 引用 mkimage使用详解
引用 鱼 的 mkimage使用详解 uboot源代码的tools/目录下有mkimage工具,这个工具可以用来制作不压缩或者压缩的多种可启动映象文件. mkimage在制作映象文件的时候,是在原来 ...
随机推荐
- sybase下convert函数第三个参数(时间格式)
convert(varchar(10),字段名,转换格式) 比如:1.select user_id,convert(varchar(10),dayts,11) as dates from tb_use ...
- 新的MOVE结构,和在项目中实际的感受
关于MVC/MVP的瑕疵 MVC 和 MVP是最简单,最脍炙人口的框架结构. 有一段时间, 凡事有一定规模的代码,我都会架在上面,甚至后台程序也不例外(预留出可以注册的用户交互接口,作为后台控制器). ...
- mysql慢查询优化之explain的各列含义
mysql> explain select customer_id,first_name,last_name from customer; +----+-------------+------- ...
- iOS 通览(二)
一.关键词 extern:C语言的函数外部声明. 如果你要在一个.c或者.m中使用另外一个.c文件的函数的话,需要在文件中写入目标函数的外部引用的声明. 二.自定义View 自定义View添加控件对象 ...
- iOS中touches事件,addtarget ...action和GestureRecognizer详解
刚学完uiview,uicontrol类,许多人知道 touchesBegain,touchesMoved,touchesEnd,GestureRecognizer的用途,但仔细考虑这些事件之间的关系 ...
- iOS应用中URL地址如何重定向-b
就用一个很简单的例子 http://www.google.com谷歌的首页 都知道现在浏览器中打开google.com的话事实上会变成http://www.google.com.hk 网址被重定向了 ...
- C#学习笔记(二)
1.注释:注销,解释2.单行://多行:/**/文档注释:///按enter主食要保证 别人一看就明白3.快速对期待吗:ctrl+k+d,按住ctrl不放,按k,迅速抬起,再按d(按D得时候k已经抬起 ...
- ACM题集以及各种总结大全!
ACM题集以及各种总结大全! 虽然退役了,但是整理一下,供小弟小妹们以后切题方便一些,但由于近来考试太多,顾退役总结延迟一段时间再写!先写一下各种分类和题集,欢迎各位大牛路过指正. 一.ACM入门 关 ...
- Spark中shuffle的触发和调度
Spark中的shuffle是在干嘛? Shuffle在Spark中即是把父RDD中的KV对按照Key重新分区,从而得到一个新的RDD.也就是说原本同属于父RDD同一个分区的数据需要进入到子RDD的不 ...
- jquery图片放大器插件
将鼠标移动到一张图片上来的时候,放大该图片的某些细节. <html> <head> <script src="../js/jquery-1.6.js" ...