news 2026/3/2 4:47:19

[Linux外设驱动详解]U-Boot mkimage 工具分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[Linux外设驱动详解]U-Boot mkimage 工具分析

U-Boot mkimage 工具分析文档

1. 概述

本文档针对瑞芯微 RK3588 平台,深入分析 U-Boot 中mkimage工具的作用、原理和实现机制。通过源码分析,解答"为什么要使用 mkimage 工具生成 u-boot.bin 文件"这一问题。

硬件平台: 瑞芯微 RK3588
U-Boot 源码路径:./u-boot
分析日期: 2026-01-04


2. mkimage 工具简介

2.1 什么是 mkimage?

mkimage是 U-Boot 提供的一个镜像打包工具,用于在裸机二进制文件前添加特定格式的头部信息(header),使其能够被 Boot ROM 或 U-Boot 自身识别和加载。

源码位置:tools/mkimage.c

2.2 为什么需要 mkimage?

通过分析源码,我们可以总结出以下几个关键原因:

┌─────────────────────────────────────────────────────────────┐ │ mkimage 的核心作用 │ ├─────────────────────────────────────────────────────────────┤ │ 1. 添加标准化头部信息 - 描述镜像属性 │ │ 2. 完整性校验 - 通过 CRC/SHA 校验确保数据完整 │ │ 3. 多镜像支持 - 支持打包多个组件(内核/设备树/根文件系统) │ │ 4. 平台适配 - 为不同芯片平台添加特定的启动头 │ │ 5. 验证启动 - 支持签名和加密,确保镜像来源可信 │ └─────────────────────────────────────────────────────────────┘

3. mkimage 支持的镜像格式

3.1 两种主要格式

mkimage 支持两种镜像格式,定义在doc/mkimage.1中:

格式类型说明特点
Legacy 格式传统格式,64字节固定头部结构简单、向后兼容
FIT 格式Flattened Image Tree,新型格式灵活性强、支持多组件、支持签名验证

3.2 镜像类型定义

include/image.h中定义了所有支持的镜像类型:

/* 关键镜像类型枚举 */enum{IH_TYPE_INVALID=0,// 无效镜像IH_TYPE_STANDALONE,// 独立程序IH_TYPE_KERNEL,// OS 内核镜像IH_TYPE_RAMDISK,// RAMDisk 镜像IH_TYPE_MULTI,// 多文件镜像IH_TYPE_FIRMWARE,// 固件镜像IH_TYPE_SCRIPT,// 脚本文件IH_TYPE_FLATDT,// 扁平设备树 BlobIH_TYPE_RKIMAGE,// Rockchip Boot ImageIH_TYPE_RKSD,// Rockchip SD 卡镜像IH_TYPE_RKSPI,// Rockchip SPI 镜像IH_TYPE_RKNAND,// Rockchip NAND 镜像// ... 更多类型};

4. Legacy 格式详解

4.1 头部结构

Legacy 格式的头部结构定义在include/image.h:311-324

typedefstructimage_header{__be32 ih_magic;/* 镜像魔数: 0x27051956 */__be32 ih_hcrc;/* 头部 CRC 校验 */__be32 ih_time;/* 创建时间戳 */__be32 ih_size;/* 镜像数据大小 */__be32 ih_load;/* 数据加载地址 */__be32 ih_ep;/* 入口点地址 */__be32 ih_dcrc;/* 数据 CRC 校验 */uint8_tih_os;/* 操作系统类型 */uint8_tih_arch;/* CPU 架构 */uint8_tih_type;/* 镜像类型 */uint8_tih_comp;/* 压缩类型 */uint8_tih_name[IH_NMLEN];/* 镜像名称(32字节) */}image_header_t;

总大小: 64 字节

4.2 头部字段含义

字段大小说明
ih_magic4字节固定值0x27051956,用于识别镜像格式
ih_hcrc4字节头部自身的CRC32校验值
ih_time4字节镜像创建的时间戳
ih_size4字节镜像数据的大小(不含头部)
ih_load4字节镜像应加载到内存的地址
ih_ep4字节程序入口点地址
ih_dcrc4字节镜像数据的CRC32校验值
ih_os1字节操作系统类型(如Linux、VxWorks等)
ih_arch1字节CPU架构(如ARM、x86等)
ih_type1字节镜像类型(内核、固件等)
ih_comp1字节压缩类型(gzip、bzip2等)
ih_name32字节镜像名称字符串

4.3 Legacy 格式生成流程

源码实现在tools/default_image.c

// 设置头部信息的核心函数staticvoidimage_set_header(void*ptr,structstat*sbuf,intifd,structimage_tool_params*params){image_header_t*hdr=(image_header_t*)ptr;// 1. 计算数据的CRC校验值checksum=crc32(0,(constunsignedchar*)(ptr+sizeof(image_header_t)),sbuf->st_size-sizeof(image_header_t));// 2. 设置各项字段image_set_magic(hdr,IH_MAGIC);// 设置魔数image_set_time(hdr,time);// 设置时间戳image_set_size(hdr,imagesize);// 设置数据大小image_set_load(hdr,params->addr);// 设置加载地址image_set_ep
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/2 0:30:59

pyinstaller打包后图标 不显示解决办法

首先,参数icon后面有个等于号其次可能有图标但是没显示出来我左下角还是个鸡我东西都是py文件,pyinstaller根本没办法调用,打包也没啥用

作者头像 李华
网站建设 2026/3/1 6:28:26

伪代码生成的终极指南:PseudoGen让代码理解变得如此简单

伪代码生成的终极指南:PseudoGen让代码理解变得如此简单 【免费下载链接】pseudogen A tool to automatically generate pseudo-code from source code. 项目地址: https://gitcode.com/gh_mirrors/ps/pseudogen 还在为理解复杂代码而头疼吗?Pseu…

作者头像 李华
网站建设 2026/2/28 5:12:18

Downkyi哔哩下载神器:新手必备的8大实用技巧

Downkyi哔哩下载神器:新手必备的8大实用技巧 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等)。 …

作者头像 李华
网站建设 2026/3/1 0:46:53

ncmdump音乐解密工具:轻松解锁网易云音乐NCM加密文件

ncmdump音乐解密工具:轻松解锁网易云音乐NCM加密文件 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM加密文件无法在其他播放器使用而烦恼吗?ncmdump这款专业音乐解密工具能够完美解…

作者头像 李华
网站建设 2026/2/26 3:22:30

5步解锁Dell G15散热性能:开源轻量替代方案深度评测

5步解锁Dell G15散热性能:开源轻量替代方案深度评测 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 你是否正在为Dell G15笔记本上官方AWCC软件的卡…

作者头像 李华
网站建设 2026/3/1 8:40:51

Unity游戏翻译终极指南:5分钟实现多语言无障碍畅玩

Unity游戏翻译终极指南:5分钟实现多语言无障碍畅玩 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 想要畅玩日文、韩文Unity游戏却苦于语言障碍?XUnity自动翻译插件正是为你量身打…

作者头像 李华