【Linux】uImage头部信息详细解析

server/2024/9/22 7:56:46/

头部信息结构体

/** 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;
  1. __be32 ih_magic - Image Header Magic Number

    1. 描述: 这是一个 4 字节的魔术数字(Magic Number),值为 0x27051956
    2. 作用: 用于标识这个文件是一个有效的 U-Boot 镜像文件。引导加载程序会检查这个值以验证文件格式的合法性。
    3. 字节顺序: 网络字节序(大端字节序),即高位字节在前。
  2. __be32 ih_hcrc - Image Header CRC Checksum

    1. 描述: 这是一个 4 字节的头部校验和(CRC32)。
    2. 作用: 用于验证头部信息的完整性。计算时,CRC 校验和字段本身被置零,计算剩余部分的 CRC 值。加载程序通过检查这个值来确定头部信息是否被篡改或损坏。
    3. 字节顺序: 网络字节序。
  3. __be32 ih_time - Image Creation Timestamp

    1. 描述: 这是一个 4 字节的时间戳,表示镜像的创建时间。
    2. 作用: 以 UNIX 时间(从 1970 年 1 月 1 日 UTC 时间的秒数)表示镜像的生成时间。用于记录和显示镜像生成的时间,帮助用户管理和维护不同版本的镜像文件。
    3. 字节顺序: 网络字节序。
  4. __be32 ih_size - Image Data Size

    1. 描述: 这是一个 4 字节的无符号整数,表示镜像数据的大小。
    2. 作用: 表示内核镜像数据(不包括头部)的实际大小,以字节为单位。用于引导加载程序在加载镜像数据时确定数据块的边界。
    3. 字节顺序: 网络字节序。
  5. __be32 ih_load - Data Load Address

    1. 描述: 这是一个 4 字节的无符号整数,表示镜像数据应被加载到内存中的地址。
    2. 作用: 指示引导加载程序将镜像数据从存储介质加载到内存中的目标地址。这个地址通常是在系统中没有冲突的、适合存放内核镜像的位置。
    3. 字节顺序: 网络字节序。
  6. __be32 ih_ep - Entry Point Address

    1. 描述: 这是一个 4 字节的无符号整数,表示内核镜像的入口地址。
    2. 作用: 指示加载程序在镜像数据被加载到内存后,程序执行的开始地址。当引导加载程序加载并解压镜像后,它会将控制权转交给这个地址,以启动内核。
    3. 字节顺序: 网络字节序。
  7. __be32 ih_dcrc - Image Data CRC Checksum

    1. 描述: 这是一个 4 字节的校验和(CRC32),用于镜像数据部分的完整性验证。
    2. 作用: 用于验证内核镜像数据(不包括头部)的完整性。引导加载程序在加载镜像后,计算数据部分的 CRC 值并与这个字段的值进行比较,以检查镜像数据是否损坏或被篡改。
    3. 字节顺序: 网络字节序。
  8. uint8_t ih_os - Operating System

    1. 描述: 这是一个 1 字节的字段,表示镜像所属的操作系统类型。
    2. 作用: 指示镜像所针对的操作系统,例如:
      /** 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     */
    3. 字节顺序: 无需转换(单字节)。
  9. uint8_t ih_arch - CPU Architecture

    1. 描述: 这是一个 1 字节的字段,表示镜像所针对的 CPU 架构。
    2. 作用: 指定镜像的目标 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 */
    3. 字节顺序: 无需转换(单字节)。
  10. uint8_t ih_type - Image Type

    1. 描述: 这是一个 1 字节的字段,表示镜像的类型。
    2. 作用: 指定镜像的用途或类型,例如:
      #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 */
      
    3. 字节顺序: 无需转换(单字节)。
  11. uint8_t ih_comp - Compression Type

    1. 描述: 这是一个 1 字节的字段,表示镜像所使用的压缩类型。
    2. 作用: 指示内核镜像的压缩算法,例如:
      /** 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       */
      
    3. 字节顺序: 无需转换(单字节)。
  12. uint8_t ih_name[IH_NMLEN] - Image Name

    1. 描述: 这是一个固定长度(通常为 32 字节)的字符串字段,用于描述镜像的名称或用途。
    2. 作用: 提供镜像的描述信息,例如版本号、编译日期、构建信息等。帮助用户识别和管理不同版本的镜像文件。
    3. 字节顺序: 无需转换(字符串)。

http://www.ppmy.cn/server/118415.html

相关文章

Mysql 存储引擎

MySQL提供了多种存储引擎来管理不同类型的表,每种存储引擎都有其特定的特性和用途。 1.存储引擎: (1). InnoDB 特点:支持事务(ACID)、行级锁定、外键约束。用途:适用于高可靠性和高并发的事务型应用&#…

C# Tuple、ValueTuple

栏目总目录 Tuple Tuple是C# 4.0引入的一个新特性,主要用于存储一个固定数量的元素序列,且这些元素可以具有不同的类型。Tuple是一种轻量级的数据结构,非常适合用于临时存储数据,而无需定义完整的类或结构体。 优点 简便性&…

Android 后台服务之Persistent 属性

在 Android 开发中,有时我们需要后台服务持续运行,以保持应用的某些功能。例如,音乐播放器需要在后台播放音乐,或者健康应用需要持续跟踪用户的运动数据。后台服务是 Android 中的一种组件,它不与用户界面交互,能够在后台执行长时间运行的任务。由于 Android 系统的资源管…

【Linux】09.Linux 下的调试器——gdb/cgdb

一、gdb/cgdb的认识 我们在VS上调试时都是使用Debug版本的,但是在Linux下gcc/g默认生成的是Relaese版本,我们想要进行调试就要用-g选项生成Debug版本的程序。但是Linux下的gdb是一种命令行调试工具,因此就有了cgdb为我们提供可视化的调试界面…

【算法】差分思想:强大的算法技巧

📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 JohnKi 原创,首发于 CSDN🙉 📢未来很长&#…

从底层原理上解释 clickhouse 保证完全的幂等性

在分布式系统中,幂等性是指某个操作被多次执行,其效果和结果应该和执行一次相同。ClickHouse作为一个高效的OLAP数据库,在其底层架构和查询引擎中,通过多个机制和策略来确保操作的幂等性。具体来说,ClickHouse的幂等性…

【设计模式-外观】

这里写自定义目录标题 定义UML图角色作用代码使用场景 定义 为子系统中一组相关接口提供一致界面,定义一个高级接口,使得子系统更加容易使用。 UML图 角色作用 外观(Facade)角色:这是外观模式的核心,它知…

fmql之ubuntu移植

官方资料:ubuntu18的压缩包 目的:放到SD卡中启动ubuntu(官方是放在emmc中) 教程:99_FMQL45_大黄蜂开发板跑ubuntu18.04.docx 所需文件 其中,format_emmc_ext4.txt对emmc的分区是512M(放上述文…