B站相应的视频教程:
Yocto项目实战教程-第8章-树莓派启动定制镜像-8.4小节-使用Wic工具创建分区镜像
记得三连,标为原始粉丝,感谢大神支持。
下周一发售
在嵌入式系统的构建过程中,镜像的格式和结构往往直接决定了系统的启动行为、数据分区策略以及更新机制。Yocto 项目作为主流的嵌入式 Linux 构建系统,其默认的镜像生成机制在很多场景下已经非常完善,但在需要对分区结构进行灵活定制时,wic
工具则显得尤为关键。
Wic(完整名称为 Image Creator
)是 Yocto 项目中的一个镜像打包工具,能够根据预设模板灵活地生成具有多分区结构的镜像文件,包括可引导分区、根文件系统分区、数据分区甚至空分区等。在系统部署、测试和量产中都具有极高的实用价值。
Wic 是 Yocto 项目中 oe-core
提供的一个 Python 工具,位于路径:
poky/scripts/wic
它基于 Kickstart 脚本(.wks
文件)定义分区结构,并使用底层工具(如 parted
、mkfs.ext4
、dd
等)构建磁盘镜像。最终可生成 .wic
、.sdimg
、.img
等格式的镜像文件,适用于 SD 卡、eMMC、U 盘或虚拟机磁盘。
与传统的 .ext4
、.cpio
、.tar.gz
镜像不同,Wic 的核心优势在于支持多分区布局和启动配置的精细控制,尤其适用于:
Wic 的工作流程大致如下:
解析 WKS 文件 → 创建空磁盘 → 分区分配 → 拷贝内容 → 创建文件系统 → 填充文件系统 → 镜像输出
其核心组件包括:
mkfs
、dd
、mount
等操作,填充分区内容dosfstools-native
、e2fsprogs-native
、bmap-tools-native
等 BitBake native 包支持一个典型的 .wic
镜像结构示例如下:
/dev/sda1 → FAT32 启动分区,挂载 boot/
/dev/sda2 → ext4 根文件系统,挂载 /
/dev/sda3 → ext4 数据分区,挂载 /data
支持 MBR 或 GPT 分区表,并可使用 --no-table
创建原始分区镜像。
WKS(Yocto Kickstart)文件是 Wic 的核心配置文件,用于定义分区方案。其语法部分兼容 Fedora Kickstart,但也包含 Yocto 的扩展格式。
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"
参数 | 含义 |
---|---|
--source |
来源:可为 bootimg-partition 、rootfs 、empty 等 |
--ondisk |
指定挂载设备,如 mmcblk0 |
--fstype |
文件系统类型,如 vfat 、ext4 、btrfs |
--label |
分区标签,便于系统识别 |
--size |
分区大小,单位为 MiB |
--active |
是否设为启动分区 |
bootloader |
指定启动加载器,如 grub、syslinux、u-boot |
--ptable |
分区表类型:msdos 或 gpt |
--align |
对齐大小(可选),通常为 4MB 或 1MiB |
Yocto 通常默认通过 wic
类型生成 .wic
镜像文件:
bitbake core-image-minimal
镜像路径为:
tmp/deploy/images//core-image-minimal-.wic
也可以手动执行:
wic create myimage.wks --image-name=core-image-minimal -o ./out
常见参数:
--image-name=
:指定构建的菜谱镜像--wks=
:指定 Kickstart 文件--outdir=
:输出目录--no-fstab-update
:防止自动更新 rootfs 中的 fstab 文件sudo dd if=core-image-minimal.wic of=/dev/sdX bs=4M status=progress && sync
或者使用 bmaptool
:
bmaptool copy core-image-minimal.wic /dev/sdX
在 local.conf
或 machine 文件中添加:
IMAGE_FSTYPES += "wic.bz2"
也可以添加 wic.gz
、wic.xz
等压缩格式,方便发布或 OTA。
在 BSP 层或 meta-custom
层中添加:
meta-custom/wic/my-custom.wks
并通过 local.conf
指定:
WKS_FILE = "my-custom.wks"
或者使用 override:
WKS_FILE_imx8mp-evk = "imx8mp-custom.wks"
part --source rawcopy --sourceparams="file=bootloader.bin" --ondisk mmcblk0 --no-table --align=4
可用于烧写 bootloader、签名区域或 TrustZone 信息。
--use-uuid
与 fstab 配置在 .wks
文件中添加:
--use-uuid
结合系统 fstab
中使用 UUID=
进行挂载,增强稳定性。
part --source rootfs --label rootfs_a --ondisk mmcblk0 --fstype=ext4 --size=1024
part --source rootfs --label rootfs_b --ondisk mmcblk0 --fstype=ext4 --size=1024
适用于双系统更新机制。
检查:
建议使用 --align
统一分区起始地址(如4MiB)避免误差,或查看 .wks
文件是否设置不合理。
需确认是否生成 .bmap
文件:
ls core-image-minimal.wic.bmap
如果未生成,可在 IMAGE_CLASSES
中添加:
IMAGE_CLASSES += "image_types_wic"
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工具创建分区镜像
记得三连,标为原始粉丝,感谢大神支持。