uimage 和zimage的定义和概念
1)大小:内核编译(make)之后会生成两个文件,一个Image,一个zImage,其中Image为内核映像文件,而zImage为内核的一种映像压缩文件,Image大约为4M,而zImage不到2M.
2)用途: uimage是uboot专用的映像文件。它是在zImage之前加上一个长度为64字节"头",说明这个内核的版本,加载位置,生成时间,大小等信息。其0x40之后与zImage没区别
64字节的头部信息定义如下:
/*
* Legacy format image header,
* all data in network byte order (aka natural aka bigendian).
*/
typedef struct image_header {
uint32_t ih_magic; /* Image Header Magic Number */
uint32_t ih_hcrc; /* Image Header CRC Checksum */
uint32_t ih_time; /* Image Creation Timestamp */
uint32_t ih_size; /* Image Data Size */
uint32_t ih_load; /* Data Load Address */
uint32_t ih_ep; /* Entry Point Address */
uint32_t ih_dcrc; /* Image Data CRC Checksum */
uint8_t ih_os; /* Operating System */
uint8_t ih_arch; /* CPU architecture */
uint8_t ih_type; /* Image Type */
uint8_t ih_comp; /* Compression Type */
uint8_t ih_name[IH_NMLEN]; /* Image Name */
} image_header_t;
刚刚编译完内核的时候生成的几个镜像文件
1)vmlinux 在linux的根目录下,是编译出来的最原始内核文件,未压缩
2)zImage 是vmlinux经过gzip压缩后的文件
3)uimage 是u-boot专用内核映像文件
uboot启动系统image的过程如下
- 从flash或者network下载 image 到 loadaddr
- 将 uImage 从 loadaddr 搬移到 uImage 指定的 loadaddr
- PC跳转到uImage header指定的entryaddr,启动系统
如何生成uImage文件
首先在uboot的/tools目录下寻找mkimage文件,把其copy到系统/usr/local/bin目录下,这样就完成制作工具。然后在内核目录下运行make uImage,如果成功,便可以在arch/arm/boot/目录下发现uImage文件,其大小比 zImage多64个字节。