(1)、内核编译(make)之后会生成两个文件,一个Image,一个zImage,其中Image为内核映像文件,而zImage为内核的一种映像压缩文件,Image大约为4M,而zImage不到2M。
那么uImage又是什么的?它是uboot专用的映像文件,它是在zImage之前加上一个长度为64字节的“头”,说明这个内核的版本、加载位置、生成时间、大小等信息;其0x40之后与zImage没区别。
64字节的头结构如下:
typedef struct image_header {
uint32_tih_magic;
uint32_tih_hcrc;
uint32_tih_time;
uint32_tih_size;
uint32_tih_load;
uint32_tih_ep;
uint32_tih_dcrc;
uint8_tih_os;
uint8_tih_arch;
uint8_tih_type;
uint8_tih_comp;
uint8_tih_name[IH_NMLEN];
} image_header_t;
所以,uImage和zImage都是压缩后的内核映像。而uImage是用mkimage工具根据zImage制作而来的。mkimage工具介绍如下:
u-boot里面的mkimage工具来生成uImage(u-boot源码包/tools/mkimage.c )
这里解释一下参数的意义:
-A ==> set architecture to 'arch'
-O ==> set operating system to 'os'
-T ==> set image type to 'type' “kernel或是ramdisk”
-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,即不进行文件的拷贝,在当前位置执行)
对于ARM linux内核映象用法:
-A arm -------- 架构是arm
-O linux -------- 操作系统是linux
-T kernel -------- 类型是kernel
-C none/bzip/gzip -------- 压缩类型
-a 20008000 ---- image的载入地址(hex),通常为0xX00008000
-e 200080XX---- 内核的入口地址(hex),XX为0x40或者0x00
-n linux-XXX --- image的名字,任意
-d nameXXX ---- 无头信息的image文件名,你的源内核文件
uImageXXX ---- 加了头信息之后的image文件名,任意取
原来在这个-C这个参数这里不太理解,因为我觉得既然mkimage是用zImage去制作uImage,而本身zImage就是经过压缩了的,为什么这个地方还要有一个压缩了,后来想了下,觉得可能是这个工具也可以根据最原始的Image去制作uImage,所以就有了这个参数,不深究。即使将zImage经过压缩后生成uImage的话,我觉得压缩比也很小。
关于-a和-e这两个参数,具体如下:
-a和-e后面跟的分别是image的载入地址和内核的入口地址,两者可以一样,也可以不一样,依情况而定。
当-a后面指定的地址和bootm xxxx后面的地址一样时,-e后面的地址必须要比-a后面的地址多0x40,也就是映像头的大小64个字节。因为当他们地址一样时,uboot是不会搬运映像的。
当-a后面指定的地址和bootm xxxx后面的地址不一样时,uboot会将bootm xxxx地址处的映像搬运到-a指定的地址处,此时,-e和-a必须要一样,因为映像头并没有搬运过去,载入地址就是内核的入口地址。需要注意的是,因为uboot要重新搬运内核映像,所以要注意bootm xxxx的地址和-a之间的地址不要导致复制时的覆盖。
因为zImage是经过压缩而得到的,所以其自身就有解压缩代码。
分享到:
相关推荐
linux内核3.14以上编译uImage时一般要把zImage转换为uImage,如果直接生成uImage会出现想不到的错误,错误原因我也不清楚。
linux内核的种类,编译后生成的内核zImage和uImage的区别
zImage制作uImage.pdf
资源包括hfrk2410开发板上移植的u-boot.bin,uImage以及zImage生成uImage所用到的mkimage工具和生成方法,在恒丰锐科2410开发板亲测
mkimage是将kernel打包成uImage的工具,编译代码的时候发现系统缺少mkimage工具,于是将以前系统上的mkimage拷贝过来,竟然就正常生成uImage了,如果遇到编译kernel无法生成uImage可以下载这个试试。
Tiny6410最小mini系统(包括u-boot、uImage,zImage内核镜像、文件系统),其中文件系统为最小的mini系统,如果又需要将上传制造u-boot、uImage、zImage内核镜像、文件系统的全部工具。
uImage
uImage 可直接放在tftp目录下,启动Uboot后就可以加载内核
"mkimage" command not found - U-Boot images will not be built Image arch/arm/boot/uImage is ready
包含uImage和zImage两个内核镜像。该内核是Linux 2.6.38,已经全部配置好了,支持nfs挂载,在Tiny6410上已经测试过。
海思3531A uboot uImage 编译.
linux2.6.32.2 uImage
制作uImage所需要的MKimage,uboot的整个tools文件,把tools放到内核的同目录下,然后把mkimage。exe放到/usr/bin下就行了,已经测试过了,很好用
嵌入式开发学习文档合集,包括bootLoader,uImage,zImage分析,文件系统和文件锁,u-boot的分析,移植,sourceInsight使用,mini2440移植手册,嵌入式基础知识等知识文档。
这是mini2440自带的的zImage_x35内核,绝对可以
freescale (marsboard)imx6的uImage镜像经过了大部分常见的USB无线网卡驱动集成:RT3XXX系列 RT53XX系类 RT81XX系类的等
Sony ELF kernel.elf files, Intel OSIP Android image files, DENX U-Boot uImage files, Rockchip KRNL signed ramdisk image files, MTK headers for zImage/ramdisk, and LG Bump/Samsung SEAndroid footers ...
1、生成uImage的方法 2008-07-09 16:05 把mkimage(这个文件在成功编译好uboot后,在uboot目录下的tool目录下会生成这个文件) 文件拷贝到 linux-2.6.10/scripts/ 和 linux-2.6.10/arch/arm/boot 这两个目录下.修改 ...
iTOP4412 POP封装 1G 精英版编译成功可烧写文件,亲测可烧写到开发板,烧写过程如开发板视频文件夹下的...内含有已经编译好的 exynos4412-itop-elite.dtb /system.img /u-boot-iTOP-4412.bin /uImage (Zimage不用烧写)
本固件基于Ambarella S2LM芯片平台,SDK3.0开发的网络摄像机升级固件。