u-boot mkimage 的用法

转载 2012年03月25日 01:15:54

原文地址:http://zhuairlunjj.blog.163.com/blog/static/80050945201122444441998/


在嵌入式系统中,Linux内核和根文件系统一般都与bootloader一起烧写在flash芯片中,系统启动后,bootloaderLinux内核压缩到RAM中,并把压缩的根文件系统复制到RAM中,然后启动内核,由内核解压缩根文件系统,并调用文件系统中的应用程序和脚本文件启动系统。

在烧写Linux内核和根文件系统之前应该对它们进行适当处理,在它们的头部加入一些提供给bootloader的信息字符,以便bootloader能够辨认它们并获取它们的信息,从而正确地将它们解压缩、复制到RAM中的正确位置,并正确启动内核。这个为Linux内核和根文件系统添加头部的工作一般由编译bootloader时生成的一个小应用程序来完成,比如u-boot编译后会在其tools子目录下生成一个叫mkimage的应用程序,而cfe在编译后也会在其cfe/hosttools子目录下生成一个叫mkflashimage的应用程序,它们就是完成上述功能的工具程序,此处我们只介绍u-bootmkimage

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中运行,即XIPexecute 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.imgramdisk.img文件分别写到flash芯片的0xFF0000000xFF200000位置,系统启动后进入u-boot命令行界面,执行以下u-boot命令:

# bootm 0xFF000000 0xFF200000

那么u-boot将把0xFF000000位置的Linux内核解压缩到RAM中的0x8000位置,再将0xFF200000位置的ramdisk文件系统映像文件刨掉u-boot头部后复制到RAM中的某个位置,然后跳转到内核的入口地址0x8000位置启动内核,同时把板子信息、ramdiskRAM中的起始地址和结束地址、命令行字符串传给内核,这样Linux开始启动运行。

编译内核提示mkimage command not found – U-Boot images will not be built

ubuntu 14.04 64位系统编译linux kernel时提示: “mkimage” command not found – U-Boot images will not be built ...
  • eibo51
  • eibo51
  • 2016年07月13日 21:01
  • 7778

编译linux内核时出现"mkimage" command not found - U-Boot images will not be built错误的解决办法

在ubuntu12.04编译内核 uImage 时出现如下错误, Kernel: arch/arm/boot/zImage is ready   UIMAGE  arch/arm/boot/u...
  • dddxxxx
  • dddxxxx
  • 2015年08月22日 11:32
  • 1753

Android编译出错/bin/bash: mkimage: command not found

我用kubuntu编译的Android4.0的源码。 android编译出现如下错误然后编译停止/bin/bash: mkimage: command not found 解决办法是下载一...
  • DEV_linux
  • DEV_linux
  • 2015年05月20日 14:37
  • 676

Linux学习日志(10)- 编译内核make uImage出错“mkimage" command not found…”

内核编译
  • ytfdhb
  • ytfdhb
  • 2017年03月10日 14:36
  • 576

解决Ubuntu编译内核uImage出现问题“mkimage” command not found - U-Boot images will not be built问题

解决Ubuntu编译内核uImage出现问题"mkimage" command not found - U-Boot images will not be built问题 问题: "mkimage...
  • liaoshengshi
  • liaoshengshi
  • 2015年01月25日 22:09
  • 1021

linux(ubuntu)编译linux内核提示"mkimage" command not found

今天心血来潮,想编译以下linux内核来玩玩。一开始编译x86的版本,遇到了openssl/opensslv.h文件缺失的问题,经过一番折腾,顺利解决(解决过程请参见我的另外一篇博客“ linux(...
  • LEON1741
  • LEON1741
  • 2017年01月24日 16:27
  • 376

mkimage是怎样把内核制作成uboot格式的

1:UBOOT引导Linux内核及向内核传递参数的方式  一直以来没有想过有什么好的办法通过寄存器向内核传递参数,直到今天读UBOOT的实现方式。  在UBOOT中,引导内核最常用的方法是bootm命...
  • liukun321
  • liukun321
  • 2011年07月04日 09:29
  • 2812

Ubuntu下编译linux内核,报"mkimage" command not found错的解决

装好了Ubuntu,买好了开发板,开始逐个测试接口,发现这块板子的CAN是SPI转的,根据开发板手册要求,还需要自己编译Linux内核去启用。 好吧,反正都没玩过,一个个来呗,跟着手册step by...
  • xinyunyishui
  • xinyunyishui
  • 2016年03月25日 21:43
  • 468

fedora编译uImage是出现"mkimage" command not found - U-Boot images will not be built 错误

"mkimage" command not found - U-Boot images will not be built mkimage是通过uboot编译生成 fedora下若出现以上错误无法...
  • xiaoxinna1
  • xiaoxinna1
  • 2013年01月04日 10:47
  • 3139

u-boot mkimage工具使用说明

  mkimage工具是u-boot用来制作镜像文件的工具,其源代码在u-boot源码的tools目录下:mkimage.c。我们使用bootm命令加载的内核和根文件系统,都要用这个工具加上个头。  ...
  • roadtoforest
  • roadtoforest
  • 2011年07月03日 00:07
  • 683
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:u-boot mkimage 的用法
举报原因:
原因补充:

(最多只允许输入30个字)