在加载巨大的initrd时显示启动画面

7
考虑一个具有以下限制的实时GNU/Linux发行版:所有软件都应包含在一个initrd映像中(这导致其巨大的大小),并且内核应尽可能少地包含静态编译模块。
考虑所描述的发行版的启动过程:引导加载程序(例如grub或isolinux)加载内核,然后将initrd加载并提取到内存中。在提取期间(在旧计算机上需要20-30秒),屏幕上什么也不会显示。
我想知道,在initrd提取过程中是否有现成的解决方案可以显示闪屏?如果没有,您能否请评论以下想法:
1. 在内核中静态编译一个600x480x8位图像,并在提取initrd时以某种方式将其刷新到帧缓冲区。 2. 做同样的事情,但强制加载特定的视频驱动程序(例如VESA)并入侵其代码,而不是内核的帧缓冲区。
谢谢。

1
+1 我想了解这个。 - Memos Electron
我认为静态选项是最好的选择,而不需要再增加几秒钟的启动时间。 - Linuxios
3个回答

2
也许您可以简化一下:创建2个initrd文件。第一个可以很小。然后它可以调用Plymouth来显示一个闪屏,同时提取真正的initrd。

1
你可以尝试创建一个简单的 .ppm 文件并使用 LZMA 压缩作为内核压缩模式。这可以通过使用引导标志选项来完成,但不确定是否适用于您。
首先,您需要在内核中启用启动标志和标准 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 

然后只需编译、安装、更新您的引导程序,检查它是否适用于您。

谢谢@blu3g3!绝对值得一试。 - Zaur Nasibov

1
如果你认为内核加载initrd镜像,那么你是错误的。它是由引导加载程序完成的。如果你想显示启动画面,你必须告诉你的引导加载程序显示一张图片。如何做这取决于你的引导加载程序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接