Yocto项目实战教程-第8章-树莓派启动定制镜像-8.4小节-使用Wic工具创建分区镜像

🔍

B站相应的视频教程
📌 Yocto项目实战教程-第8章-树莓派启动定制镜像-8.4小节-使用Wic工具创建分区镜像
记得三连,标为原始粉丝,感谢大神支持。


下周一发售
在这里插入图片描述


一、引言

在嵌入式系统的构建过程中,镜像的格式和结构往往直接决定了系统的启动行为、数据分区策略以及更新机制。Yocto 项目作为主流的嵌入式 Linux 构建系统,其默认的镜像生成机制在很多场景下已经非常完善,但在需要对分区结构进行灵活定制时,wic 工具则显得尤为关键。

Wic(完整名称为 Image Creator)是 Yocto 项目中的一个镜像打包工具,能够根据预设模板灵活地生成具有多分区结构的镜像文件,包括可引导分区、根文件系统分区、数据分区甚至空分区等。在系统部署、测试和量产中都具有极高的实用价值。


二、Wic 工具概述

2.1 Wic 是什么?

Wic 是 Yocto 项目中 oe-core 提供的一个 Python 工具,位于路径:

poky/scripts/wic

它基于 Kickstart 脚本(.wks 文件)定义分区结构,并使用底层工具(如 partedmkfs.ext4dd 等)构建磁盘镜像。最终可生成 .wic.sdimg.img 等格式的镜像文件,适用于 SD 卡、eMMC、U 盘或虚拟机磁盘。

2.2 Wic 的定位

与传统的 .ext4.cpio.tar.gz 镜像不同,Wic 的核心优势在于支持多分区布局和启动配置的精细控制,尤其适用于:

  • 自定义启动分区(如 U-Boot 分区)
  • 多根文件系统(rootfs A/B)更新策略
  • 增加数据分区、日志分区、配置分区
  • 特定格式的磁盘结构,如 GPT/MBR

三、Wic 架构原理

3.1 Wic 的执行流程

Wic 的工作流程大致如下:

解析 WKS 文件 → 创建空磁盘 → 分区分配 → 拷贝内容 → 创建文件系统 → 填充文件系统 → 镜像输出

其核心组件包括:

  • WKS 文件解析器:提取分区定义、文件系统类型、大小、label、bootloader 等信息
  • Partition 实例:内部使用 Python 类构建一个“分区计划表”
  • Image Creator 类:执行具体的 mkfsddmount 等操作,填充分区内容
  • native 工具依赖:依赖 dosfstools-nativee2fsprogs-nativebmap-tools-native 等 BitBake native 包支持

3.2 Wic 的镜像结构

一个典型的 .wic 镜像结构示例如下:

/dev/sda1 → FAT32 启动分区,挂载 boot/
/dev/sda2 → ext4 根文件系统,挂载 /
/dev/sda3 → ext4 数据分区,挂载 /data

支持 MBR 或 GPT 分区表,并可使用 --no-table 创建原始分区镜像。


四、Kickstart 文件详解(.wks)

WKS(Yocto Kickstart)文件是 Wic 的核心配置文件,用于定义分区方案。其语法部分兼容 Fedora Kickstart,但也包含 Yocto 的扩展格式。

4.1 示例:标准三分区方案

part --source bootimg-partition --ondisk mmcblk0 --label boot --active --fstype=vfat --size=64
part --source rootfs --ondisk mmcblk0 --label rootfs --fstype=ext4 --size=1024
part --source empty --ondisk mmcblk0 --label data --fstype=ext4 --size=512
bootloader --ptable msdos --append="console=ttymxc0,115200"

4.2 参数说明

参数含义
--source来源:可为 bootimg-partitionrootfsempty
--ondisk指定挂载设备,如 mmcblk0
--fstype文件系统类型,如 vfatext4btrfs
--label分区标签,便于系统识别
--size分区大小,单位为 MiB
--active是否设为启动分区
bootloader指定启动加载器,如 grub、syslinux、u-boot
--ptable分区表类型:msdos 或 gpt
--align对齐大小(可选),通常为 4MB 或 1MiB

五、Wic 使用方法

5.1 生成 Wic 镜像

Yocto 通常默认通过 wic 类型生成 .wic 镜像文件:

bitbake core-image-minimal

镜像路径为:

tmp/deploy/images/<machine>/core-image-minimal-<machine>.wic

也可以手动执行:

wic create myimage.wks --image-name=core-image-minimal -o ./out

常见参数:

  • --image-name=:指定构建的菜谱镜像
  • --wks=:指定 Kickstart 文件
  • --outdir=:输出目录
  • --no-fstab-update:防止自动更新 rootfs 中的 fstab 文件

5.2 烧录到 SD 卡

sudo dd if=core-image-minimal.wic of=/dev/sdX bs=4M status=progress && sync

或者使用 bmaptool

bmaptool copy core-image-minimal.wic /dev/sdX

六、Wic 与 BitBake 集成实践

6.1 启用 Wic 输出格式

local.conf 或 machine 文件中添加:

IMAGE_FSTYPES += "wic.bz2"

也可以添加 wic.gzwic.xz 等压缩格式,方便发布或 OTA。

6.2 自定义 WKS 文件路径

在 BSP 层或 meta-custom 层中添加:

meta-custom/wic/my-custom.wks

并通过 local.conf 指定:

WKS_FILE = "my-custom.wks"

或者使用 override:

WKS_FILE_imx8mp-evk = "imx8mp-custom.wks"

七、Wic 分区高级特性

7.1 使用 raw 分区

part --source rawcopy --sourceparams="file=bootloader.bin" --ondisk mmcblk0 --no-table --align=4

可用于烧写 bootloader、签名区域或 TrustZone 信息。

7.2 使用 --use-uuid 与 fstab 配置

.wks 文件中添加:

--use-uuid

结合系统 fstab 中使用 UUID= 进行挂载,增强稳定性。

7.3 多 rootfs 支持(A/B 分区)

part --source rootfs --label rootfs_a --ondisk mmcblk0 --fstype=ext4 --size=1024
part --source rootfs --label rootfs_b --ondisk mmcblk0 --fstype=ext4 --size=1024

适用于双系统更新机制。


八、调试与常见问题

8.1 分区挂载失败

检查:

  • 分区 label 是否正确
  • WKS 文件中是否指定了正确的 label 与 fstype
  • fstab 中是否存在挂载信息

8.2 镜像大小异常

建议使用 --align 统一分区起始地址(如4MiB)避免误差,或查看 .wks 文件是否设置不合理。

8.3 使用 bmaptool 失败

需确认是否生成 .bmap 文件:

ls core-image-minimal.wic.bmap

如果未生成,可在 IMAGE_CLASSES 中添加:

IMAGE_CLASSES += "image_types_wic"

九、典型项目实战案例:NXP i.MX8MP EVK

NXP 的 meta-imx 层默认使用 .sdcard.wic.bz2 作为镜像输出格式。在 imx-boot 启动后,rootfs 来自 .wic 分区镜像。可通过以下命令生成对应镜像:

bitbake imx-image-full

产出文件路径:

tmp/deploy/images/imx8mp-evk/imx-image-full-imx8mp-evk.wic.bz2

自定义分区方案:

part --source bootimg-partition --label boot --fstype=vfat --size=64
part --source rootfs --label rootfs --fstype=ext4 --size=1024
part --source empty --label data --fstype=ext4 --size=512

十、总结与建议

Wic 工具为 Yocto 项目提供了灵活而强大的分区镜像创建能力。相比单一的根文件系统格式,它更适合复杂系统的定制部署需求,尤其在产品发布、升级管理、A/B 系统、数据分区隔离等场景中有广泛应用。

建议在项目初期就定义好 WKS 文件,并使用版本管理工具跟踪,保持分区结构的清晰可控。同时配合 bmaptool 进行高效烧录,是 Yocto 项目构建完整系统镜像不可或缺的重要工具。


🔍

B站相应的视频教程
📌 Yocto项目实战教程-第8章-树莓派启动定制镜像-8.4小节-使用Wic工具创建分区镜像
记得三连,标为原始粉丝,感谢大神支持。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值