Linux的各种发行版在启动时基本上都有两种模式:silent mode和verbose mode。verbose模式下会打印极为详尽的启动信息,比如挂载文件系统,加载光驱,激活网络服务等等,而silent模式则屏蔽掉这些信息。bootsplash工具可以将一张图片放在silent模式下的虚拟控制台上,从而使Linux用户看到一个全画面的启动过程。另外一个工具是gensplash,比bootsplash要稍微复杂一些,不过功能更为强大,设计也更为合理——它将一些非必要的元素从kernel space挪出来,放在user space来做。
网络上关于bootsplash(启动动画)的使用基本上是基于Linux的SuSe发行版进行讨论的——开发这组工具的作者说他们的工作平台是SuSe。gensplash则是基于Linux的Gentoo发行版进行讨论的。当然这些两组工具都可以通过适当的改动应用于Linux的其它发行版。
由于我的工作平台是red hat linux,此篇文章就讨论怎样在RH linux下使用bootsplash。下面先给出相关的一些网站:
http://www.bootsplash.org (官方网站,基本使用及相关原理)
http://www.bootsplash.com (详尽的使用方法,基于SuSe发行版)
http://www.bootsplash.de (bootsplash的爱好者组织的网站,资料齐全)
http://www.kernel.org (Linux内核下载)
本文严重参考http://www.linuxhall.org/modules.php?name=News&file=article&sid=201,哈哈,特此说明。
现在我们进入正题。
http://www.bootsplash.org网站上说,bootsplash的内核补丁针对2.4.18--2.4.22和2.6.0-test9,这个消息很旧了,可以到http://www.bootsplash.de站点查看bootsplash所提供的各个版本的内核补丁,然后确定你所用的Linux内核版本,选择一个补丁下载。
我的内核是2.4.20-8,下载补丁bootsplash-3.0.7-2.4.20.vanilla.diff。补丁中的3.0.7是bootsplash工具的版本号,我们下载bootsplash-3.0.7.tar.bz2,再下载所要用的主题Theme-NewLinux.tar.bz2,关于材料的准备就完成了。这些都可以在上面的提及的网站上找到。如果你的内核没有相应补丁,那么可以选择一个版本的内核源代码,打上补丁后,编译一个新的内核。
如果没有编译过内核,可以到网上查找相关资料,对照着练习一下。当然,我们需要root的权限。
第一步 修改/usr/include目录下的三个符号链接:asm,scsi,linux(mv asm asm.bak,mv scsi scsi.bak,mv linux linux.bak),如果没有,则要新建。在编译内核时,用到这些链接所指向的一些头文件。我在/usr/src目录下建了一个名为linux的链接指向同一层的内核源代码目录linux-2.4.20-8(这样以后再编译不同版本内核时,只需修改/usr/src目录下的linux符号链接就可以了)。(命令ln -s linux-2.4.20-8 linux),然后进入/usr/include目录,分别执行ln -s /usr/src/linux/include/asm-i386 asm;ln -s /usr/src/linux/include/linux linux;ln -s /usr/src/linux/include/scsi scsi。
第二步 打补丁,假设补丁在/usr/src/linux目录下(不在的话加上路径即可)。patch -p1<bootsplash-3.0.7-2.4.20.vanilla.diff
第三步 设定核心:make menuconfig。确定下列选项被编译进内核而不是被编译成模块。
对于2.4.x内核:
Code maturity level options --->
[*] Prompt for development and/or incomplete code/drivers
Processor type and features --->
[*] MTRR (Memory Type Range Register) support
Block Devices ->
[*] Loopback device support
[*] RAM disk support
(4096) Default RAM disk size
[*] Initial RAM disk (initrd) support
Console Drivers ->
[*] VGA text console
[*] Video mode selection support
Console Drivers -> Frame-buffer support ->
[*] Support for frame buffer devices
[*] VESA VGA graphics console
[*] Use splash screen instead of boot logo
对于2.6.x内核:
Code maturity level options --->
[*] Prompt for development and/or incomplete code/drivers
Processor type and features --->
[*] MTRR (Memory Type Range Register) support
Device Drivers --->
Block devices --->
<*> Loopback device support
<*> RAM disk support
(4096) Default RAM disk size
[*] Initial RAM disk (initrd) support
Graphics support --->
[*] Support for frame buffer devices
[*] VESA VGA graphics support
Console display driver support --->
[*] Video mode selection support
<*> Framebuffer Console support
Bootsplash configuration --->
[*] Bootup splash screen
第四步
a> make mkproper 清除旧的设定
b> make dep 产生依赖
c> make bzImage 编译内核
d> make modules modules_install 编译模块
e> cp /usr/src/linux/arch/i386/boot/bzImage /boot/bzImage-2.4.20
第五步 安装bootsplash的工具软件和主题图片
# tar jxvf /patch/bootsplash-3.0.7.tar.bz2
# tar jxvf /patch/Theme-NewLinux.tar.bz2
# cd bootsplash-3.0.7/Utilities
# make all
# cp fbmngplay fbresolution fbtruetype splash /sbin
# cd ../../
下面这几步必须要做,不然在用splash命令时就会出现类似下面的错误:splash:/etc/bootsplash/themes/Linux/images/silent-800x600.jpg?http://www.xvna.com不存在。这个其实是由于主题的配置文件中做了绝对路径设定。
# mkdir /etc/bootsplash
# mkdir /etc/bootsplash/themes
# cp -a NewLinux /etc/bootsplash/themes/
我们来看一个完整的主题配置文件,以800x600分辨率为例,文件名为bootsplash-800x600.cfg,可以用vi进行编辑,####开头的为笔者加的注释。
[/code:1:7b9eb010fc]
[code:1:7b9eb010fc]
# This is the configuration file for the 800x600 bootsplash picture.
#
# This file is necessary to specify the coordinates of the text box on
# the splash screen.
#
# Comments are welcome by
[email protected] # config file version
version=3
# should the picture be displayed?
state=1
# fgcolor is the text forground color.
# bgcolor is the text background (i.e. transparent) color.
fgcolor=7
bgcolor=0
# (tx, ty) are the (x, y) coordinates of the text window in pixels.
# tw/th is the width/height of the text window in pixels.
tx=0
ty=0
tw=800
th=600
####predefine area for the text info
text_x=260
text_y=545
text_size=20
text_color=0xeef4ff
####
# name of the picture file (full path recommended)
jpeg=/etc/bootsplash/themes/NewLinux/images/bootsplash-800x600.jpg?http://www.xvna.com
silentjpeg=/etc/bootsplash/themes/NewLinux/images/silent-800x600.jpg?http://www.xvna.com
progress_enable=1
# background
box silent noover 160 520 642 538 #00000050
box silent inter 160 520 160 537 #b77200 #b77200 #f2b700 #f2b700
box silent 160 520 642 538 #b77200 #b77200 #f2b700 #f2b700
# black border
box silent 160 520 642 520 #b5b5b5
box silent 160 538 642 538 #b5b5b5
box silent 160 520 160 538 #b5b5b5
box silent 642 520 642 538 #b5b5b5
overpaintok=1
[/code:1:7b9eb010fc]
我们可以修改这个文件中的一些选项来得到自己想要的效果。具体选项的含义可以查看:
http://www.bootsplash.org/config.html
# name of the picture file (full path recommended)
jpeg=/etc/bootsplash/themes/NewLinux/images/bootsplash-800x600.jpg?http://www.xvna.com
silentjpeg=/etc/bootsplash/themes/NewLinux/images/silent-800x600.jpg?http://www.xvna.com
这两行指定了作为启动动画的图片和控制台背景的图片的名字和绝对路径,我们只需把自己制作的图片命名为这里指定的图片,并且放在这个路径下,就可以应用自己的主题了。(想想看,制作themes是相当简单的。不明白为什么网上没有redhat linux的主题图片。)
我修改了/etc/bootsplash/themes/NewLinux/config/bootsplash-800x600.cfg文件,定义显示文本信息区域。###部分是我添加的内容。
[code:1:7b9eb010fc]
第六步 将图片与 init Ram Disk 绑定 splash -s -f /etc/bootsplash/themes/Linux/config/bootsplash-800x600.cfg > /boot/initrd-splash.img 对于ide硬盘,我们可以直接用splash工具生成initrd*.img文件,这个文件对ide硬盘来说没什么用,我们在这里只是通过它来使用启动画面。
如果你只想看到一副静态的画面,跳过第七步,看第八步,不用修改脚本文件。
第七步> 将脚本