Linux kernel 访问Yocto生成的initramfs映像中的initramfs工具功能

Linux kernel 访问Yocto生成的initramfs映像中的initramfs工具功能,linux-kernel,init,yocto,boot,initrd,Linux Kernel,Init,Yocto,Boot,Initrd,我想加载一些内核模块,并在普利茅斯发布之前激活帧缓冲区访问。这通常使用initramfs工具提供的/etc/initramfs工具目录来完成。但是,当使用Yocto构建initramfs映像时,没有这样的目录可用。这意味着,initramfs工具为加载模块和初始化帧缓冲区所做的任何事情都必须在initramfs图像中手动完成 诺特罗在书中非常细致地解释了我想要完成的任务 . 我想做与下面相同的事情: 访问/etc/initramfs tools/scripts/init top/spi和mod

我想加载一些内核模块,并在普利茅斯发布之前激活帧缓冲区访问。这通常使用
initramfs工具
提供的
/etc/initramfs工具
目录来完成。但是,当使用Yocto构建initramfs映像时,没有这样的目录可用。这意味着,
initramfs工具
为加载模块和初始化帧缓冲区所做的任何事情都必须在
initramfs
图像中手动完成

诺特罗在书中非常细致地解释了我想要完成的任务 . 我想做与下面相同的事情:

  • 访问
    /etc/initramfs tools/scripts/init top/spi
    modprobe
    模块
  • 访问
    /etc/initramfs tools/modules
    ,并列出模块守护进程要启动的其他模块
  • 通过echo“export framebuffer=/dev/fb1”| sudo tee/etc/initramfs tools/conf.d/fb1启用帧缓冲区
通过我的研究,我可以找到initramfs引导使用的一些脚本的特性。我认为这可能是一个很好的起点。然而,我不知道如何明确地告诉initramfs做我想完成的事情(上面的任务)

注意:目前,我的initramfs图像由以下配方生成:

include recipes-core/images/rpi-basic-image.bb
BASEPACKS = " \
    base-passwd \
    busybox \
    initramfs-live-boot \
    initramfs-framework-base \
    udev \
    ${ROOTFS_BOOTSTRAP_INSTALL} \
"

IMAGE_INSTALL = " ${BASEPACKS} \
                  plymouth plymouth-set-default-theme  \
                "

# Do not pollute the initrd image with rootfs features
IMAGE_FEATURES = "splash"
SPLASH = "plymouth"

IMAGE_LINGUAS = ""
LICENSE = "MIT"

IMAGE_FSTYPES = "${INITRAMFS_FSTYPES}"
IMAGE_ROOTFS_SIZE = "8192"
IMAGE_OVERHEAD_FACTOR = "1.0"
IMAGE_ROOTFS_EXTRA_SPACE = "0"
IMAGE_ROOTFS_MAXSIZE = "12288"

CMDLINE_append = " quiet splash nomodeset plymouth.ignore-serial-consoles consoleblank=0"

BAD_RECOMMENDATIONS += "busybox-syslog"
另请注意:我使用的是基于ARMv6的机器,带有U-boot引导加载程序。编译原始的
initramfs工具(最初为Debian开发)会生成0字节的图像。我猜这是它的兼容性问题。因此,我将不得不求助于使用yocto的内部工具生成initramfs


感谢您的帮助。提前谢谢。

没有“initramfs图像”这样的东西。内核创建一个空的ramfs文件系统,然后可以通过解包与内核映像链接的cpio归档来填充它。另一个cpio归档文件的内存地址可以使用initramd使用的相同寄存器机制传递到内核。顺便说一句,ramfs没有大小参数,它可以使用任何可用内存。大小参数将是ramdisk的属性。看,你把ramfs和ramdisk混为一谈了。你的评论对我这里的问题没有多大帮助。我知道initramfs是什么,它是一个文件系统,但你错了。有一种叫做initramfs image的东西,它是您提到的归档文件的包装版本。Cpio.gz归档文件被包装为.img格式,以便u-boot理解它。我现在使用的格式有.img扩展名,这意味着它是一个图像。然而,您可以将它与内核捆绑在一起,就像我在这个特定示例中所做的那样,也可以在外部使用它并配置GRUB或UBOOT。你的选择。也许你应该先读一下:这清楚地表明有一个initramfs映像,它的关键字甚至内置在整个YoctoLinux系统中。称为INITRAMFS_IMAGE。这也将帮助您理解如何生成initramfs图像。这个链接很有趣,因为它的不准确是问题的一部分。你可以继续关注它的错误,或者了解真相。例如,在Linux内核源代码或文档中找不到“INITRAMFS_IMAGE”;那是一个开放式的发明。.img的U-Boot包装名称扩展是另一个由于错误使用标签而产生误导信息的实例。除了教程中的错误,它实际上重复了我写的内容。所以你说我错了,同时又鼓吹这是一个你需要解决的矛盾。谢谢你的建议。我愿意阅读更多的资源。在Yocto的世界里,我发现命名被大量使用。但我不想严格地与命名交叉,而是把重点放在更重要的方面。