0

我正在创建一个小型 Yocto 发行版,它应该在 tmpfs 上的 RAM 中工作。我通过以下方式使用 WIC 配置:

part /boot --source bootimg-efi --sourceparams="loader=grub-efi,initrd=${PN}-${MACHINE}.cpio.gz,file=${PN}-${MACHINE}.cpio.gz" --ondisk sda --label msdos --active --align 1024
bootloader --ptable gpt --timeout=0 --append="rootfstype=tmpfs rootflags=size=2G console=ttyS0,115200 console=tty0"

我还添加IMAGE_FSTYPES_append = " cpio.gz "到我的 local.conf,因此它cpio.gz从我的 rootfs 构建存档。

我的问题非常简单——当 WIC 运行时,它会在完成创建 rootfs 之前尝试创建 wic 文件cpio.gz,因此构建失败。我需要的是创建一个依赖项,它会保存 WIC 脚本直到cpio.gz准备好。有谁知道如何实现它?例如,WKS_FILE_DEPENDS可以使用吗?

这是失败:

| ERROR: _exec_cmd: cp .../poky/build/tmp/deploy/images/genericx86-64/core-image-minimal-genericx86-64.cpio.gz .../poky/build/tmp/work/genericx86_64-poky-linux/core-image-minimal/1.0-r0/deploy-core-image-minimal-image-complete/core-image-minimal-genericx86-64-20191121151711/tmp.wic.k00ckxmk/hdd/boot returned '1' instead of 0
| output: cp: cannot stat '.../poky/build/tmp/deploy/images/genericx86-64/core-image-minimal-genericx86-64.cpio.gz': No such file or directory

目前我通过在构建后手动运行 wic 工具来绕过这个问题。为此,我不得不IMAGE_FSTYPES_remove = " wic wic.bmap hddimg "在我的 local.conf 中使用。运行 wic 的命令是:

wic create ../meta-mylayer/wic/myimage.wks -e core-image-minimal

谢谢!

编辑:也许问题不在于创建所需的依赖项,而在于我创建图像的方式?我只想要一个 UEFI 引导、一个内核和一个带有完整 rootfs 的 cpio.gz 文件,该文件将在引导时挂载。这不是 initramfs,而是我需要的完整 rootfs。除了有问题的依赖性之外,生成的图像完全符合我的需要。

4

1 回答 1

0

您可以通过 2 种方式使用 WIC 指定依赖关系。

  1. 使用 do_image_wic:创建 WIC 的最终任务是do_image_wic. 因此,您可以将创建 initrd/initramfs 映像的依赖项添加到此任务中,如下所示,

do_image_wic[depends] += "image-base-initramfs:do_image_complete"

您需要在 WIC 映像创建配方中指定这一点。对于这个例子,

DESCRIPTION = "My image"

inherit core-image

export IMAGE_BASENAME = "image-base"
IMAGE_FSTYPES = "wic.xz"
DEPENDS += "image-base-initramfs"
do_image_wic[depends] += "image-base-initramfs:do_image_complete"
WKS_FILES = "my.wks"

这里image-base用于使用my.wks. 它等待 initramfs 完成构建。您将在其中image-base-initramfs创建 initramfs 映像。

要添加,您也可以INITRAMFS_IMAGE在使用内核 fitImage 时执行此操作。

  1. 使用WKS_FILE_DEPENDS:您可以在创建 WIC 映像之前将任何 bitbake 配方添加到依赖项。添加image-base-initramfs到此变量将等待它完成 initramfs 映像。我们还需要WKS_FILE_DEPENDS_BOOTLOADERS依赖引导加载程序来完成 WIC 创建。
于 2019-11-21T11:49:53.830 回答