1. UImage介绍
UImage是为了配合uboot而定义的一种image格式。在原有的image基础之上,mkimage工具会自动添加一个64字节的头部信息供uboot启动系统来使用。
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;
里面定义了许多系统镜像相关的 属性,在kernel build的时候会在zImage基础上附加这些信息,行程uImage的头部
2. U-boot 启动UImage
如上图所示,U-BOOT 在boot image的时候会用到两个load地址,其中一个是固定在u-boot image里或者可以通过env变量来调整的load地址,在boot的过程中,uboot从load下来的uImage里拿到头部指定的uImage的loadaddr然后把uImage拷贝到这个指定的地址。uImage头部的
uboot启动系统image的过程如下
- 从flash或者network下载image到loadaddr
- 将uImage从loadaddr搬移到uImage指定的loadaddr
- PC跳转到uImage header指定的entryaddr,启动系统
转载请标明出处:UBOOT和uImage
文章来源: UBOOT和uImage