【问题标题】:Yocto - creating a dependency for WIC to cpio.gz imageYocto - 为 WIC 创建对 cpio.gz 映像的依赖项
【发布时间】:2019-11-20 12:16:56
【问题描述】:

我正在创建一个小型 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,因此它会从我的rootfs 构建cpio.gz 存档。

我的问题非常简单——当 WIC 运行时,它会在创建 rootfs cpio.gz 之前尝试创建 wic 文件,因此构建失败。我需要的是创建一个依赖项,它会保存 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 工具来绕过该问题。为此,我不得不在我的 local.conf 中使用IMAGE_FSTYPES_remove = " wic wic.bmap hddimg "。那么运行wic的命令是:

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

谢谢!

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

【问题讨论】:

    标签: yocto tmpfs yocto-wic


    【解决方案1】:

    您可以通过两种方式使用 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 创建WIC。它等待 initramfs 完成构建。在image-base-initramfs 中,您将创建 initramfs 映像。

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

    1. 使用WKS_FILE_DEPENDS:您可以在创建 WIC 映像之前将任何 bitbake 配方添加到依赖项。将image-base-initramfs 添加到此变量将等待它完成initramfs 映像。我们也有 WKS_FILE_DEPENDS_BOOTLOADERS 依赖引导加载程序来完成 WIC 创建。

    【讨论】:

    • 谢谢,@Parthiban,您的回复包含有价值的信息。尽管如此,它并没有回答我的问题,因为我根本不使用 initramfs,也不需要构建它。我只是在 rootfs 构建中添加了一个 cpio.gz 映像,然后将其复制到我的 /boot 分区。内核会将其用作 RAM 中的 tmpfs。因此,我只需要延迟 wic 映像创建,直到 cpio.gz rootfs 映像存在。我尝试使用这些技术,例如将do_image_wic[depends] += "core-image-minimal:do_image_cpio" 添加到我的core-image-minimal.bbappend 文件中,但没有任何区别。
    猜你喜欢
    • 1970-01-01
    • 2020-06-16
    • 2021-09-30
    • 2018-01-02
    • 2017-03-25
    • 2017-10-11
    • 2020-07-14
    • 2017-09-12
    • 1970-01-01
    相关资源
    最近更新 更多