GNU/Linux - wic文件的使用

Yocto/OpenEmbedded使用的磁盘镜像格式是 wic。为嵌入式系统提供 bootable images。

The disk image format used in the Yocto Project is wic.

.wic 文件显然只是一个带有分区表和分区的磁盘镜像,就像下载 Linux 发行版时获得的所有 .img 文件一样。这就是为什么你可以使用 dd 命令烧写 .wic 文件,就像使用 .img 文件一样。

A .wic file is apparently just a disk image with a partition table and partitions, just like all the .img files you get when downloading e.g Linux distros. That's why you can flash a .wic file using dd just like you would with a .img file.

之所以使用 .wic 文件扩展名,是因为它是由 wic 工具创建的,该工具读取 .wks 文件中描述的分区布局,并生成带有相应分区的映像。有关 wic 工具的更多信息,请参阅: 19 Creating Partitioned Images Using Wic --- The Yocto Project ® 5.0.1 documentation

The reason for the .wic file extension is simply that it's created by the wic tool, which reads a partition layout described in a .wks file and generates an image with the corresponding partitions. For more info on the wic tool, see: 19 Creating Partitioned Images Using Wic --- The Yocto Project ® 5.0.1 documentation

如何读取wic文件中的内容呢?

1,Mount the .wic File

将wic文件加载为loop device。

Automatically find an available loop device and associate it with a file.

$ sudo losetup -Pf --show my-image.wic

/dev/loop17

$ losetup --help

-a, --all list all used devices

-P, --partscan create a partitioned loop device

-f, --find find first unused device

--show print device name after setup (with -f)

-d, --detach <loopdev>... detach one or more devices

-D, --detach-all detach all used devices

$ losetup -a

上面结果显示加载为/dev/loop17设备。

将设备名赋值给变量:

LOOP_DEVICE=$(sudo losetup -Pf --show my-image.wic)

2, List Partitions

使用fdisk命令,查看加载设备的分区信息

$ sudo fdisk -l /dev/loop17

Disk /dev/loop17: 7.11 GiB, 7638816768 bytes, 14919564 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0x076c4a2a

Device Boot Start End Sectors Size Id Type

/dev/loop17p1 * 16384 186775 170392 83.2M c W95 FAT32 (LBA)

/dev/loop17p2 196608 14919563 14722956 7G 83 Linux

3,Mount Partitions

sudo mount /dev/loop17p1 mnt

4,Access Files

cd mnt

ls

5, Cleaning up

Unmount partitions:

sudo umount mnt

6, Detach the loop device

sudo losetup -d /dev/loop17


使用kpartx命令操作:

$ kpartx --help

-a add partition devmappings

-d del partition devmappings

-v verbose

-l list partitions devmappings that would be added by -a

$ sudo kpartx -av my-image.wic

sudo\] password for dev: add map loop17p1 (252:0): 0 170392 linear 7:17 16384 add map loop17p2 (252:1): 0 14722956 linear 7:17 196608 $ sudo kpartx -l my-image.wic loop17p1 : 0 170392 /dev/loop17 16384 loop17p2 : 0 14722956 /dev/loop17 196608 $ sudo kpartx -l /dev/loop17 loop17p1 : 0 170392 /dev/loop17 16384 loop17p2 : 0 14722956 /dev/loop17 196608 $ sudo fdisk -l /dev/loop17 Disk /dev/loop17: 7.11 GiB, 7638816768 bytes, 14919564 sectors Units: sectors of 1 \* 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x076c4a2a Device Boot Start End Sectors Size Id Type /dev/loop17p1 \* 16384 186775 170392 83.2M c W95 FAT32 (LBA) /dev/loop17p2 196608 14919563 14722956 7G 83 Linux $ ls /dev/mapper/ control loop17p1 loop17p2 $ sudo mount /dev/mapper/loop17p2 mnt $ sudo umount mnt $ sudo kpartx -dv my-image.wic del devmap : loop17p1 del devmap : loop17p2 loop deleted : /dev/loop17 $ sudo kpartx -dv /dev/loop17 del devmap : loop17p1 del devmap : loop17p2 参考: [linux - Difference between wic and hddimg format in yocto - Stack Overflow](https://stackoverflow.com/questions/49527057/difference-between-wic-and-hddimg-format-in-yocto "linux - Difference between wic and hddimg format in yocto - Stack Overflow")

相关推荐
三体世界2 分钟前
测试用例全解析:从入门到精通(1)
linux·c语言·c++·python·功能测试·测试用例·测试覆盖率
过尽漉雪千山3 分钟前
Flink1.17.0集群的搭建
java·大数据·linux·flink·centos
csdn_aspnet27 分钟前
Windows、Linux 系统 nodejs 和 npm 版本更新及错误修复
linux·windows·npm·node.js
潘潘潘潘潘潘潘潘潘潘潘潘44 分钟前
【MySQL】从零开始学习MySQL:基础与安装指南
linux·运维·服务器·数据库·学习·mysql
数字化顾问1 小时前
【Linux】【实战向】Linux 进程替换避坑指南:从理解 bash 阻塞等待,到亲手实现能执行 ls/cd 的 Shell
linux
努力努力再努力wz1 小时前
【c++进阶系列】:map和set的模拟实现(附模拟实现的源码)
java·linux·运维·开发语言·c++
Cloud Traveler2 小时前
8.FC平台模块梳理
java·linux·开发语言
哦你看看2 小时前
linux故障排查
linux·运维·服务器
半桔2 小时前
【Linux手册】共享内存:零拷贝实现共享的优势与实操指南
linux·运维·服务器
Evan_ZGYF丶2 小时前
【RK3576】【Android14】如何在Android14下单独编译kernel-6.1?
linux·驱动开发·android14·rk3576