考虑一个具有以下约束的GNU/Linux发行版:所有软件都应该包含在initrd
映像中(这会导致其巨大的大小),并且内核包含尽可能少的静态编译模块。
考虑所描述的发行版的引导过程:引导加载程序(例如grub或isolinux)加载内核,然后内核加载initrd并将其提取到内存中。在提取过程中(在旧电脑上需要20-30秒),屏幕上什么都没有发生。
我想知道,有没有现成的解决方案可以在initrd提取过程中显示启动屏幕?如果没有,你能对以下想法发表评论吗:
-
在提取initrd时,将一个例如600x480x8位的映像静态编译到内核中,并以某种方式将其刷新到帧缓冲区中。
-
做同样的事情,但强制加载特定的视频驱动程序(例如VESA)并侵入其代码,而不是内核的帧缓冲区。
谢谢。
也许您可以简化它:创建2个initrd文件。第一个可以很小。然后它可以调用Plymouth来显示一个启动屏幕,同时提取真实的initrd。
如果你认为内核加载initrd映像,那你就错了。这是由引导加载程序完成的。如果你想显示一个启动屏幕,你必须告诉你的引导加载程序显示一个图像。如何做到这一点取决于您的引导加载程序。
您可以尝试创建一个普通的.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
然后编译、安装、更新引导程序,并检查它是否适合您。