news 2026/6/10 7:05: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/6/10 16:04:17

WELearnHelper终极指南:智能学习助手完全攻略

WELearnHelper终极指南:智能学习助手完全攻略 【免费下载链接】WELearnHelper 显示WE Learn随行课堂题目答案;支持班级测试;自动答题;刷时长;基于生成式AI(ChatGPT)的答案生成 项目地址: https://gitcode.com/gh_mir…

作者头像 李华
网站建设 2026/6/5 12:23:15

springboot+vue学生实习信息管理系统

目录 摘要技术特点 开发技术 核心代码参考示例1.建立用户稀疏矩阵,用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度总结源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 摘要 该系统基于SpringBoot和Vue…

作者头像 李华
网站建设 2026/6/10 15:37:39

springboot付费自习室 座位管理系统vue

目录系统架构核心功能模块技术亮点扩展性设计开发技术核心代码参考示例1.建立用户稀疏矩阵,用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度总结源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!系统架构 …

作者头像 李华
网站建设 2026/6/6 9:11:30

PlantUML编辑器完整指南:零基础快速上手专业图表绘制

PlantUML编辑器完整指南:零基础快速上手专业图表绘制 【免费下载链接】plantuml-editor PlantUML online demo client 项目地址: https://gitcode.com/gh_mirrors/pl/plantuml-editor 还在为绘制复杂的UML图表而烦恼吗?PlantUML Editor让你用简单…

作者头像 李华
网站建设 2026/6/8 8:36:25

Dell G15终极散热解决方案:5分钟掌握开源散热控制中心

Dell G15终极散热解决方案:5分钟掌握开源散热控制中心 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 还在为Dell G15官方散热软件的卡顿和功能限制…

作者头像 李华
网站建设 2026/6/10 16:50:46

Unity自动翻译终极指南:XUnity.AutoTranslator快速入门教程

Unity自动翻译终极指南:XUnity.AutoTranslator快速入门教程 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 想要为你的Unity游戏快速添加多语言支持吗?XUnity.AutoTranslator作为专…

作者头像 李华