HOWTO gensplash
From Gentoo Linux Wiki
| Installation • Kernel & Hardware • Networks • Portage • Software • System • X Server • Gaming • Non-x86 • Emulators • Misc |
[edit] Introduction
This document is a bit out of date. Please see Spock's uvesafb documentation before you read the rest of this. http://dev.gentoo.org/~spock/projects/uvesafb/
First let us hear a round of applause for Gentoo developer Spock for developing fbsplash and splashutils, uvesafb and fbcondecor, (and formerly, gensplash and vesafb-tng). These projects have aimed to create a set of tools which enrich the Linux boot process by displaying messages, animations, progress bars, etc.
[edit] Components
Boot splash screens and console graphics depend on several kernel and userland components being set up to work properly with each other. An overview of the major components follows.
[edit] Framebuffer Driver
Linux framebuffer drivers are kernel drivers that allow application software to access and control graphics hardware. Framebuffer drivers are required for any type of console graphics support. Framebuffer drivers can also be used for other things, such as running an unaccelerated X server (through X's fbdev driver), or playing video in media players with framebuffer support. Framebuffer support is enabled in the Linux kernel through the CONFIG_FB option (Device Drivers -> Graphics support -> Support for frame buffer devices) There are many framebuffer devices to choose from. Some common ones are:
- vesafb - a generic driver that can work with most video hardware. Some disadvantages are that it does not provide accelerated graphics, and has an awkward syntax for setting the video mode (e.g. "vga=791"). Instructions for setting up vesafb can be found at HOWTO_Framebuffer_Support
- uvesafb - a newer (>=2.6.23) generic, non-accelerated driver that supports additional features such as custom resolutions. Unlike other drivers, it requires a userspace daemon called v86d to run (provided in the sys-apps/v86d package)
- vesafb-tng - a deprecated framebuffer driver that was the predecessor for uvesafb. It worked only on x86 and was not part of official Linux kernels, though it was included with gentoo kernel sources prior to version 2.6.23.
- rivafb - an accelerated driver for old Nvidia Chipsets, not compatible with nVidia's binary drivers for X
- nVidiafb - an accelerated driver for newer nVidia Chipsets, not compatible with nVidia's binary drivers for X
- radeonfb - an accelerated driver for ATI Chipsets
- intelfb - an accelerated driver for Intel chipsets
The boot splash utilities should work with any of these frame buffer devices and any others that provide 8/15/16/24/32bpp directcolor/pseudocolor modes.
[edit] Framebuffer Console Driver (fbcon)
The framebuffer console is a text console driver which runs on top of the framebuffer device, providing support for different fonts, colors, etc. It is enabled with the CONFIG_FRAMEBUFFER_CONSOLE kernel option (Device Drivers -> Graphics support -> Console display driver support -> Framebuffer Console support), and provides an alternative to the standard VGA text console. It must be enabled for boot splash graphics to work.
[edit] Framebuffer Console Decorations Patch (fbcondecor)
Fbcondecor is a kernel patch which allows the display of different background pictures on framebuffer consoles. The patch is included with gentoo kernel sources, and enabled though the CONFIG_FB_CON_DECOR option (Device Drivers -> Graphics support -> Console display driver support -> Support for the Framebuffer Console Decorations). Fbcondecor requires a userspace component called fbcondecor_helper to be installed in order to work. That program is included in the media-gfx/splashutils package when it is built with the fbcondecor USE flag. It is not necessary to enable fbcondecor to have a boot splash screen, but enabling it provides additional functionality.
- Historical note: The fbcondecor patch used to be known as the fbsplash patch and was enabled through the CONFIG_FB_SPLASH option (Device Drivers -> Graphics support -> Support for the framebuffer splash). Before that, this functionality was part of the bootsplash kernel patch.
[edit] Framebuffer Splash Utilities (fbsplash)
Fbsplash is set of userspace utilities (splash_util, splash_manager, etc) that control the framebuffer console and integrate with the system startup procedure to draw boot splash screens. Fbsplash scripts and utilities for gentoo are distributed as part of the media-gfx/splashutils package.
- Historical note: The userspace utilities that make up fbsplash used to be referred to as gensplash utilities, before the gensplash name was abandoned to reduce confusion. Before that, the name fbsplash referred to the kernel patch which is now known as fbcondecor. Before gensplash, similar functionality was provided by the bootsplash kernel patch.
[edit] Installation
In the example below, the vesafb-tng frame buffer device is used. If you have problems, such as your splash screen not showing up, use vesafb instead.
BIG NOTE: If you are using a kernel >= 2.6.23 you will not find vesafb-tng. Spock has stopped development on vesafb-tng, and now works on uvesafb, which is located at: http://dev.gentoo.org/~spock/projects/uvesafb/ uvesafb is included in gentoo-sources >= 2.6.23 and from 2.6.24 onwards also in the mainline kernel. Follow the instructions located on that website
[edit] Configuring and Compiling the Kernel
In summary, this is what we are going to do.
- Emerge splashutils and themes if you like.
- Confirm /usr/src/linux points to your gentoo-sources.
- Configure your kernel, be it genkernel or otherwise.
[edit] Emerging splashutils & themes:
emerge -av splashutils splash-themes-gentoo splash-themes-livecd
echo "media-gfx/splashutils fbcondecor" >> /etc/portage/package.use
Now see if your kernel points to gentoo-sources:
ls -FFg /usr/src/linux
If gentoo-sources is in the name, then you have the right build.
[edit] Configure the Kernel
The genkernel come pretty much configured but it probably wouldn't hurt to look at it.
[edit] Genkernel users
genkernel --menuconfig kernel
When Genkernel has finished, skip down to Making An initramfs Image.
[edit] Non-genkernel users
This section will show you how to configure your kernel. You can skip that step if you already configured a framebuffer driver besides vesa-tng.
[edit] Required Kernel Options
Required for Non-genkernel & Genkernel users alike:
| Linux Kernel Configuration: Graphic Support |
Device Drivers >
Graphics support: >
<*> Support for frame buffer devices --->
[ ] Enable Tile Blitting Support
<*> VESA VGA graphics support
VESA driver type (vesafb-tng) --->
(HRESxVRES@FREQ) VESA default mode
< > nVidia Framebuffer Support
< > nVidia Riva support
< > Matrox acceleration
Console display driver support --->
[*] Video mode selection support
<*> Framebuffer Console support
[*] Support for the Framebuffer Console Decorations
|
(Note: fbsplash used to be configured by the option "Support for the framebuffer splash")
Make sure you didn't select tileblitting support.
If you are using an AMD64 processor, you should select vesafb rather than vesafb-tng. Also note for x86 and AMD64 processors, the in-kernel nvidia framebuffer driver conflicts with the binary driver provided by nVidia. If you will be compiling your kernel for these CPUs, you must completely remove support for the in-kernel driver as shown above. See http://www.gentoo.org/doc/en/nvidia-guide.xml for Details.
Be sure to set your personal resolution@freq (e.g. 1024x768@72) the default is 640x480@60. Now you'll probably want to have both the initial ramdisk (initrd which stores the image) to along with its filesystem loaded at boot. Genkernel users must select this option.
| Linux Kernel Configuration: initrd |
Device Drivers
Block devices:
<*> RAM disk support
(4096) Default RAM disk size (kbytes) (NEW)
[*] Initial RAM disk (initrd) support
|
As of kernel 2.6.21 initramfs is located in General Setup:
| Linux Kernel Configuration: initramfs |
General Setup >
[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
|
If you want to get the F2 key working to switch to verbose and silent, you need the option CONFIG_INPUT_EVDEV =y set. It is under
| Linux Kernel Configuration: |
Device Drivers
Input Device Support
<*>Event Interface
|
Note: F2 does not work with USB keyboards when media-gfx/splashutils build earlier to version 1.5.3.3 is installed
(see http://bugs.gentoo.org/show_bug.cgi?id=200217)
[edit] Finishing the Kernel
After you have configured your kernel, you must now compile it . See HOWTO Compile a Kernel Manually.
If more help is needed, the Gentoo Linux Kernel Upgrade Guide is an excellent resource.
Notes:
- The livecd-2006.1 theme uses PNG images instead of JPEGs. If you intend to use this theme, make sure you add png to your USE flags before running the above emerge.
- If the splash theme you want to use contains text output (like livecd-2006.1) you will need to emerge splashutils with the truetype USE flag.
- Some users might have some trouble installing splashutils before configuring the kernel. In this case, simply emerge splashutils after the kernel is configured.
- For tuxonice-sources users
- re-emerge tuxonice-userui with fbsplash flag enabled
- create a link ln -sfn /etc/splash/<your-theme> /etc/splash/suspend2
- add one of the following line to /etc/hibernate/suspend2.conf:
- "ProcSetting userui_program /sbin/tuxoniceui_fbsplash"
- suspend2ui_fbsplash for deprecated suspend2-sources
- Enable "BootSplash on" and choose a theme in /etc/hibernate/common.conf file.
- When using kernel 2.6.16 some users might have trouble emerging splashutils with an error in input.h. This is a known bug with the kernel header.
[edit] Making An initramfs Image
If you'd like to get your splash background to appear earlier in your bootup process you'll have to use an initramfs. Otherwise, you can skip to the section Configuring Your Bootloader.
Initramfs (initial ramfs) is a chunk of code that unpacks the compressed cpio image midway through the kernel boot process. The files contained within that image are then used to populate the root filesystem. Initramfs is a part of a bigger concept called 'early-userspace', says (Spock).
[edit] Genkernel
Since genkernel uses an initrd image, and it is not possible to "append initramfs data to an initrd image"[1], we can't use an initramfs image for our purposes. Instead, we're going to remake the genkernel initrd image with special options for gensplash. The process is really quite simple and does not take more than a minute on a decent system. (Note: Genkernel is a tool for configuring your kernel if you haven't already created a .config file and copies the existing to config.bak.)
| Code: Genkernel - making initrd image with gensplash |
# genkernel --splash=themename initrd |
Replace themename with the name of a theme located in /etc/splash. Last versions of genkernel have --gensplash (or --bootsplash) option instead of --splash
[edit] Alternative Method: Compiling splash image directly into the kernel using genkernel
Sometimes you may have the need to compile the splash directly into the kernel using genkernel. First the kernel must be compiled the proper way using genkernel. Next prepare the splash cpio.gz and recompile the kernel without cleaning it.
| Code: Genkernel - compiling splash directly into kernel |
# genkernel --splash=themename all # rm /usr/src/linux/usr/initramfs_data.cpio.gz # splash_geninitramfs -g /usr/src/linux/usr/initramfs_data.cpio.gz -v -r 1024x768 livecd-2006.1 # genkernel --kernel-config=/root/config-2.6.18 --no-clean bzImage |
[edit] Genkernel - Other method for compiling splash directly into kernel
The above method did not work for me and seems too much complicated. Instead I made a simple shell script to build my kernel and initramfs with genkernel. With this method the splash should be loaded just after the boot loader (Grub, lilo, ...) so you won't see the initialisation messages from the kernel. (You will still be able to see them by editing kernel options from the boot loader)
For this script to work, you need to have app-portage/eselect and media-gfx/splashutils installed.
| Code: Genkernel - Other method for compiling splash directly into kernel |
#!/bin/bash ## Set your splash resolution and theme here splashres=1024x768 splashtheme=livecd-2007.0 ## Builds the kernel and initramfs with theme ## Don't forget to customize genkernel option according to your needs genkernel --menuconfig --dmraid --no-clean --splash=$splashtheme --splash-res=$splashres all ## Adds the splash theme in the initramfs ## The name of the initramfs file should be detected automatically ## Don't forget to customize the first part of the file name (replace x86 by x64 for 64 bits platform) splash_geninitramfs -a /boot/initramfs-genkernel-x86-`eselect kernel show | grep -o "[0-9]\.[0-9]*\.[0-9]*\-[a-z]*.*"` -v -r $splashres $splashtheme ## Emerge drivers that needs to be built against new kernel sources #emerge -av ati-drivers |
[edit] Non-genkernel
You have two options, the first is recommended.
- loading the initramfs image dynamically at boot time (recommended)
- compiling the initramfs image directly into the kernel
[edit] Loading initramfs at boot (recommended)
In this option, you create the initramfs image as a stand-alone file, also known as the initrd file. Because of this, you will not have to recompile the kernel everytime you want to change the image.
So the only thing you have to do here is use splash_geninitramfs to generate an initrd file (that contains the pictures, configs and the userspace helper):
| Code: |
# cd /etc/splash/ # splash_geninitramfs -g /boot/fbsplash-livecd-2007.0-1024x768 -r 1024x768 -v livecd-2007.0 |
Change the resolution and theme to match your monitor's resolution and chosen theme.
[edit] Alternative Method: Compiling initramfs directly into the kernel
First, delete the present initramfs image: rm -iv /usr/src/linux/usr/initramfs_data.cpio.gz
Next, you'll have to create a new initramfs image containing the pictures, configs and the userspace helper (adjust resolution and theme - livecd-2007.0 in the example - to your needs).
| Code: |
splash_geninitramfs livecd-2007.0 -r 1024x768 -g /usr/src/linux/usr/initramfs_data.cpio.gz -v |
You have to touch initramfs image to make sure it will be compiled into your new kernel: touch /usr/src/linux/usr/initramfs_data.cpio.gz. And then recompile your kernel.
[edit] View contents of initramfs
The initramfs should contain the splash theme files. To verify that it contains the theme that you chose you may use this command:
| Code: |
# zcat /boot/fbsplash-livecd-2007.0-1024x768 | cpio --list . dev dev/fb dev/vc dev/misc dev/null dev/console etc etc/splash etc/splash/livecd-2007.0 etc/splash/livecd-2007.0/Vera.ttf etc/splash/livecd-2007.0/images etc/splash/livecd-2007.0/images/background-1024x768.png etc/splash/livecd-2007.0/images/overlay-768.png etc/splash/livecd-2007.0/images/verbose-1024x768.png etc/splash/livecd-2007.0/1024x768.cfg lib lib/splash lib/splash/sys lib/splash/proc sbin sbin/splash_helper sbin/fbcondecor_helper root 1307 blocks |
The output should look something like that above, including the images for your chosen theme/resolution and a few system files. (If you used the alternative method of compiling your initramfs into the kernel then make sure to use the appropriate filename, i.e. zcat /usr/src/linux/usr/initramfs_data.cpio.gz).
[edit] Choosing a theme
If you wish to see a theme without booting you can use splash_manager:
| Code: |
# splash_manager --theme=livecd-2006.1 --cmd=set --tty=1 |
This will change the theme on tty1 to livecd-2006.1. You can choose any theme in /etc/splash that matches your current resolution. Now to see the theme go to tty1 by pressing Ctrl+Alt+F1.
[edit] Obtain More Themes
The media-gfx/bootsplash-themes package has quite a lot of themes.:
# emerge bootsplash-themes
This will install the themes to /etc/bootsplash. However, the current version of bootsplash-themes converts the themes automatically to splashutils compatible themes and moves them to /etc/splash/ as well, so there is no need to convert.
[edit] Converting Bootsplash Themes to Gensplash Themes
- The themes have been automatically converted to a format recognized by splashutils. Note that the conversion process is purely automatic and therefore 'dumb'. Some themes might not work, or work incorrectly. If you happen to find a theme that you like, but which doesn't work after it has been automatically converted to the new format, please fix it manually and submit for inclusion into a generic splashutils theme package by posting it on bugzilla or sending it directly to the maintainer of this package.
However, if you find a bootsplash theme you want to use with gensplash, you can use bootsplash2fbsplash (thanks to Spock, splashutils includes this), which makes the conversion from bootsplash to gensplash format easy. For example, if there is a bootsplash theme named gentoo-highquality located in /etc/bootsplash, with this the utility creates a gensplash-compatible theme in /etc/splash/gentoo-highquality including all the required files.
| Code: Convert bootsplash themes to gensplash |
# bootsplash2fbsplash gentoo-highquality |
If you want to quickly convert all installed themes:
| Code: Convert all bootsplash themes to gensplash |
# for i in $(ls -1 /etc/bootsplash); do bootsplash2fbsplash $i; done |
[edit] Fixing wrong image sizes
Image size mismatch: /etc/splash/Matrix/images/verbose-1280x1024.jpg. Failed to load image /etc/splash/Matrix/images/verbose-1280x1024.jpg.
If some images can't be loaded because they have the wrong resolution, you might try the following script (ImageMagick required):
| Code: Scale all images to the specified size |
#!/bin/sh
EXTRACTSCALE="s/^[^0-9]*\([0-9]\+x[0-9]\+\).*/\\1/"
for i in `ls -1 /etc/splash/`
do
cd /etc/splash/$i/images 2> /dev/null || continue # ignore files
pwd
for j in `ls -1 *.jpg`
do
claims=`echo $j |sed $EXTRACTSCALE`
if [[ `identify $j |sed "s/.*JPEG//" |sed $EXTRACTSCALE` != $claims ]]
then
cp $j $j.orig
convert $j.orig -resize $claims\! $j
fi
done
done
|
(this happened with bootsplash-0.6.1-r7 and splashutils-1.1.9.8; please tell me if this happens somewhere else as well!)
[edit] Configuring Your Bootloader
[edit] Kernel Options
You first need an option which specifies the frame buffer device. In the following example, we specify that we would like to use vesafb-tng with ywrap and mtrr support at a resolution of 1024x768, 16bpp color and a refresh rate of 85Hz (note: make sure you don't say vesafb-tng here - only vesafb is ok!):
video=vesafb:ywrap,mtrr,1024x768-16@85
Note that for kernel versions from 2.6.13 onwards you *must* specify the mtrr mode: eg "mtrr:2".
Or, if you are using vesa (not vesa-tng), use instead (for 1024x768-24):
vga=792
Fbsplash requires its own option which allows you to specify which theme should be used. In this case, the default theme is livecd-2006.1. The other option can be set to verbose or silent. If silent is set, it will hide all the bootup information. Otherwise, you will be shown all the bootup information on system startup. Both these values have to be set.
splash=verbose,theme:livecd-2006.1
If you want to increase the scrollback buffer (the default is 32K) you should also add an option such as:
fbcon=scrollback:128K
It seems you cannot put a value greater than 128K.
If you decided to use an initrd file you will need to place an additional option in the boot loader config:
initrd /boot/fbsplash-livecd-2006.1-1024x768 # Grub initrd = /boot/fbsplash-livecd-2006.1-1024x768 # Lilo
In the above example, it is assumed that the name of the initrd file is fbsplash-livecd-2006.1-1024x768 (and it resides in the /boot partition or directory).
You will probably want to pick a theme matching the version of your system. The livecd-<version> themes are recommended. (emergence says "2004.0")
Below are examples for both Grub and Lilo config files. It is assumed that the custom theme 'newtheme', a resolution of 1280x1024, 32bpp and a refresh rate of 70Hz are used. The specified fbsplash mode is 'silent' and an initrd file is used (hence the additional 'initrd' line).
Also note that for both GRUB and LILO, CONSOLE=/dev/tty1 must be added for silent mode to operate.
NOTE: For clarification, you should use either "console=tty1" OR "quiet CONSOLE=/dev/tty1" - uppercase CONSOLE for when using the quiet boot option.
NOTE: If you still get annoying kernel messages after adding "quiet" you may add "loglevel=0" to silent remaining messages.
To see full documentation of the kernel parameters specific to splash you need to look in kernel_parameters.gz which should be included in splashutils. You should be able to see it by typing (this assumes that you have emerged splashutils):
| Code: |
# bzless /usr/share/doc/splashutils*/kernel_parameters.bz2 |
As of splashutils-1.5.4 you should use this.
| Code: |
# less /usr/share/doc/splashutils*/kernel_parameters |
[edit] GRUB Example
| File: grub.conf |
title Gentoo root (hd0,0) kernel /kernel-2.6.11-r11 splash=silent,fadein,theme:newtheme video=vesafb:1280x1024-32@80,mtrr,ywrap quiet CONSOLE=/dev/tty1 initrd (hd0,0)/boot/fbsplash-newtheme-1280x1024 #Try 16 bit colour e.g. video=vesafb:ywrap,mtrr,1280x1024-16@70 #if you get errors returning to verbose mode on different themes Genkernel users should use something like this for the kernel line and the initrd line for the regular kernel: kernel (hd0,0)/boot/kernel-2.6.9-gentoo-r13 root=/dev/ram0 init=/linuxrc real_root=/dev/hda1 quiet splash=verbose,theme:newtheme video=vesafb:ywrap,mtrr,1024x768-32@70 CONSOLE=/dev/tty1 initrd (hd0,0)/boot/initrd-2.6.9-gentoo-r13 |
Replace (hd0,0) with your boot partition. If there is no separate boot partition, use the root partition number and prepend /boot to the kernel and initrd paths. Please note that you must specify either silent or verbose in the splash parameter, or splash will not load at all, i.e. "splash=theme:emergence" will not work.
[edit] LILO Example
| File: lilo.conf |
image=/boot/kernel-2.6.8-gentoo-r1 label = "Gentoo" root = /dev/hda3 append="video=vesafb:1280x1024-32@80,mtrr,ywrap,splash=silent, fadein,theme:newtheme quiet CONSOLE=/dev/tty1" read-only initrd = /boot/fbsplash-newtheme-1280x1024 |
Do not forget to run lilo after you have adjusted the lilo.conf file:
# mount /boot/ # lilo -v
After all this work and a reboot you should have a graphical boot.
[edit] Adding background to all consoles
To have all consoles display a background image with fbsplash, add the fbcondecor service to startup:
# rc-update add fbcondecor default
Note: This will load the background near the end of the boot process. To have it load earlier, set fbcondecor to load on the boot runlevel:
# rc-update add fbcondecor boot
For gensplash, add the following to your /etc/conf.d/splash:
| Code: Enable gensplash on all terminals |
SPLASH_TTYS="0 1 2 3 4 5 6 7 8 9 10 11 12" |
and add splash to your default or boot runlevel:
# rc-update add splash default
or
# rc-update add splash boot
[edit] Gensplash on Other Distributions
Gensplash will also work on other distributions. You can find tutorials for other distributions (Debian, Fedora and ArchLinux) at Spock's homepage.
[edit] Troubleshooting
[edit] Users With /usr on a Separate Partition
If you are using splashutils version 0.9-pre08 or later and have /usr on a separate partition, gensplash should work out of the box (without any modifications). If you, however, use an older version of splashutils and, for some bizarre reason, stubbornly refuse to update it, please use the instructions below.
The program and libraries that splash_util needs to run fbset and display your splash image are kept in /usr/bin and /usr/lib. So if you have these on separate partitions from / (such as a RAID or LVM2 partition), they may not be available (mounted) at the time splash_utils needs them (when using the older version of splashutils), and you won't see your beautiful splash.
The solution? Copy them to somewhere that they are available, as follows (with thanks to aslocum and the Gentoo forums Gensplash-How-to with progressbar!!!!! thread):
# cp -p /usr/bin/fbset /sbin # cp -p /usr/lib/libjpeg.so.62 /lib # cp -p /usr/lib/libpng.so.3 /lib
edit the /sbin/splash file, and make line 31 read:
res=`/sbin/fbset | grep "^mode" | sed -r 's/mode "([0-9]+x[0-9]+).*/\1/'`
The only difference in this line is to add /sbin/ before fbset. Save and exit, and your splash should display properly.
[edit] SIS 630
If you have a Sis-630 based video card, like an Asus 1300 laptop, you might get the complaint about no 8bpp pictures found. Trying to set the resolution of your framebuffer to 24 bit does not help with "video=vesafb:1024x768-32@72" in your grub.conf. Instead make sure you also include the sis framebuffer in your kernel and use the following line in your grub.conf:
video=sisfb:mode:1024x768x32,mem:12288,rate:70
[edit] x86_64 / IA64
The 'vesafb-tng' patch will not work on 64-bit systems (x86_64 and ia64), because the vm86 mode is not supported for OSes running in 64-bit mode. If you happen to own a 64-bit box, you were limited to plain vesafb but now an improved version of vesafb-tng called uvesafb is available (kernel 2.6.23 upwards).
To use uvesafb:
emerge v86d
| Linux Kernel Configuration: amd64-gentoo-2.6.23 |
|
General Setup: [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support (/usr/share/v86d/initramfs) Initramfs source file Device Drivers > Graphics support: [*] Support for frame buffer devices [*] Enable Video Mode Handling Helpers <*> Enable firmware EDID<*> Userspace VESA VGA graphics support |
[edit] Intel i810
Some people have had a lot of problems with vesa-tng working with an i810 integrated graphics controller. If you're having this problem, try the following kernel config instead:
| Linux Kernel Configuration: Intel i810 |
Device Drivers > Graphics support: [*] Support for frame buffer devices < > VESA VGA graphics support <*> Intel 810/815 support (EXPERIMENTAL) |
| File: grub.conf |
video=i810fb:vram:4,xres:1024,yres:768,bpp:16,hsync1:30,hsync2:55,vsync1:50,vsync2:85,accel |
Change your vram and sync settings as needed to support your adapter and/or monitor (to find your monitor sync rates use the ddcxinfo-knoppix program in portage). These are fairly conservative and should work with most setups. Hopefully this helps.
I've got the error "intelfb: Video mode must be programmed at boot time." on my 64 Bit system, which does not support vesa-tng. It works with vesa only and the following kernel and grub config:
| Linux Kernel Configuration: Intel i810 on 2.6.18-gentoo? |
Device Drivers > Graphics support: [*] Support for frame buffer devices [*] Enable Video Mode Handling Helpers < > VGA 16-color graphics support <*> VESA VGA graphics support VESA driver type (vesafb) ---> <*> Intel 830M/845G/852GM/855GM/865G support (EXPERIMENTAL) |
| File: grub.conf |
vga=792 INSTEAD OF video=intelfb:... |
Hopefully this helps on 32 Bit systems, too.
Starting with kernel 2.6.11-gentoo-r9, the i810 chipset no longer supports the Intel 810/815 frame buffer device. You may have to use the vga16 frame buffer. Do not enable the VESA or i810 frame buffer options. The Direct Rendering Manager and the agpgart will not be built correctly if you do. In the kernel config choose:
| Linux Kernel Configuration: Intel i810 on 2.6.11-gentoo-r9? |
Device Drivers > Graphics support: [*] Support for frame buffer devices [*] Enable Video Mode Handling Helpers <*> VGA 16-color graphics support < > VESA VGA graphics support < > Intel 810/815 support (EXPERIMENTAL) |
[edit] ATI Radeon
Using radeonfb works just fine (tested with Radeon M9 and 9800PRO). Simply compile the kernel as shown below :
| Linux Kernel Configuration: ATI Radeon |
Device Drivers > Graphics support: [*] Support for frame buffer devices <*> ATI Radeon display support |
make && make modules modules_install install
Also add this to your bootloader kernel args
video=radeonfb
The kernel will now use the default resolution and bit depth for your graphic card. Alternatively, you may choose a specific resolution/mode something like this:
video=radeonfb:1024x768 video=radeonfb:1400x1050-32@60
Setting 32bit explicitly may be helpful if the theme colors are distorted due to a 24bit default.
[edit] ATI Radeon X800
I did not manage to get vesafb-tng working with this card. Always got vesafb: mode switch failed (eax: 0xXXXX)
I switched to standard vesafb and finally it worked with follwing boot options:
| File: /boot/grub/grub.conf |
title=Gentoo Linux 2.6.12-r9 root (hd1,0) kernel (hd1,0)/kernel-2.6.12-r9 root=/dev/hdb3 video=vesafb:ywrap,mtrr vga=791 splash=silent,fadein,theme:livecd-2005.1 quiet CONSOLE=/dev/tty1 initrd (hd1,0)/fbsplash-livecd-1024x768 |
Replacing vesafb with radeonfb works with the above options on an ATI X800 XL when radeonfb is compiled into the kernel. The vga=791 argument is required to make it work with radeonfb.
IMPORTANT KERNEL OPTIONS:
INPUT_EVDEV =y to make F2 button work DEVFS_MOUNT =n to make silent mode work: otherwise x does not start
Reemerge your splashutils with
# emerge -v splashutils
and rebuild your ramdisks with f.e.
# splash_geninitramfs -v -g /boot/fbsplash-livecd-1024x768 -r 1024x768 livecd-2005.1
if you updated your kernel!!!
Remove consolefont from your bootlevel
# rc-update del consolefont boot
If you've trouble with kernel messages destroying your splash, try kernel options kdgraphics and tty:x and emerge splashutils with kdgraphics support.
Regards, fritzchen
[edit] PRE-VBE 2.0 cards are not supported
This occurs when you have an old graphic card.
In make menuconfig, remove everything in graphic drivers but VESA, FRAMEBUFFER SUPPORT and CONSOLE settings.( Those you must turn on to activate FB SPLASH). If necessary, use VESA instead of VESA-TNG.
| Linux Kernel Configuration: VESA |
Device Drivers > Graphics support:
[*] Support for frame buffer devices
<*> VESA VGA graphics support
VESA driver type (vesafb-tng) --->
or VESA driver type (vesafb) instead
(HRESxVRES@FREQ) VESA default mode
Device Drivers >
Graphics support >
Console display driver support:
[*] Video mode selection support
<*> Framebuffer Console support
[*] Support for the framebuffer splash
|
Remember to turn off other graphic drivers( like Trident )
In your grub.conf, use vga=x instead of video=vesafb:???x???-??@??
| 640x480 | 800x600 | 1024x768 | 1280x1024 | 1152x864 | 1600x1200 | |
|---|---|---|---|---|---|---|
| 8 bit | 769 | 771 | 773 | 775 | 353 | 800 |
| 15 bit | 784 | 787 | 790 | 793 | 354 | 801 |
| 16 bit | 785 | 788 | 791 | 794 | 355 | 802 |
| 24 bit | 786 | 789 | 792 | 795 | 803 |
It should work.
[edit] Can't find the required video mode for your resolution (vesafb)?
VESAFB requires kernel argument vga=x to set the screen resolution and colors. If the video mode is not listed for your resolution you can still compute it using vbetest especially if your screen resolution is non-standard - e.g. 1680x1050 or 1280x800. vbetest is a command line tool that lists the video modes your graphics card supports. First make sure package lrmi is installed on your system:
# emerge lrmi
then run vbetest.
| Code: vbetest lists supported video modes |
$ vbetest VBE Version 3.0 Intel(r)915GM/910ML/915MS Graphics Chip Accelerated VGA BIOS [352] 1680x1050 (256 color palette) [353] 1680x1050 (5:6:5) [354] 1680x1050 (8:8:8) [355] 1280x800 (256 color palette) [356] 1280x800 (5:6:5) [357] 1280x800 (8:8:8) [263] 1280x1024 (256 color palette) [282] 1280x1024 (5:6:5) [283] 1280x1024 (8:8:8) [261] 1024x768 (256 color palette) [279] 1024x768 (5:6:5) [280] 1024x768 (8:8:8) [274] 640x480 (8:8:8) [276] 800x600 (5:6:5) [277] 800x600 (8:8:8) [257] 640x480 (256 color palette) [259] 800x600 (256 color palette) [273] 640x480 (5:6:5) Type a mode number, or 'q' to quit - 353 |
Modes in square brackets are listed in decimal. Add 512 to the mode you need; pass the result (for example 353+512=865) to your kernel using vga=x, either in decimal (vga=865) or in hexadecimal (vga=0x361).
Thanks to bdz in Gentoo forums, Getting DRI working with Intel Sonoma (i915GM) chipset.
# emerge hwinfo
| Code: hwinfo lists supported video modes |
# hwinfo --vbe [...] 02: None 00.0: 11001 VESA Framebuffer [Created at bios.447] Unique ID: rdCR.IHGEtURKIN6 Hardware Class: framebuffer Model: "NVIDIA G72 Board - e463h0v " Vendor: "NVIDIA Corporation" Device: "G72 Board - e463h0v " SubVendor: "NVIDIA" SubDevice: Revision: "Chip Rev" Memory Size: 128 MB Memory Range: 0xc0000000-0xc7ffffff (rw) Mode 0x0300: 640x400 (+640), 8 bits Mode 0x0301: 640x480 (+640), 8 bits Mode 0x0303: 800x600 (+800), 8 bits Mode 0x0305: 1024x768 (+1024), 8 bits Mode 0x030e: 320x200 (+640), 16 bits Mode 0x030f: 320x200 (+1280), 24 bits Mode 0x0311: 640x480 (+1280), 16 bits Mode 0x0312: 640x480 (+2560), 24 bits Mode 0x0314: 800x600 (+1600), 16 bits Mode 0x0315: 800x600 (+3200), 24 bits Mode 0x0317: 1024x768 (+2048), 16 bits Mode 0x0318: 1024x768 (+4096), 24 bits Mode 0x0330: 320x200 (+320), 8 bits Mode 0x0331: 320x400 (+320), 8 bits Mode 0x0332: 320x400 (+640), 16 bits Mode 0x0333: 320x400 (+1280), 24 bits Mode 0x0334: 320x240 (+320), 8 bits Mode 0x0335: 320x240 (+640), 16 bits Mode 0x0336: 320x240 (+1280), 24 bits Mode 0x033d: 640x400 (+1280), 16 bits Mode 0x033e: 640x400 (+2560), 24 bits Config Status: cfg=new, avail=yes, need=no, active=unknown [...] |
[edit] Background image loading in the middle of the boot process
You may (and probably will) find that the background image is loaded with a certain few-seconds-delay even when using an initramfs image. During that time the standard black-and-white 640x480 resolution is used.
Such behaviour is normal. The only workaround (in order to get the background image as early as possible) would be using the vesafb frame buffer device (instead of vesafb-tng). Here's Spock's elaborate answer on that issue: "The initramfs is used to populate the root filesystem before the frame-buffer subsystem is initialized, so it's good enough - don't worry about it. As you might have noticed, your PC boots into the text mode, and not the graphics mode. The graphics mode is set up when the framebuffer sub-system is initialized. But before that can happen, other things must be initialized, things that take some time. That's why for a second or two you might be seeing the kernel messages. You might say that with vesafb you didn't have those. And you will be right. But vesafb is an exception, not a rule (it's initialized while the kernel is being loaded) . Every other fb driver, including vesafb-tng, rivafb, radeonfb,... is initialized with the fbdev subsystem".
[edit] Background image loading late in the boot process with compiled in initramfs image
The problem of the splash image appearing late can also occur if the fbcondecor service is started at the default stage of the boot process while having a splash image compiled directly into the kernel.
To fix remove fbcondecor from the default stage and add it to the boot stage.
| Code: |
# rc-update del fbcondecor # rc-update add fbcondecor boot |
You may find after doing this that the xdm init script may not start gdm successfully. Changing RC_PARALLEL_STARTUP to "no" in /etc/conf.d/rc should solve this.
[edit] Background image not loading until the filesystem is mounted
While having a delay of 2-3 seconds before the splash screen shows up is normal, having a 20 second delay is not. The reason is that because of one thing or another, the kernel is unable to access the required files from the initrd-image. First you should probably double-check and make sure that your image actually contains the proper files: View contents of initramfs.
If that's not the problem, the most likely reason is that you have specified and created the image with a resolution that isn't supported by your frame buffer device.
Note that just because your monitor and graphics card support a certain resolution, it doesn't mean that your Video BIOS - and by extension your frame buffer device - does.
If, for instance, you've created an initrd-image which only contains files for the 1280x1024-resolution, and the maximum supported resolution is 1024x768, gensplash will try to fall back to the maximum supported resolution - only to fail, because these files weren't included. When the filesystem is mounted (far into the boot process) the necessary files will suddenly become available, and the splash-screen will be displayed (albeit annoyingly late). In order to find out which modes are supported by your setup, simply issue the command:
cat /proc/fb0/modes
You should then adjust your theme accordingly.
In newer kernels, it seems to have moved, try:
cat /sys/class/graphics/fb0/modes
instead.
[edit] fbsplash on PowerPC
fbsplash is stable on PowerPC.
If you are using yaboot, then here is your initrd and append line (which go in your /etc/yaboot.conf file):
initrd=/boot/fbsplash-themename-resolution append="video=radeonfb:resolution-bitdepth splash=silent"
The initrd should be relative to the root filesystem, but might be different based on your system setup. You might also place your initrd somewhere else entirely -- for instance, you could have my kernels in a /kernel directory and initrd images in /images.
i have problem running maconlinux when fbsplash is enabled. anyone else having this problem?
[edit] putfont: PIO_FONT: Invalid argument
This message might appear in silent mode. To fix it, remove consolefont from the boot-runlevel:
# rc-update del consolefont boot
It is safe to remove consolefont from the boot-runlevel, because fbsplash runs the setfont-command after finishing the boot anyway.
[edit] I upgraded to kernel 2.6.12 or higher and the bootsplash doesn't show any more
This is what you get when you run emerge splashutils
| Code: emerge splashutils |
|
[...] * It is required that you add 'quiet CONSOLE=/dev/tty1' to your kernel |
[edit] Error Message complains about missing 8bpp images in themes like livecd-2005.1
If the splash doesn't load and you get error messages about missing 8bpp graphics, you're running in 8bpp mode. You can change the mode by adding the color depth to your kernel command line.
| File: /boot/grub/grub.conf |
|
change video=radeonfb:1280x1024@75 to video=radeonfb:1280x1024-32@75 |
This sets the color depth to 32 bits per pixel.
If it still doesn't work , you maybe had to specify the color depth in the kernel default mode for vesa(-tng). For example:
| Linux Kernel Configuration: Specify the color depth in the kernel |
Device Drivers > Graphics support:
[*] Support for frame buffer devices
<*> VESA VGA graphics support
VESA driver type (vesafb-tng) --->
(1280x1024-32@75) VESA default mode
|
For iBook G4 use following Options for example in /etc/yaboot.conf
append="video=radeonfb:1024x768-32@60 quiet splash=silent,theme:livecd-2007.0 CONSOLE=/dev/tty1"
and
initrd=/boot/fbsplash-livecd-1024x768
See Spock's troubleshooting guide for details.
[edit] Error Message "The file system mounted in / doesn't contain the /dev/tty1"
This message occurs when gensplash utilities try to access the /dev/tty1 but the device doesn't exists. This will prevent the silent mode of genplash from running correctly, gensplash will change to verbose mode. Note that this error may not appear in the system logs, /var/log/messages or /var/log/dmesg. You only be able to catch it among the INIT system messages during boot. This behavior doesn't facilitate the detection and handling of this error.
What is the problem?
Gensplash needs to access to the /dev/tty1 device in order to silent mode work properly. However sometimes gensplash request this device before /dev is mounted and handled by udev. Note that you may see the /dev/tty1 device after boot, but gensplash tried to access it before it was there. This fact also makes this hard to solve, since you may think that there is no problem with the device because you can see it after booting.
What to do?
You must create that node manually so it will be there when gensplash will try to access it.
How to do it?
mkdir /temp mount --bind / /temp mknod /temp/dev/tty1 c 4 1 umount /temp rmdir /temp
Sometimes if the device is not found when you emerge media-gfx/splashutils the splash-utils package a message like may appear. Basically it suggests the same solution.
* It appears that the /dev/tty1 character device doesn't exist on * the root filesystem. This will prevent the silent mode from working * properly. You can fix the problem by doing: * mount --bind / /lib/splash/tmp * mknod /lib/splash/tmp/dev/tty1 c 4 1 * umount /lib/splash/tmp
