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