8.3.1. Instalación del núcleo
Construir el núcleo comprende varios pasos: configuración,
compilación e instalación. Mira en el fichero README del árbol de fuentes del núcleo los métodos
de configuración del núcleo alternativos al utilizado en este
libro.
Prepara la compilación ejecutando el siguiente comando:
make mrproper
Esto asegura que el árbol del núcleo está completamente limpio. El
equipo del núcleo recomienda que se ejecute este comando antes de
cada compilación del núcleo. No debes confiar en que el árbol de
las fuentes esté limpio tras desempaquetarlo.
Igualmente, asegurate de que el núcleo no intente pasar los eventos
hotplug al espacio de usuario hasta que el espacio de usuario esté
preparado:
sed -i 's@/sbin/hotplug@/bin/true@' kernel/kmod.c
Si en la Sección 7.6, “Configurar
la consola Linux”, decidiste compilar el mapa del teclado
dentro del núcleo, ejecuta el siguiente comando:
loadkeys -m /usr/share/kbd/keymaps/[ruta al mapa del teclado] > \
drivers/char/defkeymap.c
Por ejemplo, usa /usr/share/kbd/keymaps/i386/qwerty/es.map.gz si
tienes un teclado español.
Configura el núcleo mediante una interfaz de menús:
make menuconfig
Alternativamente, make oldconfig
puede ser más adecuado en algunas situaciones. Lee el fichero
README para más detalles.
Nota
Cuando configures el núcleo, asegúrate de activar la opción
“Support for hot-pluggable
devices” (Soporte para dispositivos conectables en
caliente) que se encuentra en el menú “General Setup” (Configuración general).
Esto activa los eventos hotplug usados por udev para poblar el directorio /dev con nodos de dispositivo.
Si lo deseas, sáltate la configuración del núcleo copiando el
fichero de configuración del núcleo, .config, de tu sistema anfitrión (asumiendo que
esté disponible) al directorio linux-2.6.8.1. Sin embargo, no recomendamos esta
opción. Con frecuencia es mejor explorar todos los menús de
configuración y crear tu propia configuración del núcleo desde
cero.
Para el soporte de la memoria compartida POSIX, asegúrate de que
esté activada la opción de configuración del núcleo
“Virtual memory file system
support” (Soporte del sistema de ficheros de memoria
virtual). Se encuentra en el menú “File
systems” (Sistemas de ficheros) y normalmente está
activada por defecto.
Los guiones de arranque de LFS asumen que tanto “Support for Host-side USB” como
“USB device filesystem” han
sido compilados dentro del núcleo o no se han compilado. Los
guiones de arranque no funcionarán bién si se trata de un módulo
(usbcore.ko).
Nota
NPTL requiere que el núcleo sea compilado con GCC 3.x, en este
caso 3.4.1. Se sabe que compilarlo con 2.95.x provoca fallos en
el banco de pruebas de Glibc, por lo que no es recomendable
compilar el núcleo con GCC 2.95.x.
Compila la imagen del núcleo y los módulos:
make
Si utilizas los módulos del núcleo puede que necesites un fichero
/etc/modprobe.conf. La información
relativa a los módulos y a la configuración del núcleo en general
puedes encontrarla en el directorio /usr/src/linux-2.6.8.1/Documentation, que contiene
la documentación del núcleo. La página de manual de modprobe.conf puede que también sea de
interés.
Ten mucho cuidado cuando leas otra documentación, pues normalmente
sólo es aplicable a los núcleos 2.4.x. Hasta donde nosotros
sabemos, los temas de configuración del núcleo específicos para
Hotplug y Udev no están documentados. El problema es que Udev
creará un nodo de dispositivo sólo si Hotplug o un guión escrito
por el usuario inserta el módulo correspondiente en el núcleo, y no
todos los módulos son detectables por Hotplug. Advierte que
sentencias como la mostrada a continuación en el fichero /etc/modprobe.conf no funcionarán con Udev:
alias char-major-XXX cualquier-módulo
Debido a las complicaciones con Hotplug, Udev y los módulos,
recomendamos encarecidamente comenzar con una configuración del
núcleo que sea por completo no modular, especialmente si es la
primera vez que utilizas Udev.
Instala los módulos, si la configuración del núcleo los utiliza:
make modules_install
Si tienes muchos módulos y muy poco espacio, puede que quieras
considerar eliminarles los símbolos y comprimirlos. Para muchos
dicha compresión no compensa el tiempo, pero si realmente estás
presionado por el espacio, mira
http://www.linux-mips.org/archives/linux-mips/2002-04/msg00031.html.
Tras completar la compilación se necesitan algunos pasos
adicionales para completar la instalación. Es necesario copiar
varios ficheros al directorio /boot.
La ruta a la imagen del núcleo puede variar dependiendo de la
plataforma que utilices. Ejecuta el siguiente comando para instalar
el núcleo:
cp arch/i386/boot/bzImage /boot/lfskernel-2.6.8.1
System.map es un fichero de símbolos para
el núcleo. Mapea los puntos de entrada de cada una de las funciones
en la API del núcleo, al igual que las direcciones de las
estructuras de datos del núcleo para el núcleo en ejecución.
Ejecuta el siguiente comando para instalar el fichero de mapa:
cp System.map /boot/System.map-2.6.8.1
.config es el fichero de configuración
del núcleo creado por el paso make
menuconfig anterior. Contiene todas las selecciones de
configuración para el núcleo que se acaba de compilar. Es buena
idea guardar este fichero como referencia futura:
cp .config /boot/config-2.6.8.1
Es importante advertir que los ficheros del directorio de las
fuentes del núcleo no son propiedad de root. Cuando se desempaqueta un paquete
como usuario root (como
hacemos dentro del chroot), los ficheros acaban teniendo los
identificadores de usuario y grupo que tenían en la máquina en la
que se empaquetaron. Esto normalmente no es problema para cualquier
otro paquete que instales debido a que eliminas las fuentes tras la
instalación. Pero con frecuencia el árbol de las fuentes de Linux
se guarda durante mucho tiempo, por lo que es posible que el ID de
usuario del empaquetador sea asignado a alguien en tu máquina y
entonces dicha persona podría tener permiso de escritura en las
fuentes del núcleo.
Si vas a guardar el árbol de las fuentes del núcleo, ejecuta
chown -R 0:0 sobre el directorio
linux-2.6.8.1 para asegurar que todos los
ficheros son propiedad de root.