Cómo bootsplash y compilar kernel en Debian

Cómo bootsplash y compilar kernel en Debian





Este
artí***** ha sido publicado bajo licencia
creative commons




Por MarioDebian < mariodebian_at_gmail_dot_com >

27 de diciembre de 2.004

Actualizado 3 de enero de 2.005
(arreglado iptables)




Todos los comentarios, errores y sugerencias serán
bienvenidos.

Introducción:



Soy usuario de debian desde hace
varios meses y estoy muy satisfecho
del rendimiento del equipo con kernel
normales de debian, pero por
culpa de mi tarjeta gráfica me he visto obligado a compilar
el kernel para darla soporte. Aclarar que no lo he conseguido pero me
he quedado muy cerca. Ya de paso y más curiosidad que otra
cosa he metido el bootsplash algo que mi equipo ha agradecido porque
ahora el
arranque es digno de ver
. En
este tutorial
intentaré explicar
de manera clara como compilar un
kernel a \"la debian\" previamente aplicando los parches que necesitemos
para obtener un bonito arranque con bootsplash (arranque
gráfico con barra de progreso).



Mi equipo es un Acer Aspire 1355LM, y mi sistema es debian sarge con
los repositorios típicos de debian testing
añadiendo otros para el xfce42, mplayer y un backport de
java. Este es mi sources.list:


deb
http://ftp.rediris.es/debian testing main contrib non-free<br>
<br>
#xfce42<br>
deb http://www.os-cillation.de/debian/ binary/<br>
<br>
#mplayer<br>
deb ftp://ftp.nerim.net/debian-marillat/ testing main<br>
<br>
#via unichrome<br>
deb http://www.physik.fu-berlin.de/~glaweh/debian/ unichrome/<br>
<br>
#bootsplash<br>
deb http://www.bootsplash.de/files/debian/ unstable main<br>
<br>
#java backport<br>
deb http://jrfonseca.dyndns.org/debian/ ./




Obtención de las
fuentes y parches.

Vamos a compilar un kernel de debian por lo que usaremos el
código fuente de los kernel de debian que ya traen algunos
parches bastante interesantes como el de cramfs.



Necesitaremos las siguientes herramientas para compilar un kernel
(apt-get install xxx para instalar cada una):


Software
Package

Minimum
Version

Command
to Show Version

binutils

2.12

ld
-v

e2fsprogs

1.29

tune2fs

gcc
(GNU C Compiler)

2.95.3

gcc
--version

make
(GNU make)

3.78

make
--version

module-init-tools

0.9.10

depmod
-V

procps

3.1.13

ps
--version

util-linux

2.10o

fdformat
--version

kernel-package



initrd-tools



libncurses-dev





*
Tabla obtenida de: http://www.desktop-linux.net/debkernel.htm


# apt-get install
kernel-source-2.6.8<br>



Con esto lo que hacemos es que se descargue el archivo
kernel-source-2.6.8.tar.bz2 en /usr/src/. Debemos descomprimirlo
con:

<br>
# tar -jxf kernel-source-2.6.8.tar.bz2<br>



Con el comando anterior se crea el directorio:
/usr/src/kernel-source-2.6.8/. A
continuación crearemos el enlace simbólico
/usr/src/linux que apunte al directorio recientemente creado:


# cd /usr/src/<br>
# rm linux<br>
# ln -s /usr/src/kernel-source-2.6.8 ./linux





Ahora es cuando debemos buscar los parches que necesitemos:

  • bootsplash:

    http://www.bootsplash.de/files/

    (para nuestro kernel el
    archivo será: bootsplash-3.1.4-sp3-2.6.8.1.diff)


  • Para mi portátil
    (Acer
    Aspire 1355LM) necesito el parche epia
    para la aceleración
    gráfica:

    http://www.epiawiki.org/wiki/tiki-index.php



  • Si necesitamos
    más parches sólo debemos de descargarlos...

Una vez descargados todos los parches tendremos una serie de archivos
.diff que guardaremos en el directorio /usr/src/, si los descargamos
comprimidos hay que descomprimirlos con gunzip xxx.gz ó
bunzip2 xxx.bz2



bootsplash-3.1.4-sp3-2.6.8.1.diff (86 Kb)

patch-2.6.8.1-epia1 (863 Kb)


Configuración del
kernel.

Llegados a este punto tenemos que parchear las fuentes del kernel y
configurarlo para que se adapte a nuestras necesidades.


# cd /usr/src/linux<br>
# patch -p1 &lt; /usr/src/bootsplash-3.1.4-sp3-2.6.8.1.diff<br>
# patch -p1 &lt; /usr/src/patch-2.6.8.1-epia1





Con esto ya tenemos nuestras fuentes con los parches aplicados y listas
para configurarse. En este punto tenemos dos vías, la
primera sería optimizar nuestro kernel al hardware de
nuestro equipo, o bien basándonos en la
configuración de algún equipo parecido o bien
haciéndolo nosotros mismos a mano, y segunda
opción hacer una imagen de un kernel de debian con todo como
módulos para que ese kernel funcione en cualquier equipo.



La primera opción nos dará como resultado un
kernel muy potente y rápido (si lo hacemos bien) y
tardará sobre unos 10 o 15 minutos (en mi equipo), la
segunda opción nos dará un kernel de debian
parcheado que funcionará en cualquier equipo pero el tiempo
de compilación puede llegar a más de una hora.


  1. Configuración
    personalizada:


    Para mi equipo (Acer Aspire 1355LM) he cogido la
    configuración del kernel de gorrister
    (Acer 1353XC) y la he modificado para añadir soporte para
    bootsplash y los
    drivers de la gráfica (VIA KM 400). El resultado es
    espectacular ya que funciona casi todo (infrarrojos no los he probado y
    la gráfica no acabo de conseguirlo) El soporte para AMD
    Mobile es perfecto, acpi y usb funcionan correctamente, pendrive usb,
    impresora usb, escaner paralelo, etc...

    NOTA: Me he dado cuenta que
    con esta configuración no funcionan los netfilter por lo que
    tampoco va iptables, te recomiendo que uses la otra
    configuración si vas a usar el cortafuegos.




    El archivo de configuración lo puedes descargar desde
    aquí: config-2.6.8-mario-241204-bootsplash
    (33Kb), a continuación lo tienes que copiar al directorio de
    las fuentes:


    #
    cp
    config-2.6.8-mario-241204-bootsplash /usr/src/linux/.config




  2. Configuración
    universal
    . Esta forma es aplicable a cualquier equipo ya que nos
    basamos en la configuración del los kernel de debian. Para
    ello copiamos la configuración del kernel actual (en la
    instalación de sarge se puede instalar el kernel
    2.6.8-1-386) cuya configuración está en el
    directorio /boot/. Con esta
    configuración funciona correctamente todo (iptables incluido),
    la he optimizado para AMD K7, si tienes otra arquitectura antes de
    compilar cámbialo en Processor type... La puedes descargar desde
    aquí



    # cp
    /boot/config-2.6.8-2005-01-02 /usr/src/linux/.config<br>
       

Empecemos con la configuración:


#
make menuconfig<br>
<br>

Con el menuconfig
nos
saldrá el configurador del kernel, lo
primero que tenemos que hacer es en la penúltima
opción indicar que cargue la configuración que
por defecto será .config en el directorio de las fuentes.



Es muy importante una buena configuración para que todo
funcione
a la primera.



No voy a explicar todas las opciones ya que muchas estan comentadas y
existen muchísimas guias para compilar kernel (con o sin
debian)



Como opinión personal prefiero que mi kernel no tenga la
imagen de arranque initrd.img, pero en debian esto se usa para
precargar un sistema que monte el sistema de archivos y así
poder tener por ejemplo ext3 como módulo. Más
tarde veremos que el bootsplash la necesita.



Recomiendo que dentro del apartado de sistema de archivos el tipo de
partición del equipo se use incluido en el kernel (*) y no
módulo (M) para ext2 y ext3. Si se hace esto se debe incluir
en el kernel también las opciones de dispositivos IDE o

SATA...



Para la primera opción (kernel personalizado) no es
necesario modificar nada ya que a mi me funciona todo (menos la
gráfica).



Para la opción de un kernel debian modifica el tipo de
procesador en el menú Processor
type and
features  --->
y
selecciona tu modelo de procesador y familia.



En los portátiles simpre es recomendable ahorrar
energía (batería) así que en el
menú:  Power management
options
(ACPI, APM)  --->

selecciona ACPI e incluye los módulos de ac, battery,
button, thermal, etc...



En CPU
Frequency scaling
es
recomendable activar el escalado de frecuencia para que nuestro
procesador trabaje a más velocidad cuando se necesite y a
menos cuando no este en uso (menor temperatura y mayor
duracción de la batería).



En el menú: Device
Drivers-->
Block devices  --->

hay que activar:



<*>
Loopback device support

<*> RAM disk support

(4096) Default RAM disk size (kbytes)

[*]   Initial RAM disk (initrd) support

[*] Support for Large Block Devices



En el menú:
Device
Drivers-->
Input device support  --->



[*]   Provide legacy /dev/psaux device

(1024) Horizontal screen resolution

(768) Vertical screen resolution

[*] Enable /dev/psaux device by default



[*] Mice

<*>   PS/2 mouse



[*]
Misc

<M>   PC Speaker support

<M>   User level driver support



En el menú: Device Drivers-->
Character devices  --->



[*]
Legacy (BSD) PTY support

(256) Maximum number of legacy PTY in use

<*> Parallel printer support



<M> Intel/AMD/VIA HW Random Number Generator support

<M> /dev/nvram support

<M> Enhanced Real Time Clock Support

<M> Generic /dev/rtc emulation



<M> DirectFB CLE266 Support

<M> /dev/agpgart (AGP Support)



<M>   VIA chipset support



[*] Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)

<M>   Via unichrome video cards



En el menú: Graphics support
  --->



<M>   VGA 16-color graphics support

<*>   VESA VGA graphics support



<M>   VIA CLE266 support (EXPERIMENTAL)



 <M> Virtual Frame Buffer support (ONLY FOR
TESTING!)



Console display driver support-->

    --- VGA text console

    [*]   Video mode
selection support

    <*> Framebuffer Console
support



Bootsplash configuration  --->

    [*] Bootup splash screen



Dentro del apartado de sonido
usaremos alsa con el driver PCI:

<M> VIA 82C686A/B, 8233 South Bridge



Y los usb activaremos el que
esta marcado como VIA.



Creo que no es necesario que explique más configuraciones ya
que se escapa del alcance de este pequeño tutorial.



A continuación le damos a salir y nos preguntará
si queremos guardar los cambios en .config, le decimos que
sí.

Creación del
paquete deb.

Usaremos la herramienta make-kpkg
de debian para crear un paquete deb con nuestro kernel, incluso con las
fuentes parcheadas y las cabeceras. Añadiremos una
versión a nuestro kernel para que sea personalizado y no use
la configuración de otros kernel. Para el kernel genérico
(2005-01-02) es necesario crear una imagen initrd.img.





#
fakeroot make-kpkg <span style=\"color: rgb(255, 0, 0);\">--initrd</span>
-append-to-version .241204 binary





binary
Este objetivo produce
los cuatro paquetes del núcleo de Debian 
ejecutando  los  objetivos kernel_source,
kernel_headers, kernel_doc y kernel_image. (extraido del man make-kpkg)



Si sólo queremos el kernel-image la órden es
ésta:


# fakeroot make-kpkg

<span style=\"color: rgb(255, 0, 0);\">--initrd </span>

-append-to-version
.241204 kernel_image





Estamos añadiendo a la versión del kernel la
coletilla \".241204\", que es la fecha en la que YO compile mi kernel, es
una buena idea poner la fecha ya que así sabremos cual es
más nuevo si tenemos varios. Cámbiala por la
fecha en la que hagas el paquete.



Despues de un rato, 15 minutos para un kernel personalizado y hasta
más de una hora para uno a lo debian tendremos en /usr/src/
nuestro kernel listo para ser instalado:
kernel-image-2.6.8.241204_10.00.Custom_i386.deb



Durante la instalación modificará las entradas de
grub o lilo, según el caso para añadir el nuevo
kernel. Es aconsejable hacer una copia antes del archivo
/boot/grub/menu.lst o /etc/lilo.conf por si acaso algo no sale bien.


# dpkg -i
/usr/src/kernel-image-2.6.8.241204_10.00.Custom_i386.deb





Si no ha dado errores antes de reiniciar instalaremos el bootsplash.



Para la configuración
genérica antes es mejor comprobar que nuestro kernel arranca con
el initrd creado. Si no arrancase creamos la imagen a mano:




# cd /boot/

# mkinitrd -o  /boot/initrd.img-2.6.8-2005-01-02 2.6.8-2005-01-02

Instalación del
bootsplash.



Para ello editaremos /etc/apt/sources.list y añadiremos la
siguiente línea:


deb
http://www.bootsplash.de/files/debian/ unstable main





Después actualizamos e instalamos lo que necesitamos:


# apt-get update<br>
# apt-get install bootsplash sysv-rc-bootsplash
bootsplash-theme-tuxinfo-debian<br>



Nos saldrá una advertencia sobre el parcheado de los
archivos /etc/rc y /etc/rcS que son los que arrancan los servicios de
debian y que después de parchear son los que hacen avanzar a
la barra de progreso.



Saldrá una ventana de configuración que es para
crear la imagen initrd necesaria para el bootsplash. Hay que elegir none
para que la imagen se cree sin basarse en ninguna. Para el kernel genérico hay que
seleccionar la imagen initrd.img-2.6.8-2005-01-02, para que bootsplash
la aplique el parche.
Ese archivo recien
creado será /boot/initrd.splash,
que tenemos que añadir al arranque de lilo o grub. Para grub
la entrada correcta para que funcione el bootsplash es:


title&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Debian kernel 2.6.8 bootsplash<br>
root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
(hd0,4)<br>
kernel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
/boot/vmlinuz-2.6.8.241204 root=/dev/hda5 ro vga=791 splash=silent<br>
initrd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
/boot/initrd.splash<br>
savedefault<br>
boot





Donde tendrás que poner el número de disco duro y
partición correcta para tu sistema:

(hd0,4)

root=/dev/hda5



Reiniciamos y deberíamos tener un bonito arranque
gráfico, pulsando F2 veremos los mensajes del kernel
según arranca y si el equipos es como el mío
debería funcionar todo.



Eso es todo. Si piensas que me he dejado algo en el tintero o hay
algún error, hazmelo saber en: mariodebian (arroba) gmail
(punto) com.





Links útiles:



http://www.bootsplash.de/

http://www.bootsplash.org/

http://www.desktop-linux.net/bootsplash.htm

http://gorrister.no-ip.org/aspire-1353xc-howto.html