Table of Contents

F.A.Q.


How does Splashy works?

Read this from: How it works

What do I need to run Splashy (aka Requisites)

First of all, you need to have Splashy installed. Either do this through some package for your distro or follow this link.

Also make sure you are running a 2.6 (or newer) kernel.

Your kernel must have framebuffer support and a valid framebuffer driver.

Both your BIOS and your graphics card should support VESA 2.0. If it doesn't, you will not be able to use vesafb driver. In such case, read this.

What Operating Systems/Linux distributions are supported?

Official support from the Splashy team is available for the following Linux distributions:

Other Linux distributions known to support or include Splashy in some way include:

Other POSIX OS's known to support Splashy:

Does Splashy work with my distro/OS?

Although Splashy is developed on Debian (Ubuntu and plain vanilla Sid), Splashy was conceived to work with any POSIX based system for as long as:

  1. libc6, glib2.x, directfb (our main libraries) have been ported over
  2. There is a mean for running startup scripts (i.e. SysV init)
  3. Your kernel supports framebuffers (Linux 2.6 kernels and up1))

Essentially this means that all modern Linux distributions work fine with Splashy, as well as the *BSD variants.

There is NO need to patch the kernel or any other system binary.

I don't see any image at boot time

Or you get an error like ERROR: Couldn't splashy_start_splashy(). Error -2

Make sure your bootloader config file has the vga=791 splash parameter. Values bigger than 792 might not be supported by VESA; make sure that your resolution is within the allowed range.

For GRuB users this is done through the /boot/grub/menu.lst file, in the lines nonaltoptions, kopt or kernel (for the kernel you are running), adding vga=791 splash.

title		Ubuntu 8.04.1, kernel 2.6.24-21-generic
root		(hd0,0)
kernel		/vmlinuz-2.6.24-21-generic root=/dev/mapper/bootdisk-root00 ro quiet vga=791 splash
initrd		/initrd.img-2.6.24-21-generic
quiet

For LiLO users just add vga=791 splash in your kernel section or in the common parameters section (do not put in inside append=) in your /etc/lilo.conf file.

Read /usr/share/doc/splashy/README for more information.

How can I use another fb driver other than VESA (or, My BIOS doesn't support vesafb)

Instead of vga=0×314 use video=MYFB (where MYFB can be any of your kernel's framebuffer drivers) in your bootloader's configuration file.

Note: In lilo, vga= is a separate configuration line. In this case, you'll have to comment out this line (or remove it) and append the video= parameter in the append= line (use spaces to separate various append values).

If you compiled you framebuffer driver(s) as module(s) you can see its/their name by doing

 ls /lib/modules/`uname -r`/kernel/drivers/video/*fb.ko /lib/modules/`uname -r`/kernel/drivers/video/*/*fb.ko

Obviously, you must only take the filename (not the directory path) and remove the .ko suffix.

You might also want to set your screen resolution, colour depth and other graphical settings.

To do so you will have to add some parameters to the video= argument after the frame buffer driver, using a colon (:) as a separator:

 video=<fbdriver>:<xres>x<yres>[-<bpp>][@refresh]

Note: Not all framebuffer drivers support this.

See Documentation/fb/modedb.txt in the kernel sources for more information.

But I don't use Grub or Lilo

Splashy doesn't depend on any kernel patch or any boot loader. All you need is to tell the kernel to load a virtual-frame-buffer (fb) as soon as possible (before Splashy starts). The best way to do this is to edit your bootloader's config file as stated previously.

I cannot use /dev/fb0

Splashy will use /dev/fb0 to print to the framebuffer if that device is available. But you can use any other framebuffer device by setting the path in the FRAMEBUFFER environment variable. For example:

 FRAMEBUFFER=/dev/fb1

Splashy just doesn't work!

The easiest way to handle this si tring to reinstall it.

In Debian:

 apt-get --purge remove splashy usplash
 update-rc.d -f splashy remove
 # if you want to be super kosher, then do these as well:
 rm -f /etc/init.d/splashy* /etc/init.d/usplash*
 rm -f /etc/rcS.d/S*splashy* /etc/default/splashy
 rm -fr /etc/splashy

GRuB users might need to edit your /boot/grub/menu.lst like:

 #kopt= vga=0x314 splash

And then run:

 update-grub

After that, reboot and it should work fine.

During boot I get the error: vesafb: probe failed with error -6 (or something similar)

This problem occurs when the the fb driver (usually vesafb) which is loaded during boot can't work together with your video-card's framebuffer. You can check this problem by doing:

 dmesg | grep fb

If the error shows up, you know what your problem is.

To solve the problem you will need to do the following: Find out what the fb driver for your video card is. Google can be great help, but sometimes it's quite obvious. You can look in the video drivers directory (do: ls /lib/modules/`uname -r`/kernel/drivers/video ) and guess which driver should work, then verify this by searching or asking someone who might know.

List the contents of the initrd directory (do: ls /lib/modules/`uname -r`/initrd ). Look for the module which was causing the error (usually vesafb. The extension of the file can be .ko or .o depending on if you are using a 2.6 kernel or an older one respectively). Now you will need to copy the correct driver to the initrd directory and remove the faulty one. Make sure that you copy the driver you need. As an example:

 cp /lib/modules/`uname -r`/kernel/drivers/video/aty/atyfb.ko /lib/modules/`uname -r`/initrd/atyfb.ko
 rm /lib/modules/`uname -r`/initrd/vesafb.ko

Now the only thing we have to do is to make the initrd image (which is started at boot). You have to use the correct image, so check your bootloader configuration (/boot/grub/menu.lst for Grub), and look for the line which mentions initrd (Note: If you have more boot options, because you have more kernels installed for instance, you must look for the initrd line under the boot option which you are currently using). The 2.6.8.1-3-386 kernel, for example, usually uses the file initrd.img-2.6.8.1-3-386 which is located in the /boot directory. In order to make the initrd image you will have to do:

 mkinitrd -o /boot/initrd.img-2.6.8.1-3-386

You must replace /boot/initrd.img-2.6.8.1-3-386 with the correct initrd file. When mkinitrd is done, you can reboot. Splashy should work now.

At about 70-80% of booting process Splashy goes to verbose mode

Are you getting this error message?

t_kernel_font: Invalid Argument

In this case it's a bug related with the /etc/init.d/console-screen.sh file that does not set the font for framebuffer properly. This bug is unsolved. The work around is to edit the /etc/splashy/config.xml file and set autoverboseonerror to ”no” (without the quotes).

After installing Splashy, the boot-up text has shrunk. How to bring it back to original size?

This means that you have correctly setup your kernel framebuffer. In other words, it is not that the tezt is smaller, it is that the screen is wider! You have set a higher resolution to your console.

If you don't want to see Splashy during boot any more and you want to see your console messages the way they were, simply remove it and restore (or delete) your previous vga= setting from your kernel parameters. On Debian systems:

Splashy uses the wrong resolution at boot, how do I fix this?

Assuming that you are using the right vga=XXX parameter to your kernel, you might still have to tell your libdirectfb to pick the right resolution and refresh rate for you. When Splashy asks DirectFB to select a video mode by width x height, DirectFB chooses the first one listed in /etc/fb.modes that matches the desired size. With the default /etc/fb.modes shipped in Debian, the first 1280×1024 mode is “1280×1024, 43 Hz, Interlaced”, which your monitor might not handle but your video card might support it. Try moving the mode that you want to the top of /etc/fb.modes (say 1280×1024 @ 60Hz).

Splashy does not run under upstart in Ubuntu (Edgy)

We are aware of this and we opened a bug in Ubuntu's bug tracker:

https://launchpad.net/distros/ubuntu/+source/upstart/+bug/76304

The workaround for now is to simply apply this to /etc/event.d/rcS:

  --- /etc/event.d/rcS 2006-09-13 18:47:27.000000000 -0400
  +++ rcS 2006-12-18 13:12:42.000000000 -0500
  @@ -14,6 +14,12 @@
   # information (we enter rc1 not rcS for maintenance). Run /etc/init.d/rc
   # without information so that it defaults to previous=N runlevel=S.
   script
  - runlevel --set S >/dev/null || true
  + set $(runlevel --set S || true)
  + if [ "$1" != "unknown" ]; then
  + PREVLEVEL=$1
  + RUNLEVEL=$2
  + export PREVLEVEL RUNLEVEL
  + fi
  +
          exec /etc/init.d/rcS
   end script

When running from initramfs Splashy takes 100% of the CPU and boot process stops (using init only. not upstart)

[Update: 2008-05-26] A newer patch was applied upstream. See Directfb Git repository.

Splashy just entered Lenny (Debian testing) and the version of directfb of this release does not have this patch. Please do the following to apply this patch to it:

cd /usr/src
apt-get source libdirectfb-dev
cd directfb*
# edit inputdrivers/keyboard/keyboard.c as the patch says
apt-get install build-essentials devscripts # optional
debuild -us -uc
dpkg -i ../libdirectfb*.deb

This2) is a very well known issue. Thanks to the guys are RPath Linux, we have a work around that works3). This happens because of how directfb (version 1.1 and below) binds to ttyN < 7 during boot. Forcing directfb to use tty8 fixes the issue for some distributions. A better fix is to add usleep(2000) to the keyboard even thread in directfb:

only in patch2:
unchanged:
--- directfb-0.9.25.1.orig/inputdrivers/keyboard/keyboard.c
+++ directfb-0.9.25.1/inputdrivers/keyboard/keyboard.c
@@ -279,6 +279,8 @@
 
              keyboard_set_lights( data, evt.locks );
         }
+          if (readlen <= 0)
+                usleep(2000);
    }

    if (readlen <= 0 && errno != EINTR)

How do I examine the content of /boot/initrd.img

Say that you want to make sure that /sbin/splashy is in your initrd image file. You can do the following to examine its contents:

mkdir -p /tmp/initrd
cd /tmp/initrd
cat /boot/initrd.img | gzip -d | cpio -i

Then read the /init script (or /linuxrc) to see how the boot process works and look for /sbin/splashy (or /usr/sbin/splashy) with:

find . -name splashy

Why does Splashy time out during boot?

Splashy has a safety 120 seconds timeout period if it does not receive update commands from splashy_update. The reason why this is happening varies from distribution to distribution, here are possible causes for this to happen on Debian related distributions:

#!/bin/sh
pidof splashy > /dev/null && touch /lib/init/rw/splashy/splashy-stopped-foo && exit 0
# where "foo" is the name of the script that Splashy needs to be stopped.

Here are examples of how to stop two known scripts in Debian that make this situation happen:

/etc/init.d/keymap.sh
#!/bin/sh
pidof splashy > /dev/null && touch
/lib/init/rw/splashy/splashy-stopped-keymap && exit 0
/etc/init.d/console-screen.sh
#!/bin/sh
pidof splashy > /dev/null && touch
/lib/init/rw/splashy/splashy-stopped-console-screen && exit 0

Note that Splashy LSB script will restart these two scripts if the /lib/init/rw/splashy/ files exists. See /etc/lsb-base-loggin.sh.

Go back to main page

1) directfb doesn't compile against 2.4 kernels. See bug# 302392