UBOOT和uImage

匿名 (未验证) 提交于 2019-12-03 00:19:01

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
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!