HOWTO Fbsplash
De Gentoo Linux Wiki
| Kernel & Hardware • Red y Servicios • Portage • Relacionado con el Sistema • Servidor X • Juegos • Misceláneos |
Este documento es una traducción libre de HOWTO fbsplash. Intentaré traducirla lo mas fielmente posible, sin embargo hay términos y métodos que cambiaré para facilitar el trabajo de traducción y de la instalación misma.
Tabla de contenidos |
[editar] Introducción
Antes que nada quiero dar las gracias a Spock por desarrollar genplash (fbsplash y splashutils) y el driver vesa-tng. Como alternativa a este how-to, puedes mirarte el siguiente artículo en inglés: Spock's Gensplash-in-5-easy-steps How-to
[editar] ¿Qué es Gensplash?
Genplash es un proyecto iniciado por Spock, que pretende crear un conjunto de herramientas para "enriquecer" el proceso de arranque (o inicio) de Gentoo mostrando mensajes, animaciones, barras de progreso, etc.
[editar] ¿Qué es fbsplash (framebuffer splash)?
Fbsplash es parte de el proyecto Gensplash. De acuerdo a la documentación de fbsplash, "el framebuffer splash es una característica del kernel que permite mostrar una imagen de fondo en las consolas seleccionadas y poner la primer consola en el llamado modo silencioso (silent mode), cuando se inicia/reinicia/apaga el sistema." Se accede a fbsplash a través del nodo /dev/fbsplash. Para que fbsplash funcione es necesario un driver frame buffer.
[editar] ¿Qué es un driver frame buffer?
El driver frame buffer proporciona una forma de acceso al hardware gráfico. Permite acceder al hardware gráfico a las aplicaciones a través de una interfaz bien definida, de forma que el software no necesita saber nada del hardware. Unos nodos especiales, generalmente localizados en el directorio /dev (/dev/fb*), dan acceso al driver (definición tomada de la documentación del kernel).
Existen drivers frame buffer diferentes:
- Algunos son drivers genéricos que pueden usarse con varias tarjetas gráficas:
- vesafb (vesa frame buffer),
- vesafb-tng (vesa frame bugger - the next generation),
- Algunos son para tarjetas específicas; por ejemplo:
- rivafb (puede ser usado con las tarjetas nvidia),
- radeonfb (puede ser usado con las tarjetas ati).
Fbsplash debe trabajar con cualquiera de estos drivers frame buffer (de hecho debería trabajar con cualquier driver que proporcione los modos 8/15/16/24/32bpp directcolor/pseudocolor).
[editar] Instalación de fbsplash y splashutils
En el ejemplo siguiente se usará el driver vesa-tng. También asumiré que la distribución elegida es Gentoo.
[editar] Parchear el kernel
Primero asegúrate de que tienes instalados los parches fbsplash y vesa-tng en el kernel. Las gentoo-dev-sources 2.6.8-r1 y superiores deben tener ya instalados esos parches. Si no tienes esos parches, puedes obtenerlos de la página de Spock. Para instalarlos, sigue las instrucciones de la página.
[editar] Configuración/compilación del kernel
Asegúrate de no tener archivos de compilaciones previas en el directorio del kernel.
| Código: Consola |
# cd /usr/src/linux # make mrproper |
Ahora, configura el kernel (los usuarios de genkernel deben teclear "genkernel --menuconfig kernel");
| Código: Consola |
# make oldconfig # make menuconfig |
Primero, para incluir el soporte al driver vesafb-tng escoge las siguientes opciones:
| Código: Kernel |
------ Device Drivers ------
--- Graphics Support ----
<*> VESA VGA graphics support
<*> Vesa driver type (vesafb-tng) --->
(video-mode 1024x768-32@70) VESA Default mode
|
Ahora necesitas añadir el soporte de fbsplash:
| Código: Kernel |
------ Device Drivers ------
--- Graphics Support ----
--- Console display driver support ---
<*> Framebuffer Console support
<*> Video mode selection support
------ Device Drivers ------
--- Graphics Support ----
* Support for the framebuffer splash
|
Más adelante debes escoger la opción: Loading the initramfs image dynamically at boot time (using the 'initial ram disk' initrd) (en el capítulo Haciendo una imagen initramfs de este how-to).
| Código: Kernel |
------ Device Drivers ------
--- Block devices ----------
(8192) Default RAM disk size (kbytes) (<-- 4096 is also possible)
* Initial RAM disk (initrd) support
|
Después de configurar tu kernel debes de compilarlo (precaución: este paso debe hacerse antes de instalar las splashutils). 'make' compilará la imagen del kernel ('make bzimage') y los módulos ('make modules'):
| Código: Consola |
# make |
[editar] Emerger las splashutils
Ahora es tiempo de emerger las splashutils. Las splashutils son los binarios que usaremos para cargar las imagenes (y para decodificar jpeg, png, etc).
| Código: Consola |
# emerge -av splashutils splash-themes-gentoo |
[editar] Instalación del kernel
Ahora tienes preparado el sistema y el kernel para mostrar una splash screen, finalizaremos la compilación e instalación del kernel así: Si tienes /boot en una partición separada móntala primero:
| Código: Consola |
# mount /boot |
Después instala los módulos (en /lib/modules/kernel_version):
| Código: Consola |
# make modules_install |
y la imagen del kernel (en /boot):
| Código: Consola |
# make install |
[editar] Creación de una imagen initramfs
Los pasos anteriores (y la siguiente parte de este howto, 'Configurando tu bootloader') deben bastar para tener una splash screen después de que tu kernel inicie. Sin embargo, si deseas tener una imagen de fondo más sexy (tras haber iniciado el driver frame buffer <vesa-tng en nuestro caso>), debes usar initramfs.
[editar] ¿Qué es initramfs?
Citando a Spock: Initramfs (inicial ramfs) es un fragmento de código que desempaqueta la imagen cpio comprimida a lo largo del proceso de inicio del kernel. Los archivos contenidos dentro de esa imagen son usados por el sistema de archivos raíz (root). Initramfs es una parte de un gran concepto llamado 'early-userspace'.
Ahora, para poder usar initramfs, la imagen initramfs tiene que crearse con:
- La imagen que será mostrada,
- Los archivos de configuración necesarios,
- Una utilidad "userspace helper" (splash_helper).
La imagen y los archivos de configuración forman un tema gensplash.
Existen dos formas de usar la imagen initramfs:
- Compilando la imagen initramfs directamente en el kernel.
- Cargando dinámicamente la imagen en cada inicio. (usando el 'initial ram disk' - initrd)
Puedes escoger el que más te guste (el segundo - usando initrd - puede ser un poco más conveniente).
[editar] Compilación de la imagen initramfs directamente en el kernel
Primero, borra la imagen actual:
| Código: Consola |
# rm /usr/src/linux/usr/initramfs_data.cpio.gz |
Después, tienes que crear una nueva imagen initramfs que contenga las imagenes, archivos de configuración y el userspace helper. Es muy fácil hacerlo usando la utilidad splash_geninitramfs (se instaló cuando emergiste las splashutils). Es similar a la utilidad 'splash' usada por bootsplash.
| Código: Consola |
# splash_geninitramfs -v -g /usr/src/linux/usr/initramfs_data.cpio.gz -r 1024x768 emergence |
(Compilar la imagen initramfs directamente dentro del kernel tiene la desventaja de que necesitarás recompilar el kernel.) Este paso no es requerido cuando se usa la segunda opción - initrd
| Código: Consola |
# cd /usr/src/linux # touch usr/initramfs_data.cpio.gz # make bzImage # mount /boot # make install |
[editar] Carga dinámica de la imagen initramfs en cada inicio
Esta opción es casi idéntica a compilar directamente la imagen initramfs en tu kernel. La única diferencia es que, en lugar de crear la imagen dentro del kernel (y compilarlo con 'make' y copiarlo a la particion /boot con 'make install'), la crearás como un archivo separado (el archivo initrd). Así no tendras que recompilar el kernel. Lo que harás, sin embargo, es especificar una linea adicional en el archivo de configuración del gestor de arranque. Eso se explicará en la siguiente parte de este howto. Lo único que tienes que hacer aquí es usar splash_geninitramfs para generar un archivo initrd (que contenga las imagenes, archivo de configuracion y el userspace helper):
| Código: Consola |
# mount /boot # splash_geninitramfs -v -g /boot/fbsplash-emergence-1024x768 -r 1024x768 emergence |
Como puedes ver, el archivo se genera dentro de la partición /boot (directorio). Sin embargo, citando a Spock, "no puedes agregar datos initramfs a una imagen initrd". En consecuencia, esta opción no pueden usarla los usuarios de genkernel, ya que genkernel crea su propia imagen initrd empleada durante el proceso de arranque. A menos que cambies la línea del kernel e initrd en grub.conf
| Archivo: /boot/grub/grub.conf |
de: root=/dev/ram0 real_root=/dev/$ROOT initrd (hd0,0)/boot/initrd a root=/dev/$ROOT initrd (hd0,0)/boot/fbsplash-emergence-1024x768 |
[editar] Creación de nuevos temas gensplash
El tema estándar 'emergence' esta en '/etc/splash/emergence'.
Si quieres crear un nuevo tema (aqui llamado 'newtheme'), debes:
1. Crear los directorios del tema necesarios en /etc/splash:
| Código: Consola |
# mkdir /etc/splash/newtheme |
2. Crear el directorio de imagenes dentro de /etc/splash/newtheme:
| Código: Consola |
# mkdir /etc/splash/newtheme/images |
y copiar las imagenes (archivos png/jpeg) que quieras en ese directorio.
3. Crear los archivos de configuración necesarios. Éstos tienen la extensión *.cfg y se deben guardar en el directorio raíz del tema (/etc/splash/newtheme). Para que tengas una idea de los archivos de configuración puedes ver el directorio del tema estándar ('emergence'):
| Código: Consola |
# ls -l /etc/splash/emergence/images/ 1024x768.cfg 1280x1024.cfg 800x600.cfg |
Es particularmente importante que te asegures de que las opciones 'jpeg=' y 'silentjpeg=' (en los archivos *.cfg) apunten a las direcciones correctas (dentro del directorio /etc/splas/newtheme/images/). Si no usas imagenes jpeg, cambia la opción jpeg por 'pic=' y 'silentpic='. Para entender en profundidad el formato del tema fbsplash, por favor dirígete a la documentación de splashutils.
| Código: Consola |
# less /usr/doc/splashutils-version/theme_format.gz |
[editar] Conversión de temas bootsplash a temas gensplash
De nuevo, Spock nos provee una utilidad llamada bootsplash2fbsplash (es un script que viene con splashutils) para convertir los temas bootsplash a temas gensplash de una forma fácil. Suponiendo que tengas un tema llamado 'gento-highquality' en /etc/bootsplash, todo lo que tienes que hacer es teclear el siguiente comando (como root):
| Código: Consola |
# bootsplash2fbsplash gentoo-highquality |
y automáticamente se creará un tema gensplash compatible en el directorio /etc/splash (/etc/splash/gentoo-highquality) con todos los archivos requeridos.
Usar los temas gensplash que tú mismo hiciste Para generar una nueva imagen del tema que acabas de crear (llamada 'newtheme', usando una resolución de 1280x1024), tendrás que usar, sorpresa sorpresa, splash_geninitramfs.
Si decidiste compilar la imagen dentro del kernel (la primera opción):
| Código: Consola |
# splash_geninitramfs -v -g /usr/src/linux/usr/initramfs_data.cpio.gz -r 1280x1024 newtheme # cd /usr/src/linux # touch usr/initramfs_data.cpio.gz # make bzImage # mount /boot # make install |
Si usas el archivo initrd (la segunda opción):
| Código: Consola |
# mount /boot # splash_geninitramfs -v -g /boot/fbsplash-newtheme-1280x1024 -r 1280x1024 newtheme |
Esto es lo que quieren decir las opciones de splash_geninitramfs:
- -v le dice a splash_geninitramfs que corra en modo no silencioso.
- -g le dice a splash_geninitramfs que genere una imagen initramfs (
/usr/src/linux/usr/initramfs_data-cpio.gz ó /boot/fbsplash-newtheme-1280x1024)
- -r le dice a splash_geninitramfs que use la resolución de 1280x1024
- -la parte de newtheme le dice a splash_geninitramfs que busque los archivos *.cfg en el directorio
/etc/splash/newtheme.
Para ver una descripción de todas las opciones de splash_geninitramfs:
| Código: Consola |
# splash_geninitramfs --help |
La última parte de este capítulo es un consejo muy útil de la documentación de splashutils:
Si quieres ahorrar algo de memoria y no estás planeando usar todas las resoluciones disponibles, probablemente sólo quieras copiar los archivos de configuración y las imagenes de la resolución que vayas a usar.
Ahora es tiempo de configurar el gestor de arranque.
[editar] Configuración del gestor de arranque (grub, lilo)
[editar] Opciones del kernel
Aquí están las opciones que tienes que incluir en los archivos de configuración de grub/lilo:
1. Es esencial especificar el driver frame buffer. Aquí se muestra la opción adecuada para el driver vesafb-tng:
| Archivo: Configuración del gestor de arranque |
video=vesafb-tng:ywrap,mtrr,1024x768-16@85 |
En el ejemplo anterior especificamos que queremos una resolución de 1024x768, una profundidad de 16 bits por pixel y una frecuencia de refresco de 85 Hz. Si usas el driver vesa-tng tendrás que eliminar la opcion 'vga=' del archivo de configuración (esta opción solo la emplea el driver vesafb normal):
| Archivo: Configuración del gestor de arranque |
# DO NOT set the 'vga=' option for vesafb-tng (if it is set, remove it): vga=791 vga=0x517 |
2. fbsplash requiere su propia opción:
| Archivo: Configuración del gestor de arranque |
splash=verbose,theme:emergence |
Primero se escoge el modo en que va a correr fbsplash (en el ejemplo modo 'verbose'). Aquí tienes un extracto de la documentación de fbsplash: "The framebuffer splash can work in two modes: verbose and silent. The first one means "console with a background image". The latter one is a concept first introduced in bootsplash. When silent mode is active, the console is switched to a graphic mode and no text is displayed. It's up to the userspace programs to display something (a progress bar for example) on the screen."
La segunda parte de la opción de fbsplash te permite especificar qué tema debe ser usado (en el ejemplo usaría el tema 'emergence'), el modo de inicio y el tema tiene que especificarse para que fbsplash funcione.
3. Si has decidido usar el archivo initrd (lee el capítulo anterior - Carga dinámica de la imagen initramfs en cada inicio), necesitas agregar una opción adicional en el archivo de configuración de tu gestor de arranque:
| Archivo: Configuración del gestor de arranque |
initrd /boot/fbsplash-emergence-1024x768 # Grub initrd = /boot/fbsplash-emergence-1024x768 # Lilo |
En el ejemplo anterior asumo que el nombre del archivo initrd es fbsplash-emergence-1024x768 y que se encuentra en la partición (o directorio) /boot. Los siguientes ejemplos son para los archivos de configuración de grub y lilo. Asumo que el nombre de tu tema es newtheme (el tema que hicimos), a una resolución de 1280x1024, 32 bits/pixel de profundidad y una frecuencia de refresco de 70 Hz. El modo especificado para fbsplash es 'silent' y usamos un archivo initrd (por eso la linea adicional 'initrd').
[editar] Archivo de configuración de Grub - Ejemplo
| Archivo: /boot/grub/grub.conf |
title Gentoo root (hd0,0) kernel (hd0,0)/kernel-2.6.8-gentoo-r1 root=/dev/hda3 video=vesafb:ywrap,mtrr,1280x1024-32@70 splash=silent,theme:newtheme initrd (hd0,0)/fbsplash-newtheme-1280x1024 |
Reemplaza (hd0,0) por la partición para /boot en tu sistema (si no usas una partición separada para /boot, usa la partición raíz y ajusta las rutas en la línea initrd). Además, ten en cuenta que la línea que comienza por video=... es continuación de la línea kernel=..., que corto intencionadamente para no dañar el formato.
Los usuarios de genkernel deben usar algo como esto (todo en una línea):
| Archivo: /boot/grub/grub.conf |
kernel (hd0,0)/kernel-2.6.8-gentoo-r1 init=/linuxrc root=/dev/hda3 video=vesafb:ywrap,mtrr,1280x1024-32@70 splash=silent,theme:newtheme |
[editar] Archivo de configuración de LILO - Ejemplo
| Archivo: /etc/lilo.conf |
image = /boot/kernel-2.6.8-gentoo-r1 label = "Gentoo" root = /dev/hda3 append="video=vesa-tng:ywrap,mtrr,1280x1024-32@70 splash=silent,theme:newtheme" read-only initrd = /boot/fbsplash-newtheme-1280x1024 |
No olvides ejecutar lilo después de editar el archivo lilo.conf:
| Código: Consola |
# mount /boot # lilo -v |
Después de todo este trabajo y de reiniciar deberías tener un arranque gráfico.
[editar] Agregar el fondo a todas las consolas
Si quieres la splash screen en todas tus consolas (las imagenes en modo 'verbose') - no sólo en la primera -, edita el archivo '/etc/conf.d/splash' para seleccionar las opciones que desees y después agrégalo al bootlevel 'default':
| Código: Consola |
# rc-update add splash default |
Si estabas usando bootsplash, quítalo de tus runlevels
| Código: Consola |
# rc-update del bootsplash |
[editar] Problemas
En construcción, regresa más tarde.
[editar] Consejos y trucos
Para personalizar el mensaje mostrado al iniciar, apagar o reiniciar el sistema basta con editar el fichero /etc/conf.d/splash y descomentar las líneas SPLASH_BOOT_MESSAGE, SPLASH_REBOOT_MESSAGE, SPLASH_SHUTDOWN_MESSAGE. Si desseas mostrar en el mensaje el porcentaje usar \$progress
El mensaje "Initializing the kernel..." es sólo personalizable si hacemos lo siguiente: Extraemos del paquete splashutils-lite-x.x.x.x.tar.bz2 el fichero splash.h, lo editamos y sustituimos la frase "Initializing the kernel..." por la que queramos, metemos el fichero modificado en el paquete otra vez, hacemos con el ebuild de splashutils "ebuild splashutils-x.x.x.x.ebuild digest" y por último "emerge splashutils" ;)
[editar] Referencias
De los Foros de Gentoos:
Documentación Local:
- Documentavión de Fbsplash (/usr/src/linux/Documentation/fb/splash.txt).
- Documentacion del Frame buffer (/usr/src/linux/Documentation/fb/framebuffer.txt).
- Documentación de Splashutils (/usr/share/doc/splashutils-0.9_pre07/).
