HOWTO fbsplash

Un article de Gentoo Linux Wiki.

Sommaire

[modifier] Introduction

Tout d’abord, je souhaite remercier le développeur Gentoo Spock pour son travail sur gensplash (fbsplash et splashutils) et vesafb-tng.

Comme alternative à ce how-to, vous pouvez essayer le how-to "Gensplash en 5 étapes faciles".

[modifier] Qu’est-ce que gensplash ?

Gensplash est un projet initié par Spock dont le but est de créer une boîte à outils qui pourrait "enrichir" le processus de démarrage de Gentoo (affichage de messages, d’animations, d’indicateurs de progressions, etc)

[modifier] Qu’est-ce fbsplash (framebuffer splash) ?

Fbsplash est une composante du projet gensplash. Selon la documentation de fbsplash, "le framebuffer splash est une fonctionnalité du noyau qui autorise l’affichage d’une image d’arrière plan sur les consoles choisies et le basculement de la première console vers le mode appelé silent mode, pendant le démarrage, redémarrage, arrêt du système". L’accès au périphérique fbsplash s’effectue via le nœud de périphérique /dev/fbsplash.

[modifier] Qu’est-ce qu’un périphérique frame buffer ?

Le périphérique framebuffer fournit une abstraction pour le matériel graphique. Il représente le frame buffer des matériels vidéo et autorise les applications logicielles à accéder au matériel graphique via une interface bien définie, aussi le logiciel n’a pas besoin de connaître quoi que ce soit à propos du bas niveau (registre matériel). L’accès au périphérique s’effectue à travers des nœuds de périphériques spéciaux, généralement situés dans le répertoire /dev, i.e. /dev/fb* (définition tirée de la documentation du noyau linux).

Il existe beaucoup de périphériques frame buffer différents :

  • quelques uns d’entre-eux sont des périphériques frame buffer génériques pouvant être utilisés avec des cartes graphiques variées :
    • vesafb (vesa frame buffer),
    • vesafb-tng (vesa frame buffer - la prochaine génération),
  • quelques uns sont spécifiques à des cartes graphiques, par exemple :
    • rivafb (peut être utilisé avec les cartes nvidia),
    • radeonfb (peut être utilisé avec les cartes ati).

Fbsplash peut fonctionner avec n’importe lequel de ces périphériques frame buffer (en fait, il peut fonctionner avec n’importe quel périphérique qui fournit les modes couleurs directs 8/15/16/32 bpp et pseudocolor).

[modifier] Installation de fbsplash et splashutils

Les exemples présentés ici sont issus du how-to de Spock avec un périphérique vesafb-tng et de ma propre expérience avec un périphérique vesafb, en supposant évidemment que vous utilisez une distribution Gentoo.

[modifier] Patcher le noyau

Les sources Gentoo-Dev-Sources sont déjà patchées pour le framebuffer vesa-tng et fbsplash depuis les versions 2.6.8. Si vous souhaitez utiliser d'autres sources non patchées, vous pouvez récupérer les patches sur la page de Spock pour les appliquer.

[modifier] Installation des outils splashutils

Le paquet splashutils contient les binaires nécessaires pour charger les images (et décoder les formats jpeg, png, etc) ainsi que quelques autres outils relatifs à fbsplash. Il est maintenant stable pour l'architecture x86 :

# emerge splashutils

Certains auront peut-être à désinstaller le paquet bootsplash (et les paquets qui en dépendent, comme bootsplash-themes et bootsplash-themes-livecd, sous peine de voir bootsplash causer quelques soucis lors des mises à jour) pour pouvoir installer fbsplash.

Pour avoir quelques thèmes gentoo dont "emergence" qui est utilisé dans les exemples plus bas :

# emerge splash-themes-gentoo

[modifier] Configuration du noyau

La configuration peut différer selon votre choix de framebuffer, mais dans tous les cas vous devez retrouver dans la section Device Drivers > Graphics Support ce type de configuration :

Avec vesafb-tng Avec vesafb
[*] Support for frame buffer devices
<*> VESA VGA graphics support
VESA driver type (vesafb-tng) --->
( ) vesafb
(X) vesafb-tng
...
Console display driver support --->
<*> Framebuffer Console support
...
[*] Support for the framebuffer splash (NEW)
[*] Support for frame buffer devices
<*> VESA VGA graphics support
VESA driver type (vesafb) --->
(X) vesafb
( ) vesafb-tng
...
Console display driver support --->
<*> Framebuffer Console support
...
[*] Support for the framebuffer splash (NEW)

Si vous désirez charger l'image initramfs au démarrage (Voir plus loin pour plus d'informations), alors les options suivantes auront besoin d'être précisées dans la configuration du noyau Device Drivers > Block devices :

<*> RAM disk support
(4096) Default RAM disk size (kbytes) (NEW)
[*] Initial RAM disk (initrd) support

Dans le doute, cochez-les, ça ne peut pas vraiment faire de mal.

[modifier] Compilation du noyau et intégration de gensplash

Il va falloir maintenant compiler le noyau. Cependant si vous souhaitez intégrer gensplash à votre noyau (ce qui n'est pas la meilleure solution pour changer de thème), alors passez directement à cette étape.

[modifier] Compilation du noyau

Tout d'abord, se placer dans l'arborescence correspondant aux sources (facultatif : nettoyer les restes des précédentes compilations si vous le désirez (sans oublier de sauver votre .config si nécessaire)) et lancer la configuration du noyau en vous reportant à la section Configuration du noyau. Pour compiler votre noyau, lancez:

# cd /usr/src/linux
# make && make modules_install

N'oubliez pas de copier l'image du noyau:

# cp System.map /boot/votre_systemmap
# cp arch/i386/boot/bzImage /boot/votre_kernel

[modifier] Initramfs : présentation rapide

Citation de Spock : "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"".

Autrement dit, Initramfs est une portion de code qui décompresse l'image cpio pendant le chargement du noyau au démarrage. Cette image contient :

  1. les images du "splash" ;
  2. les fichiers de configuration nécessaires ;
  3. un utilitaire "userspace helper" (splash_helper).

Les images et fichiers de configuration constituent un thème gensplash.

Il y a trois façons d'utiliser cette image initramfs :

  1. compiler votre noyau en incluant l'image Cliquer ici ;
  2. charger cette image dynamiquement au démarrage (en utilisant le 'initial ram disk' que l'on a rencontré dans la configuration du noyau, cette méthode a l'avantage de ne pas avoir à recompiler le noyau pour changer de thème !) Cliquer ici ;
  3. laisser genkernel se charger de tout ça. Cliquer ici.

Il vous faudra créer cette image pour obtenir votre "splash".

[modifier] Compilation avec intégration de l'image initramfs

Tout d'abord, supprimer l'image déjà présente dans les sources :

# rm /usr/src/linux/usr/initramfs_data.cpio.gz

Et ensuite, créer avec l'outil splash_geninitramfs (installé avec les outils splash-utils) un nouveau initramfs contenant les images et leurs configurations :

# splash_geninitramfs -v -g /usr/src/linux/usr/initramfs_data.cpio.gz -r 1024x768 emergence

Vous pouvez enfin compiler votre noyau en y incluant votre image initramfs :

# cd /usr/src/linux
# touch usr/initramfs_data.cpio.gz
# make bzImage
# mount /boot
# make install

[modifier] Charger l'image initramfs dynamiquement au démarrage

Ici, vous n'aurez qu'à faire votre image initramfs et reconfigurer votre chargeur de démarrage.

# mount /boot
# splash_geninitramfs -v -g /boot/fbsplash-emergence-1024x768 -r 1024x768 emergence

Cette méthode est peut-être à déconseiller pour les utilisateurs de genkernel, vu que genkernel crée déjà un initrd à charger lors du démarrage. Elle ne fonctionne avec genkernel que si vous n'utilisez pas l'initrd créée par genkernel (par exemple pour un système udev pur).

[modifier] Compilation à l'aide de genkernel

Pour utiliser gensplash avec genkernel, il vous faudra une version récente de genkernel. J'ai essayé avec la version 3.1.0a et cela fonctionne. genkernel intégrera l'initramfs dans l'initrd qu'il a l'habitude de générer. Il suffira donc de préciser à genkernel le thème gensplash à utiliser lors de son exécution, configurer le noyau ([1]) et adapter les options de démarrage pour préciser le thème.

# genkernel --menuconfig --gensplash=emergence all

Note: pour les utilisateurs d'un système udev pur, utilisant genkernel mais pas l'initrd créé par genkernel, cette solution ne fonctionne pas.

[modifier] Configuration du chargeur de démarrage

Il faut faire attention à bien préciser le thème gensplash à utliser dans les options de démarrage et spécifier l'emplacement de l'image initrd. Voici quelques exemples de configuration en fonction du chargeur et du périphérique framebuffer que vous utilisez, et si vous avez utilisé genkernel ou non. Les utilisateurs du périphérique vesafb-tng doivent enlever l'option vga de leur fichier configuration.

[modifier] Avec Lilo

image = /boot/kernel-2.6.9-gentoo-r1 label = Gentoo read-only

  • Pour les utilisateurs sans genkernel avec vesa :

root = /dev/hda3 append = "splash=verbose,theme:emergence video=vesa:ywrap,mtrr" vga = 791 initrd = /boot/fbsplash-emergence-1024x768

  • Pour les utilisateurs sans genkernel avec vesa-tng :

root = /dev/hda3 append = "splash=verbose,theme:emergence video=vesafb:ywrap,mtrr,1024x768-32@70" initrd = /boot/fbsplash-emergence-1024x768

  • Pour les utilisateurs avec genkernel et vesa :

root = /dev/ram0 append = "splash=verbose,theme:emergence init=/linuxrc real_root=/dev/hda3 video=vesa:ywrap,mtrr" vga = 791 initrd = /boot/initrd-2.6.9-gentoo-r1

  • Pour les utilisateurs avec genkernel et vesa-tng :

root = /dev/ram0 append = "splash=verbose,theme:emergence init=/linuxrc real_root=/dev/hda3 video=vesafb:ywrap,mtrr,1024x768-32@70" initrd = /boot/initrd-2.6.9-gentoo-r1

[modifier] Avec Grub

title Gentoo root (hd0,0)

  • Pour les utilisateurs sans genkernel avec vesa :

kernel (hd0,0)/kernel-2.6.9-gentoo-r1 root=/dev/hda3 splash=verbose,theme:emergence video=vesa:ywrap,mtrr vga=791

initrd (hd0,0)/boot/fbsplash-emergence-1024x768

  • Pour les utilisateurs sans genkernel avec vesa-tng :

kernel (hd0,0)/kernel-2.6.9-gentoo-r1 root=/dev/hda3 splash=verbose,theme:emergence video=vesafb:ywrap,mtrr,1024x768-32@70

initrd (hd0,0)/boot/fbsplash-emergence-1024x768

  • Pour les utilisateurs avec genkernel et vesa :

kernel (hd0,0)/kernel-2.6.9-gentoo-r1 init=/linuxrc root=/dev/hda3 splash=verbose,theme:emergence video=vesa:ywrap,mtrr vga=791

initrd (hd0,0)/boot/initrd-2.6.9-gentoo-r1

  • Pour les utilisateurs avec genkernel et vesa-tng :

kernel (hd0,0)/kernel-2.6.9-gentoo-r1 init=/linuxrc root=/dev/hda3 splash=verbose,theme:emergence video=vesafb:ywrap,mtrr,1024x768-32@70

initrd (hd0,0)/boot/initrd-2.6.9-gentoo-r1

NOTE : Pour utiliser le mode silencieux (silent) vous devriez rajouter CONSOLE=/dev/tty1 dans votre chargeur de démarrage.

Exemple : kernel /boot/kernel-test root=/dev/sda5 quiet CONSOLE=/dev/tty1 splash=silent,theme:livecd-2007.0 video=vesafb:ywrap,mtrr,1024x768-32@70

[modifier] Utiliser d'autres thèmes gensplash

Tous les exemples ci-dessus utilisent le thème emergence. Il est évidemment possible d'en utiliser d'autres, d'en créer ou même de convertir des thèmes bootsplash. Maintenant, il existe aussi un paquet media-gfx/splash-themes-livecd dans l'arborescence de portage. De façon analogue à bootsplash dont les thèmes se situaient dans /etc/bootsplash, les thèmes gensplash se trouvent dans /etc/splash.

[modifier] Convertir un thème bootsplash

Spock a intégré à cet effet un outil très pratique dans le paquet splashutils : bootsplash2fbsplash. Son utlisation est simplissime, en mode superutilisateur (root) exécutez :

# bootsplash2fbsplash gentoo-highquality

C'est magique, ça marche tout seul si vous avez bien vérifié que le thème bootsplash (gentoo-highquality dans l'exemple) est bien présent dans /etc/bootsplash :]

[modifier] Créer son propre thème gensplash

Section à venir...

[modifier] Intégrer le thème fraîchement généré

Il n'y a plus qu'à revenir sur les étapes décrites ici en remplaçant emergence par le nom du thème que vous lui avez attribué.