news 2026/4/18 13:10:18

[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/4/17 19:25:09

Unity游戏多语言支持终极指南:XUnity.AutoTranslator完整配置教程

Unity游戏多语言支持终极指南:XUnity.AutoTranslator完整配置教程 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 在当今全球化的游戏市场中,为Unity游戏提供多语言支持已成为提升…

作者头像 李华
网站建设 2026/4/18 8:49:05

WE Learn智能学习助手完整使用教程:从零开始掌握高效学习技巧

WE Learn智能学习助手完整使用教程:从零开始掌握高效学习技巧 【免费下载链接】WELearnHelper 显示WE Learn随行课堂题目答案;支持班级测试;自动答题;刷时长;基于生成式AI(ChatGPT)的答案生成 项目地址: https://git…

作者头像 李华
网站建设 2026/4/18 8:30:16

Bypass Paywalls Clean:5步解锁付费内容的完整指南

Bypass Paywalls Clean:5步解锁付费内容的完整指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在数字内容付费时代,Bypass Paywalls Clean作为一款高效的C…

作者头像 李华
网站建设 2026/4/18 1:55:25

碧蓝航线智能自动化革命:从手动操作到AI助手的华丽蜕变

碧蓝航线智能自动化革命:从手动操作到AI助手的华丽蜕变 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript 还在为每…

作者头像 李华
网站建设 2026/4/18 3:36:19

六音音源终极修复方案:快速解决洛雪音乐播放难题

六音音源终极修复方案:快速解决洛雪音乐播放难题 【免费下载链接】New_lxmusic_source 六音音源修复版 项目地址: https://gitcode.com/gh_mirrors/ne/New_lxmusic_source 针对洛雪音乐升级后出现的六音音源失效问题,本方案提供了一套完整的快速修…

作者头像 李华