动漫区 linux的几个内核镜像样式Image 和 u
一、Image、zImage和uImage的区别动漫区
内核编译(make)之后会生成两个文献,一个是Image,一个是zImage,其中Image为内核映像文献,而zImage为内核的一种映像压缩文献,Image简约为4M,而zImage不到2M。uImage是uboot专用的映像文献,它是在zImage之前加上一个长度为64字节的“头”,确认这个内核的版块、加载位置、生成技艺、大小等信息;其0x40之后与zImage没什么区别。uImage的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;
uint32_tih_os;
uint32_tih_arch;
uint32_tih_type;
uint32_tih_comp;
uint32_tih_name[IH_NMLEN];
}image_header_t;
是以uImage和zImage齐是压缩后的内核映像,而uImage是uboot专用的映像文献,是用mkimage器用凭据zImage制作而来的。
二、uImage的制作
(编译uboot源码,编译成效后载uboot/tools目次下会生成mkimgage器用,将mkimage器用拷贝到/usr/bin/目次下即可。)
mkimage器用
内核编译完后zImage在内核根目次下,mkimage器用在u-boot根目次下的tools文献夹中,将zImage和mkimage放在统一个目次下,延伸:
./mkimage -A arm -O linux -T kernel -C none -a 30008000 -e 30008000 -n linux-2.6.26 -d zImage uImage2.6.26
就将zImage更正成uImage了。
三级片在线看【mkimage的敕令参数:】
-A :==>set architecture to 'arch’ :用于指定CPU类型,比如arm、x86、mips、ppc
-O :==>set operating system to 'os’ :用于指定操作系统,比如freebsd、linux、vxworks
-T :==>set image type to 'type’ :用于指定image类型,比如kernel、ramdisk、filesystem
-C :==>set compression type 'comp’ :用于指定压缩类型:none、gzip、bzip2
-a :==>set load address to 'addr’(hex) :用于指定uImage的加载地址
-e :==>set entry point to 'ep’(hex) :用于指定内核的进口地址,一般是:uImage的载入地址+0x40(信息头的大小)
-n :==>set image name to 'name’ :用于指定uImage在头结构中的定名
-d :==>use image data from 'datafile’ :用于指定无头信息的zImage文献名
-x :==>set XIP(execute in place) :用于成立延伸位置
如关于ARM Linux内核映像常用选项为:
-A arm :==> 架构是arm
-O linux :==> 操作系统是linux
-T kernel :==> 类型是kernel
-C none/bzip/gzip :==> 压缩类型
-a 0x40008000 :==> uImage的载入地址(hex),不绝为0xX0008000
-e 0x40008040 :==> 内核的进口地址(hex),XX为0x40或者0x00
-n linux-xxx :==> uImage的名字,自便
-d namexxx :==> 无头信息的zImage文献名,为源内核文献
uImagexxx :==> 加了头信息之后的zImage文献名,自便
【例子:】
./mkimage -A arm -O linux -T kernel -C none -a 30008000 -e 30008040 -d zImage uImage
【把稳:】
-a和-e背面跟的划分是image的载入地址和内核的进口地址,两者不错一样,也不错不一样,依据如下情况而定:
当-a背面指定的地址和bootm xxxx背面的地址一样时,-e背面的地址必须要比-a背面的地址多0x40,也等于映像头的大小64个字节。因为当他们地址一样时,uboot是不会搬运映像的;
当-a背面指定的地址和bootm xxxx背面的地址不一样时,uboot会将bootm xxxx地址处的映像文献搬运到-a指定的地址处,此时,-e和-a必须要一样,因为映像头并莫得搬运夙昔,载入地址等于内核的进口地址。需要把稳的是,因为uboot要再行搬运内核映像,是以要把稳bootm xxxx的地址和-a之间的地址不要导致复制时的隐蔽。P2020面目中,还看见看了使用这敕令制作根文献系统镜像mkimage -A ppc -O linux -T ramdisk -C gzip -n ${rooot_ver} -d rootfs.img.gz rootfs.uboot
[转]uImage、zImage、bzImage、vlinzx区别在网罗中,不少行状器继承的是Linux系统。为了进一步培植行状器的性能,可能需要根 据特定的硬件及需求再行编译Linux内核。编译Linux 内核,需要凭据规定的要领进行,编译内核历程中触及到几个伏击的文献。比如关于RedHat Linux,在/boot目次下有一些与Linux内核干系的文献 . 编译过RedHat Linux内核的东说念主对其中的System.map、vmlinuz、initrd-2.4.7-10.img印象可能比较潜入,因为编译内核历程中触及到这些文献的成立等操作。那么这几个文献是奈何产生的?又有什么作用呢?
关于Linux内核,编译不错生成不通常式的映像文献,举例:# make zImage# make uImage# make bzImagezImage是ARM Linux常用的一种压缩映像文献不成跨越512KB,bzImage 即bigzImage ,二者的内核齐是gzip压缩的uImage是U-boot专用的映像文献,它是在zImage之前加上一个长度为0x40的“头”,确认这个映像文献的类型、加载位置、生成技艺、大小等信息。换句话说,如果平直从uImage的0x40位置运转延伸,zImage和uImage莫得任何区别。另外,Linux2.4内核不支撑uImage,Linux2.6内核加入了好多对镶嵌式系统的支撑,可是uImage的生成也需要成立。
一、vmlinuz
vmlinuz是可指令的、压缩的内核。“vm”代表“Virtual Memory”。Linux 支撑臆造内存,不像老的操作系统比如DOS有640KB内存的放肆。Linux能够使用硬盘空间行动臆造内存,因此得名“vm”。vmlinuz是可延伸 的Linux内核,它位于/boot/vmlinuz,它一般是一个软贯穿,比如图中是vmlinuz-2.4.7-10的软贯穿。
vmlinuz的成立有两种形式。
一是编译内核时通过“make zImage”创建,手动拷贝到/boot目次底下。zImage适用于小内核的情况,它的存在是为了向后的兼容性。
二是内核编译时通过敕令make bzImage创建,然后手动拷贝至/boot目次下。bzImage是压缩的内核映像,需要把稳,bzImage不是用bzip2压缩的,bz默示“big zImage”。 bzImage中的b是“big”敬爱。 zImage(vmlinuz)和bzImage(vmlinuz)齐是用gzip压缩的。它们不仅是一个压缩文献,况且在这两个文献的开头部安分嵌有gzip解压缩代码。是以你不成用gunzip或gzip –dc解包vmlinuz。
内核文献中包含一个小型的gzip用于解压缩内核并指令它。两者的不同之处在于,老的zImage解压缩内核到低端内存(第一个 640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么不错继承zImage或bzImage之一,两种形式指令的系统运行 时是相通的。大的内核继承bzImage,不成继承zImage。
vmlinux是未压缩的内核,vmlinuz是vmlinux的压缩文献。
二、initrd-x.x.x.img
initrd是“initial ramdisk”的简写。initrd一般被用莅临时的指令硬件到本体内核vmlinuz能够遴选并赓续指令的情景。图中的initrd-2.4.7-10.img主淌若用于加载ext3等文献系统及scsi开采的驱动。
比如,使用的是scsi硬盘,而内核vmlinuz中并莫得这个scsi硬件的驱动,scsi模块是存储在根文献系统的/lib/modules下的,那么在装入scsi模块之前,内核不成加载根文献系统。为了搞定这个问题,不错指令一个能够读本体内核的initrd内核并用initrd修正 scsi指令问题。initrd-2.4.7-10.img是用gzip压缩的文献,initrd终了加载一些模块和装配文献系统等功能。
initrd映象文献是使用mkinitrd创建的。mkinitrd实用圭臬能够创建initrd映象文献。这个敕令是RedHat独到的(这亦然为什么,在Linux内核包里/Documentation/Changes内部莫得提到要将mkinitrd升级)。其它Linux刊行版好像有相应的敕令。这是个很便捷的实用圭臬。具体情况请看匡助:man mkinitrd底下的敕令创建initrd映象文献。
initrd映象文献是使用mkinitrd创建的。mkinitrd实用圭臬能够创建initrd映象文献。这个敕令是RedHat独到的。其它Linux刊行版好像有相应的敕令。这是个很便捷的实用圭臬。具体情况请看匡助:man mkinitrd底下的敕令创建initrd映象文献。
三、uImage文献
vmlinux是内核文献,zImage是一般情况下默许的压缩内核映像文献,压缩vmlinux,加上一段解压启动代码获得。而uImage是u-boot使用bootm敕令指令的Linux压缩内核映像文献样式,是使用器用mkimage对平凡的压缩内核映像文献(zImage)加工而得。它是uboot专用的映像文献,它是在zImage之前加上一个长度为 64字节的“头”,确认这个内核的版块、加载位置、生成技艺、大小等信息;其0x40之后与zImage没区别。
由于bootloader一般要占用0X0地址,是以,uImage比拟zImage的平允等于不错和bootloader共存。
其实等于一个自动跟手动的区别,有了uImage头部的姿色,u-boot就知说念对应Image的信息,如果莫得头部则需要我方手动去搞那些参数。
若何生成uImage文献?率先 在uboot的/tools目次下寻找mkimage文献,把其copy到系统/usr/local/bin目次下,这么就完成制作器用。然后在内核目次下运行make uImage,如果成效,便不错在arch/arm/boot/目次下发现uImage文献,其大小比zImage多64个字节。
此外动漫区,平方调试用uImage,无须去管调养了哪些东西;zImage则是一切OK后平直烧0X0。开机就运行。
u-boot启动内核和文献系统时的一些环境变量的成立