在加载巨大的initrd时显示启动图像

时间:2012-11-19 09:14:33

标签: linux kernel splash-screen initrd

考虑一个带有以下约束的实时GNU / Linux发行版:所有软件都应该包含在initrd图像中(这导致其巨大的大小)并且内核包含尽可能少的静态编译模块。

考虑所描述的发行版的启动过程:引导加载程序(例如grub或isolinux)加载内核,然后内核将initrd加载并提取到内存中。在提取期间(在旧计算机上花费20-30秒)屏幕上没有任何反应。

我想知道,在initrd提取过程中是否有现成的解决方案显示启动画面?如果没有,请您评论以下想法:

  1. 静态编译例如将600x480x8bit图像放入内核,并在提取initrd时以某种方式将其刷新到帧缓冲区中。

  2. 执行相同操作,但强制加载特定的视频驱动程序(例如VESA)并破解其代码,而不是内核的帧缓冲区。

  3. 谢谢。

3 个答案:

答案 0 :(得分:1)

如果您认为内核加载了initrd映像,那就错了。它由引导加载程序完成。如果要显示启动画面,则必须告诉引导加载程序显示图像。如何执行此操作取决于您的引导加载程序。

答案 1 :(得分:1)

您可以尝试创建一个普通的.ppm文件,并在内核压缩模式下使用LZMA压缩。这可以通过使用引导徽标选项来完成,但不确定它是否适合您。

首先,您需要在内核中为Bootup徽标和标准224色Linux徽标启用支持:

设备驱动程序 - >图形支持 - >

Support for frame buffer devices
VESA VGA graphics support
Video mode selection support
Framebuffer Console support
Select compiled-in fonts
VGA 8×16 font
Bootup logo
Standard 224-color Linux log

其次,假设您有一个名为screen.png的.png图像,则需要生成适当的.ppm文件: pngtopnm screen.png | ppmquant -fs 223 | pnmtoplainpnm> /usr/src/linux/drivers/video/logo/logo_linux_clut224.ppm

然后只需编译,安装,更新你的bootloader并检查它是否适合你。

答案 2 :(得分:1)

也许你可以更简单:创建2个initrd文件。第一个可能很小。然后它可以调用Plymouth来显示启动屏幕,同时提取真正的initrd。