我在获取 initramfs 工作时遇到问题,它应该通过INITRAMFS_IMAGE_BUNDLE捆绑到内核。
我切换到“zeus”作为 yocto 版本,以便能够处理 .wic 文件。我有一个 i.MX8mm 评估板,我从 SD 卡启动 Linux。
这就是我配置构建的原因:
DISTRO=fsl-imx-wayland MACHINE=imx8mmevk source imx-setup-release.sh -b build导致 local.conf 中的以下变量:
机器??='imx8mmevk'
发行版?='fsl-imx-wayland'
其余的是默认情况下。
我做了什么?:
- 首先,我在 yocto 的 yocto/build/conf/local.conf 中添加了以下几行:INITRAMFS_IMAGE = "core-image-tiny-initramfs"
INITRAMFS_IMAGE_BUNDLE = "1"
VIRTUAL-RUNTIME_dev_manager = "busybox-mdev"
- 其次,为了快速试用,我还更改了 yocto/sources/poky/meta/recipes-core/images/core-image-tiny-initramfs.bb 中的一行以添加 aarch64 支持:COMPATIBLE_HOST = "(i.86|x86_64|aarch64).*-linux"
- 我用这种方式在 yocto/sources/meta-imx/meta-bsp/conf/layer.conf 中注释掉一行:#IMAGE_CLASSES += "image_types_create_sdcard_symlink"
- 现在我可以使用bitbake core-image-minimal构建整个东西而不会出错。我认为,yocto/build/tmp/deploy/images/imx8mmevk 中生成的关键文件如下,我还提取了 wic.bz2 已经在这里:core-image-minimal-imx8mmevk-[时间戳].rootfs.wic.bz2 42,3 MiB
core-image-minimal-imx8mmevk-[timestamp].rootfs.wic 271,2 MiB core-image-tiny-initramfs.imx8mmevk-[timestamp].rootfs.cpio.gz 11,8 MiB core-image-tiny-initramfs。 imx8mmevk.cpio.gz(链接到上面的文件)
- 接下来,我使用 dd 将该 .wic 文件写入我的 SD 卡(如 NXP 文档中所述)。
- 我将该 SD 卡插入我的评估板,打开电源并在 u-boot 命令行中输入以下命令:setenv mmcroot /dev/ram0 rootwait rw
开机
- 现在 Linux 正常启动但挂起:Waiting for root device /dev/ram0...
- 当我将 u-boot 中的 mmcroot 保存到 /dev/mmcblk1p2 时,Linux 启动没有问题!但在那种情况下,我看不到它通过 initramfs 启动。它使用 core-image-minimal 的通用 rootfs。
在我看来,没有捆绑 initramfs 图像
的核心图像最小图像仅小 200KB。所以我怀疑捆绑不能正常工作。
出了什么问题?必须更改什么才能让 Linux 内核使用捆绑的 initramfs RAM 文件系统???将 initramfs 捆绑到 wic 文件的脚本有问题吗?
我真正想做的是在整个 rootfs 上设置一个 overlayfs 我的 Linux,我可以看到 core-image-tiny-initramfs 正是这样做的,因为它是通过它的 yocto/sources/poky/meta/ 配置的食谱核心/initrdscripts/文件/init-live.sh。