祝各位道友念头通达
GitHub Gitee 语雀 打赏

通用量产镜像打包工具教程(可适用所有平台)

1. 项目概述

通用量产镜像打包工具是一套适用于多种芯片平台的完整镜像构建与打包解决方案,可快速生成包含完整系统的量产镜像,支持多平台配置与自定义参数设置。

主要功能与特点:

  • 集成BSP、rootfs、SPL和UBOOT等完整系统组件
  • 支持自定义分区表配置,满足不同项目需求
  • 提供交互式和命令行参数两种操作模式
  • 支持多平台选择
  • 可自定义物理磁盘大小和最终镜像大小
  • 提供完整的TFTP镜像烧写指南

2. 项目结构详解

项目采用模块化设计,将不同功能组件和配置文件清晰分离,便于维护和扩展。

2.1 整体目录结构

image_packer/
├── README.md          # 项目说明文档
├── platform/          # 平台相关配置和镜像文件
│   ├── platform_1/    # 平台1配置
│   └── platform_2/    # 平台2配置
├── rootfs/            # 根文件系统目录
│   ├── apps/          # 应用程序
│   └── etc/           # 系统配置文件
├── script/            # 核心构建脚本
│   ├── build.sh       # 主构建脚本
│   ├── mk-config.sh   # 配置生成脚本
│   ├── mk-update.sh   # 更新镜像生成脚本
│   ├── mk-rootfs.sh   # 根文件系统镜像生成脚本
│   └── mktpsfs        # 专用文件系统创建工具
└── os_files/          # 操作系统文件
    ├── boot.bin       # 启动文件
    └── boot.dtb       # 设备树文件

2.2 核心目录功能说明

  • platform/: 包含各目标平台的特定文件,如bootloader、环境配置和分区表参数
  • rootfs/: 包含完整的根文件系统,包括应用程序、库文件和配置
  • script/: 包含所有构建和打包脚本,是项目的核心执行部分
  • os_files/: 包含目标操作系统的核心启动文件

3. 镜像打包原理与实现

3.1 镜像组成与分区结构

生成的update.img镜像采用GPT分区表格式,通常包含以下三个主要分区:

分区名称 分区类型 分区大小 主要功能
uboot EF02 约3MB 存储bootloader和启动相关程序
boot FAT32 约64MB 存储操作系统引导文件和配置
rootfs TPSFS/EXT4 剩余空间 根文件系统,包含所有应用程序和数据

分区表配置存储在platform目录下的partparam.txt文件中,可根据项目需求进行调整。

3.2 构建流程详解

整个镜像构建过程由build.sh主脚本协调整合,通过调用多个专用子脚本完成各阶段任务:

  1. 配置解析阶段:解析命令行参数或通过交互式输入获取平台、磁盘大小和镜像大小等配置
  2. 参数验证阶段:验证平台有效性、磁盘大小和镜像大小是否符合要求
  3. 配置准备阶段:通过mk-config.sh脚本准备各平台所需文件和环境
  4. 镜像创建阶段
    • 通过mk-update.sh创建初始镜像文件和GPT分区表
    • 通过mk-fat.sh格式化FAT32分区
    • 通过mk-rootfs.sh创建指定格式的根文件系统
  5. 内容导入阶段:通过mk-import.sh导入系统文件到对应分区
  6. 环境配置阶段:通过mk-env.sh配置系统环境参数
  7. 镜像调整阶段:调整最终镜像大小以优化存储空间

4. 从零构建镜像详细步骤

4.1 环境准备

  • 需要Linux系统环境(推荐Ubuntu 18.04或更高版本)
  • 需要root或sudo权限执行构建脚本
  • 确保已安装必要工具:sgdisk、dd、losetup、mkfs.vfat等

4.2 构建前配置检查

在执行构建前,请确认以下内容:

  1. 平台文件完整性:检查platform目录下对应平台文件夹是否包含完整文件:

    • bl2.bin:二级引导加载程序
    • env.bin:环境配置文件
    • partparam.txt:分区表参数配置
    • uboot.img:uboot引导镜像
  2. 根文件系统准备:确认rootfs目录包含完整的文件系统结构

  3. 操作系统文件准备:确认os_files目录包含boot.bin和boot.dtb等必要的系统文件

4.3 执行镜像构建

项目支持两种构建模式:交互式模式和命令行参数模式。

4.3.1 命令行参数模式

这是最常用的模式,直接在命令中指定所有必要参数:

cd /path/to/image_packer/script
sudo ./build.sh --platform=target_platform --disk-size=29G --image-size=84M

参数说明:

  • --platform:指定目标平台,根据实际平台名称填写
  • --disk-size:指定物理磁盘大小,最小1G,如29G、30G等
  • --image-size:指定生成的量产镜像大小,最小84M

4.3.2 交互式模式

如果不熟悉参数配置,可以使用交互式模式:

cd /path/to/image_packer/script
sudo ./build.sh

系统会引导您逐步选择平台、输入磁盘大小和镜像大小等参数。

4.4 构建过程详解

当执行build.sh脚本后,系统会按以下步骤进行操作:

  1. 配置验证:验证所选平台是否存在、磁盘和镜像大小是否符合要求

  2. 环境准备:创建必要的输出目录、设置环境变量

  3. 文件链接:将平台相关文件从platform目录链接到临时工作目录

  4. 分区表创建:通过sgdisk工具创建GPT分区表,按partparam.txt定义创建三个分区

  5. 文件系统格式化:对boot分区进行FAT32格式化,rootfs分区后续使用专用工具处理

  6. 根文件系统生成:使用专用工具基于rootfs目录创建指定格式的文件系统镜像

  7. 系统文件导入:将目标操作系统文件导入到对应分区

  8. 环境配置导入:导入ENV.BIN配置文件

  9. 镜像大小调整:使用truncate命令将镜像大小调整为指定的实际大小

  10. 创建软链接:在项目根目录创建指向output/update.img的软链接,方便访问

构建成功后,您将在output目录下看到生成的update.img镜像文件。

5. 镜像烧写完整指南

5.1 TFTP服务准备

  1. 在Linux主机上安装并配置TFTP服务
  2. 将生成的update.img和platform/target_platform/bl2.bin文件复制到TFTP服务器目录
  3. 确保开发板与TFTP服务器在同一网络中

5.2 板卡烧写步骤

  1. 启动开发板,在启动过程中按下Ctrl + D进入UBOOT命令行

  2. 配置网络参数(根据实际网络环境调整):

    # 以下命令仅供参考,具体命令和地址根据实际设备和网络环境调整
    # 设置TFTP服务器IP和开发板IP
    setenv serverip 192.168.1.100; setenv ipaddr 192.168.1.101
    
  3. 烧写update.img镜像:

    # 下载镜像到开发板内存
    tftp 0x880000000 update.img
    # 配置MMC并烧写镜像
    mmc partconf 0 0 0 0; mmc write 0x880000000 0 0x2A000
    
  4. 验证分区是否正确创建:

    mmc part
    

    成功后应显示三个分区:uboot、boot和rootfs

  5. 烧写bl2.bin引导文件:

    # 下载并烧写bootloader
    tftp 0x880000000 bl2.bin; mmc partconf 0 1 1 1; mmc write 0x880000000 0 0x2fd
    
  6. 重启开发板完成整个烧写过程

6. 高级功能与定制化

6.1 自定义分区表

如需调整分区大小或添加新分区,可以修改对应平台目录下的partparam.txt文件:

# 格式:分区号:起始扇区:结束扇区:分区类型:分区名称:文件系统类型
1:2048:8191:21686148-6449-6e6f-744e-656564454649:uboot:
2:8192:139263:ebd0a0a2-b9e5-4433-87c0-68b6b72699c7:boot:fat32
3:139264:auto:c12a739a-f81f-66d2-df4b-00a0c93ec9d5:rootfs:tpsfs
  • 分区号:从1开始的数字
  • 起始扇区:分区的起始位置
  • 结束扇区:分区的结束位置,"auto"表示自动计算
  • 分区类型:GPT分区类型GUID
  • 分区名称:分区的可读名称
  • 文件系统类型:支持fat32和tpsfs

6.2 添加自定义应用到rootfs

如需将自定义应用程序添加到系统镜像中,只需将应用程序复制到rootfs目录的相应位置,然后重新构建镜像即可:

# 例如,添加自定义应用到/usr/bin目录
cp your_app /path/to/image_packer/rootfs/usr/bin/
# 然后重新构建镜像
cd script && sudo ./build.sh --platform=target_platform --disk-size=29G --image-size=84M

6.3 清理构建环境

如需清理所有生成的镜像文件和临时文件,可以使用清理模式:

cd script && sudo ./build.sh --clean

这将删除output目录、images目录以及所有生成的.img和.bin文件。

7. 常见问题与解决方案

7.1 权限问题

问题:执行脚本时提示权限不足
解决方案:确保使用sudo或以root用户身份运行脚本

7.2 平台文件缺失

问题:提示找不到指定平台的文件
解决方案:检查platform目录下是否存在指定平台的文件夹,以及文件夹内是否包含完整的必要文件

7.3 工具缺失

问题:执行过程中提示找不到sgdisk、mkfs.vfat等工具
解决方案:使用apt-get或其他包管理器安装缺失的工具

7.4 镜像大小问题

问题:生成的镜像大小与预期不符
解决方案:确保指定的image-size参数不小于84M,且不大于disk-size参数

8. 总结

通用量产镜像打包工具提供了一套完整、灵活的解决方案,可帮助开发者快速构建和部署适用于多种芯片平台的系统镜像。通过本文档的详细介绍,您应该能够理解镜像打包的原理、掌握从零构建镜像的步骤、并能够根据项目需求进行定制化配置。

这套工具的设计思路体现了模块化、自动化和可配置性的特点,使得复杂的镜像构建过程变得简单高效,大大提高了开发和生产效率。通过适当配置platform目录下的平台文件和调整分区表参数,可以轻松适配不同的硬件平台和操作系统需求。

9. 项目获取

需要项目可邮箱私信我 2584439485@qq.com

posted @ 2025-09-24 11:29  韩若明瞳  阅读(38)  评论(0)    收藏  举报