INITRAMFS_IMAGE_BUNDLE上的Yocto Warrior和SD卡映像上的Linux内核映像

时间:2019-07-29 20:05:39

标签: linux embedded-linux yocto bitbake

我正在Ubuntu 18.04上使用Yocto warrior构建我的嵌入式Linux系统。我有自己的核心图像配方和一个initramfs图像配方。

我一直在阅读文档(https://www.yoctoproject.org/docs/current/mega-manual/mega-manual.html#var-INITRAMFS_IMAGE)和互联网上的各种帖子,以便在local.conf中提出以下内容:

# Use the INITRAMFS bundled in kernel
#KERNEL_IMAGETYPE = "Image-initramfs-jetson-nano.bin"
#KERNEL_IMAGE_BASE_NAME = "Image-initramfs-jetson-nano.bin"
#INITRAMFS_LINK_NAME = ""
INITRAMFS_NAME = "Initramfs"
INITRAMFS_IMAGE = "tegra-minimal-initramfs"
INITRAMFS_IMAGE_BUNDLE = "1"

实际上,这些行确实创建了我的内核的内置版本的initramfs,并将其以 Image-Initramfs.bin 的名称放置在deploy目录中。它比成功引导的 Image 内核文件大一些。因此,Yocto最终构建了2个内核,一个包含initramfs,另一个没有。

ubuntu@ip:~/Desktop/jetson-yocto/build$ du -sh tmp/deploy/images/jetson-nano/Image-Initramfs.bin
36M tmp/deploy/images/jetson-nano/Image-Initramfs.bin
ubuntu@ip:~/Desktop/jetson-yocto/build$ du -sh tmp/deploy/images/jetson-nano/Image--4.9+git0+3c02a65d91-r0-jetson-nano-20190729195650.bin 
33M tmp/deploy/images/jetson-nano/Image--4.9+git0+3c02a65d91-r0-jetson-nano-20190729195650.bin

文档说这是通过辅助编译路径完成的:

Controls whether or not the image recipe specified by INITRAMFS_IMAGE is run through an extra pass (do_bundle_initramfs) during kernel compilation in order to build a single binary that contains both the kernel image and the initial RAM filesystem (initramfs) image. This makes use of the CONFIG_INITRAMFS_SOURCE kernel feature.

Note
Using an extra compilation pass to bundle the initramfs avoids a circular dependency between the kernel recipe and the initramfs recipe should the initramfs include kernel modules. Should that be the case, the initramfs recipe depends on the kernel for the kernel modules, and the kernel depends on the initramfs recipe since the initramfs is bundled inside the kernel image.

问题是Yocto没有将此initramfs内核安装到最终的SD卡映像中。仅安装非initramfs内核。我没有找到有关如何使其安装initramfs版本而不是非initramfs版本的Yocto指令/设置。

我该怎么做?谢谢。

1 个答案:

答案 0 :(得分:0)

如果您使用wic工具生成SD卡映像,则可以在local.conf

中添加以下内容
`IMAGE_BOOT_FILES_append = " Image-Initramfs.bin;${KERNEL_IMAGETYPE}"`

但是,如果您使用的是自定义脚本,则必须提供更多信息 并自定义SD卡生成脚本。