分类: LINUX
2006-05-28 15:38:33
Introduction
Welcome to the graphical world of Linux!
This is the home of the graphical boot process for the linux kernel although it is not yet a part of the official kernel. It is, however included in several major distributions. If your favorite linux doesn't include this patch in their kernel send them an email requesting it to be included!
Features:
Now Available for Linux Kernel 2.6.15!
There's a Bootsplash Mailinglist now. Go to the subscription page to join the discussion, get help or just for the latest news.
- boot messages are shown, as normal.
- boot messages are hidden and, in this example, a gradient filled progress bar is shown as well as TrueType text. Pressing F2 changes to Verbose mode.
Kernel stuff
ATTENTION!
Please read the following information very carefully. This kernel patch is free software; you may redistribute it under the terms of the GNU General Public License. This kernel patch comes with absolutely no warranty.
Requirements
* To use the Linux bootsplash screen, you have to recompile your kernel. The bootsplash patch is available for 2.4.18-2.4.22 and 2.6.0-test9. The patches should also apply to newer versions of the Linux kernel.
If you are not familiar with this procedure, please ask one of your geek friends or get hold of a distribution that already comes with the bootsplash screen.
* You need to have a working framebuffer device with 16bit colordepth, preferably vesafb (i.e. vga=0x317 for 1024x768)
* You need a bootsplash theme. Get one or .
* You need the splash utility, see .
If all requirements are met, lets get started:
Patching and Compiling the Kernel
First off, make sure, your kernel sources are installed in /usr/src/linux. Now download the version of the bootsplash patch that fits to your kernel.
Note: check for bootsplash patches not mentioned here. The patches might work well with other kernel versions. However, this is not tested.
yourbox:~ # cd /usr/src/linux yourbox:/usr/src/linux # patch -p1 < /path/to/bootsplash-3.0.7-2.4.20-vanilla.diff patching file drivers/char/console.c patching file drivers/char/keyboard.c patching file drivers/char/n_tty.c patching file drivers/video/Config.in patching file drivers/video/Makefile patching file drivers/video/fbcon-jpegdec.c patching file drivers/video/fbcon-jpegdec.h patching file drivers/video/fbcon-splash.c patching file drivers/video/fbcon-splash.h patching file drivers/video/fbcon-splash16.c patching file drivers/video/fbcon.c patching file include/video/fbcon.h patching file kernel/panic.c yourbox:/usr/src/linux # |
Now you have to change your kernel configuration, using make config, make menuconfig or make xconfig. Go to "Console drivers" -> "Frame-Buffer support" and select "VESA VGA graphics console" (or possibly another framebuffer driver, if one is available for your graphics hardware) and turn on "Use splash screen instead of boot logo". Also be sure to enable "Initial Ramdisk support" in "Block Devices" Save your new config and compile a new kernel. Copy the kernel to your /boot directory and make sure that you have a boot entry for it in your bootloader config.
Preparing the picture
As there are no filesystems accessible when the bootsplash is first shown, it can be attached to an initial ramdisk. If you dont have an initial ramdisk normally, just use an empty one.
Get the sources of the bootsplash utilities from:
# cd ~/splash # tar xvjf splashutils.tar.bz2 splashutils/ splashutils/Makefile splashutils/splash.c [..] splashutils/ChangeLog splashutils/COPYING # cd splashutils # make splash gcc -Os -Wall -c -o splash.o splash.c gcc -Os -Wall -o splash splash.o strip splash # cp splash /sbin/ # cd .. |
Next you need to attach the picture plus a header, defining text windows and such to the initrd (in the example, this is done for 1024x768. specify other resolutions, if available) :
/sbin/splash -s -f /etc/bootsplash/themes/yourtheme/config/bootsplash-1024x768.cfg >> /boot/initrd.splash
If you want to use more than one resolution for the bootsplash, call the above command several times, once for each resolution config file.
Finishing up
run lilo, if appropriate, and reboot your system. You should get the bootsplash screen.
During boot you will likely see the following in your messages:
vesafb: framebuffer at 0xf0000000, mapped to 0xdc816000, size 65472k vesafb: mode is 1024x768x16, linelength=2048, pages=41 vesafb: protected mode interface info at c000:5137 vesafb: scrolling: redraw vesafb: directcolor: size=0:5:6:5, shift=0:11:5:0 Looking for splash picture.... silenjpeg size 11165 bytes, found (1024x768, 4912 bytes, v3) Got silent jpeg. |
User space stuff
Download these utilities at
function rc_splash() { test "$SPLASH" != "no" && test "$_rc_splash" -eq 1 && /sbin/splash "$1" progress=$(( $progress + 1 )) } when adding the rc_splash call to your runlevel script scheduler, do it about like this: for i in $runrc/S${rex}*; do [..] # send information to bootsplash handler. rc_splash "$i start" [..] done |
[ .. ] fsck start:bootanim start fsck.mng fsck stop:bootanim stop [ .. ] |
# # initialize boosplash progressbar variables # runrc=/etc/init.d/rc${RUNLEVEL}.d prerc=/etc/init.d/rc${PREVLEVEL}.d SSC=($runrc/S*) case "$SSC" in *\*) sscripts=0 ;; *) sscripts=${#SSC[*]} esac export sscripts if test "$PREVLEVEL" != "N" ; then KSC=($prerc/K*) case "$KSC" in *\*) kscripts=0 ;; *) kscripts=${#KSC[*]} esac export kscripts fi if [ "$PREVLEVEL" == "N" -a "$RUNLEVEL" == "5" ]; then export progress=16 sscripts=$(( $sscripts+15 )) else export progress=0 fi |
Currently only SuSE Linux 8.2 supports all features of the bootsplash v3. Please note that SuSE Linux 8.2 holds the themes in /usr/share/splash/themes. It keeps a temporary copy of the currently used config files in /etc/bootsplash to be used when /usr is not available (i.e. on a different partition). Patches to runlevel scripts of all distributions are welcome and can be linked here, if desired. Contact