网络上关于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 ---> 对于2.6.x内核: |
第四步
| 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 ../../ |
| # mkdir /etc/bootsplash # mkdir /etc/bootsplash/themes # cp -a NewLinux /etc/bootsplash/themes/ |
我们来看一个完整的主题配置文件,以800x600分辨率为例,文件名为bootsplash-800x600.cfg,可以用vi进行编辑,####开头的为笔者加的注释。
|
[/code:1:7b9eb010fc] # config file version # should the picture be displayed? # fgcolor is the text forground color. # (tx, ty) are the (x, y) coordinates of the text window in pixels. ####predefine area for the text info # name of the picture file (full path recommended) progress_enable=1 # background # black border overpaintok=1 |
我们可以修改这个文件中的一些选项来得到自己想要的效果。具体选项的含义可以查看:
| http://www.bootsplash.org/config.html # name of the picture file (full path recommended) jpeg=/etc/bootsplash/themes/NewLinux/images/bootsplash-800x600.jpg silentjpeg=/etc/bootsplash/themes/NewLinux/images/silent-800x600.jpg |
这两行指定了作为启动动画的图片和控制台背景的图片的名字和绝对路径,我们只需把自己制作的图片命名为这里指定的图片,并且放在这个路径下,就可以应用自己的主题了。(想想看,制作themes是相当简单的。不明白为什么网上没有redhat linux的主题图片。)
我修改了/etc/bootsplash/themes/NewLinux/config/bootsplash-800x600.cfg文件,定义显示文本信息区域。###部分是我添加的内容。
[code:1:7b9eb010fc]
如果你只想看到一副静态的画面,跳过第七步,看第八步,不用修改脚本文件。
第七步> 将脚本splash.sh拷入/etc/rc.d/下,并修改splash.sh和rc,建议在修改rc脚本文件前进行备份(cp rc rc.bak)
# cp bootsplash-3.0.7/Scripts/splash.sh/etc/rc.d
下面来看完整的splash.sh脚本文件,要想这个脚本起作用,必须修改rc脚本,通过rc脚本调用splash.sh脚本,需要赋予splash.sh脚本可执行权限。需要一些shell script的知识。网上很多,google吧。
我现在的/etc/rc.d/splash.sh脚本,删除了原来放在这个脚本中的绘制进度条部分(调试不成功)和播放动画部分(还没有实验),以及不适用于red hat linux的一些命令。这个脚本现在只打印类似“booting the system"和"shutting down the system"的信息和实现关机时的silent mode。
|
#!/bin/bash _procsplash="`cat /proc/splash 2>/dev/null`" ###give the variable "THEME" the name of the directory which the current test ! -d "/etc/bootsplash/themes/$THEME" && exit 0 # assertions ####"Yast" is a utilies for SuSE Linux,no for RedHat Linux # We chose verbose in grub if [ "$PREVLEVEL" == "3" -o "$PREVLEVEL" == "5" ]; then # acquire data test -f "/etc/bootsplash/themes/$THEME/config/bootsplash-`fbresolution`.cfg" && \ # ###print infomation at the area predifined by config file "bootsplash-800x600.cfg" ###is the area for infomation defined? yes ,print info, no,run on [/code:1:7b9eb010fc] |
下面来看rc脚本(此为系统脚本,决定runlevel和kill or start services,修改前要备份一下,到时要改回来只要覆盖一下就好了cp rc.bak rc)。下面是我现在的/etc/rc.d/rc脚本,定义一个函数,for循环中调用它,以绘制启动进度。重新写了几行代码,绘制进度条。以运行级下的服务总个数和已经启动的服务个数之比作为progress bar的进度,这样进度条显得均匀了一些。
现在这个可以实现以下功能,开机silent模式,有开始画面,有进度条,进度条下有booting system 提示。关机时切换到silent模式,有画面。提示shutting down the system.
|
[code:1:7b9eb010fc] # check a file to be a correct runlevel script ###########################Bootsplash start############## # Reject backup files and files generated by rpm. # Now find out what the current and what the previous runlevel are. . /etc/init.d/functions # See if we want to be in user confirmation mode # Get first argument. Set new runlevel to this argument. ####################Bootsplash start############### # Is there an rc directory for this new runlevel? # First, run the KILL scripts. # Check if the subsystem is already up. # Bring the subsystem down. # Now run the START scripts. # Check if the subsystem is already up. # Bring the subsystem up. |
第八步 修改(bootloader) grub(或者lilo)。我用的是grub,硬盘是ide的。只列出需要修改的部分。我的硬盘分区swap,boot,/。
| title Red Hat Linux (2.4.20+bootsplash) root (hd0,0) kernel /bzImage-2.4.20 ro root=/dev/hda3 vga=788 splash=silent initrd /initrd-splash.img title Red Hat Linux (2.4.23) root (hd0,0) kernel /vmlinuz-2.4.20-8 ro root=LABEL=/ initrd /initrd-2.4.20-8.img |
788为800x600模式,791为1024x768模式。这里的模式选择要与图片的大小一致。
到这里就可以重新启动了。呵呵,大功告成。赶紧实验一下,享受自己的全画面Linux启动吧。


