头部信息结构体
/** Legacy format image header,* all data in network byte order (aka natural aka bigendian).*/
typedef struct image_header {__be32 ih_magic; /* Image Header Magic Number 0x27051956 */__be32 ih_hcrc; /* Image Header CRC Checksum */__be32 ih_time; /* Image Creation Timestamp */__be32 ih_size; /* Image Data Size */__be32 ih_load; /* Data Load Address */__be32 ih_ep; /* Entry Point Address */__be32 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;
-
__be32 ih_magic
- Image Header Magic Number
- 描述: 这是一个 4 字节的魔术数字(Magic Number),值为
0x27051956
。 - 作用: 用于标识这个文件是一个有效的 U-Boot 镜像文件。引导加载程序会检查这个值以验证文件格式的合法性。
- 字节顺序: 网络字节序(大端字节序),即高位字节在前。
-
__be32 ih_hcrc
- Image Header CRC Checksum
- 描述: 这是一个 4 字节的头部校验和(CRC32)。
- 作用: 用于验证头部信息的完整性。计算时,CRC 校验和字段本身被置零,计算剩余部分的 CRC 值。加载程序通过检查这个值来确定头部信息是否被篡改或损坏。
- 字节顺序: 网络字节序。
-
__be32 ih_time
- Image Creation Timestamp
- 描述: 这是一个 4 字节的时间戳,表示镜像的创建时间。
- 作用: 以 UNIX 时间(从 1970 年 1 月 1 日 UTC 时间的秒数)表示镜像的生成时间。用于记录和显示镜像生成的时间,帮助用户管理和维护不同版本的镜像文件。
- 字节顺序: 网络字节序。
-
__be32 ih_size
- Image Data Size
- 描述: 这是一个 4 字节的无符号整数,表示镜像数据的大小。
- 作用: 表示内核镜像数据(不包括头部)的实际大小,以字节为单位。用于引导加载程序在加载镜像数据时确定数据块的边界。
- 字节顺序: 网络字节序。
-
__be32 ih_load
- Data Load Address
- 描述: 这是一个 4 字节的无符号整数,表示镜像数据应被加载到内存中的地址。
- 作用: 指示引导加载程序将镜像数据从存储介质加载到内存中的目标地址。这个地址通常是在系统中没有冲突的、适合存放内核镜像的位置。
- 字节顺序: 网络字节序。
-
__be32 ih_ep
- Entry Point Address
- 描述: 这是一个 4 字节的无符号整数,表示内核镜像的入口地址。
- 作用: 指示加载程序在镜像数据被加载到内存后,程序执行的开始地址。当引导加载程序加载并解压镜像后,它会将控制权转交给这个地址,以启动内核。
- 字节顺序: 网络字节序。
-
__be32 ih_dcrc
- Image Data CRC Checksum
- 描述: 这是一个 4 字节的校验和(CRC32),用于镜像数据部分的完整性验证。
- 作用: 用于验证内核镜像数据(不包括头部)的完整性。引导加载程序在加载镜像后,计算数据部分的 CRC 值并与这个字段的值进行比较,以检查镜像数据是否损坏或被篡改。
- 字节顺序: 网络字节序。
-
uint8_t ih_os
- Operating System
- 描述: 这是一个 1 字节的字段,表示镜像所属的操作系统类型。
- 作用: 指示镜像所针对的操作系统,例如:
/** Operating System Codes*/
#define IH_OS_INVALID 0 /* Invalid OS */
#define IH_OS_OPENBSD 1 /* OpenBSD */
#define IH_OS_NETBSD 2 /* NetBSD */
#define IH_OS_FREEBSD 3 /* FreeBSD */
#define IH_OS_4_4BSD 4 /* 4.4BSD */
#define IH_OS_LINUX 5 /* Linux */
#define IH_OS_SVR4 6 /* SVR4 */
#define IH_OS_ESIX 7 /* Esix */
#define IH_OS_SOLARIS 8 /* Solaris */
#define IH_OS_IRIX 9 /* Irix */
#define IH_OS_SCO 10 /* SCO */
#define IH_OS_DELL 11 /* Dell */
#define IH_OS_NCR 12 /* NCR */
#define IH_OS_LYNXOS 13 /* LynxOS */
#define IH_OS_VXWORKS 14 /* VxWorks */
#define IH_OS_PSOS 15 /* pSOS */
#define IH_OS_QNX 16 /* QNX */
#define IH_OS_U_BOOT 17 /* Firmware */
#define IH_OS_RTEMS 18 /* RTEMS */
#define IH_OS_ARTOS 19 /* ARTOS */
#define IH_OS_UNITY 20 /* Unity OS */
#define IH_OS_INTEGRITY 21 /* INTEGRITY */
#define IH_OS_OSE 22 /* OSE */
#define IH_OS_PLAN9 23 /* Plan 9 */
#define IH_OS_OPENRTOS 24 /* OpenRTOS */
- 字节顺序: 无需转换(单字节)。
-
uint8_t ih_arch
- CPU Architecture
- 描述: 这是一个 1 字节的字段,表示镜像所针对的 CPU 架构。
- 作用: 指定镜像的目标 CPU 架构,例如:
/** CPU Architecture Codes (supported by Linux)*/
#define IH_ARCH_INVALID 0 /* Invalid CPU */
#define IH_ARCH_ALPHA 1 /* Alpha */
#define IH_ARCH_ARM 2 /* ARM */
#define IH_ARCH_I386 3 /* Intel x86 */
#define IH_ARCH_IA64 4 /* IA64 */
#define IH_ARCH_MIPS 5 /* MIPS */
#define IH_ARCH_MIPS64 6 /* MIPS 64 Bit */
#define IH_ARCH_PPC 7 /* PowerPC */
#define IH_ARCH_S390 8 /* IBM S390 */
#define IH_ARCH_SH 9 /* SuperH */
#define IH_ARCH_SPARC 10 /* Sparc */
#define IH_ARCH_SPARC64 11 /* Sparc 64 Bit */
#define IH_ARCH_M68K 12 /* M68K */
#define IH_ARCH_MICROBLAZE 14 /* MicroBlaze */
#define IH_ARCH_NIOS2 15 /* Nios-II */
#define IH_ARCH_BLACKFIN 16 /* Blackfin */
#define IH_ARCH_AVR32 17 /* AVR32 */
#define IH_ARCH_ST200 18 /* STMicroelectronics ST200 */
#define IH_ARCH_SANDBOX 19 /* Sandbox architecture (test only) */
#define IH_ARCH_NDS32 20 /* ANDES Technology - NDS32 */
#define IH_ARCH_OPENRISC 21 /* OpenRISC 1000 */
#define IH_ARCH_ARM64 22 /* ARM64 */
#define IH_ARCH_ARC 23 /* Synopsys DesignWare ARC */
- 字节顺序: 无需转换(单字节)。
-
uint8_t ih_type
- Image Type
- 描述: 这是一个 1 字节的字段,表示镜像的类型。
- 作用: 指定镜像的用途或类型,例如:
#define IH_TYPE_INVALID 0 /* Invalid Image */
#define IH_TYPE_STANDALONE 1 /* Standalone Program */
#define IH_TYPE_KERNEL 2 /* OS Kernel Image */
#define IH_TYPE_RAMDISK 3 /* RAMDisk Image */
#define IH_TYPE_MULTI 4 /* Multi-File Image */
#define IH_TYPE_FIRMWARE 5 /* Firmware Image */
#define IH_TYPE_SCRIPT 6 /* Script file */
#define IH_TYPE_FILESYSTEM 7 /* Filesystem Image (any type) */
#define IH_TYPE_FLATDT 8 /* Binary Flat Device Tree Blob */
#define IH_TYPE_KWBIMAGE 9 /* Kirkwood Boot Image */
#define IH_TYPE_IMXIMAGE 10 /* Freescale IMXBoot Image */
#define IH_TYPE_UBLIMAGE 11 /* Davinci UBL Image */
#define IH_TYPE_OMAPIMAGE 12 /* TI OMAP Config Header Image */
#define IH_TYPE_AISIMAGE 13 /* TI Davinci AIS Image */
#define IH_TYPE_KERNEL_NOLOAD 14 /* OS Kernel Image, can run from any load address */
#define IH_TYPE_PBLIMAGE 15 /* Freescale PBL Boot Image */
#define IH_TYPE_MXSIMAGE 16 /* Freescale MXSBoot Image */
#define IH_TYPE_GPIMAGE 17 /* TI Keystone GPHeader Image */
#define IH_TYPE_ATMELIMAGE 18 /* ATMEL ROM bootable Image */
#define IH_TYPE_SOCFPGAIMAGE 19 /* Altera SOCFPGA Preloader */
#define IH_TYPE_X86_SETUP 20 /* x86 setup.bin Image */
#define IH_TYPE_LPC32XXIMAGE 21 /* x86 setup.bin Image */
#define IH_TYPE_LOADABLE 22 /* A list of typeless images */
#define IH_TYPE_RKIMAGE 23 /* Rockchip Boot Image */
#define IH_TYPE_RKSD 24 /* Rockchip SD card */
#define IH_TYPE_RKSPI 25 /* Rockchip SPI image */
#define IH_TYPE_ZYNQIMAGE 26 /* Xilinx Zynq Boot Image */#define IH_TYPE_COUNT 27 /* Number of image types */
- 字节顺序: 无需转换(单字节)。
-
uint8_t ih_comp
- Compression Type
- 描述: 这是一个 1 字节的字段,表示镜像所使用的压缩类型。
- 作用: 指示内核镜像的压缩算法,例如:
/** Compression Types*/
#define IH_COMP_NONE 0 /* No Compression Used */
#define IH_COMP_GZIP 1 /* gzip Compression Used */
#define IH_COMP_BZIP2 2 /* bzip2 Compression Used */
#define IH_COMP_LZMA 3 /* lzma Compression Used */
#define IH_COMP_LZO 4 /* lzo Compression Used */
#define IH_COMP_LZ4 5 /* lz4 Compression Used */
- 字节顺序: 无需转换(单字节)。
-
uint8_t ih_name[IH_NMLEN]
- Image Name
- 描述: 这是一个固定长度(通常为 32 字节)的字符串字段,用于描述镜像的名称或用途。
- 作用: 提供镜像的描述信息,例如版本号、编译日期、构建信息等。帮助用户识别和管理不同版本的镜像文件。
- 字节顺序: 无需转换(字符串)。