Instalando Linux Kernel-2.4.18

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  132 MB

Instalación del Núcleo Linux

No compilaremos todavía una nueva imagen del núcleo (kernel). Eso lo haremos después de que acabemos la instalación del software del sistema base de este capítulo. Pero como ciertos programas necesitan los ficheros de cabecera (headers) del núcleo, vamos a desempaquetar el archivo del núcleo ahora e instalar esos ficheros y así poder compilar los paquetes que necesitan el núcleo.

Los ficheros de configuración del núcleo se crean ejecutando los siguientes comandos:

make mrproper &&
make include/linux/version.h &&
make symlinks &&
mkdir $LFS/usr/include/asm &&
cp include/asm/* $LFS/usr/include/asm &&
cp -R include/linux $LFS/usr/include &&
touch $LFS/usr/include/linux/autoconf.h

Explicación de los comandos

make mrproper: Esto asegurará que el árbol de directorios del núcleo está absolutamente limpio. Lo hacemos porque el equipo de desarrollo del núcleo recomienda hacerlo antes de cada compilación del núcleo, y porque no debemos confiar en que el árbol de directorios del código fuente está automáticamente limpio tras desempaquetarlo.

make include/linux/version.h y make symlinks: Esto crea el fichero include/linux/version.h, así como el enlace simbólico include/asm

mkdir $LFS/usr/include/asm y cp include/asm/* $LFS/usr/include/asm: Esto copia los ficheros de cabecera del núcleo dependientes de la plataforma en $LFS/usr/include/asm

cp -R include/linux $LFS/usr/include: Este comando copia los ficheros de cabecera del núcleo independientes de la plataforma en $LFS/usr/include

touch $LFS/usr/include/linux/autoconf.h: Algunos ficheros de cabecera del núcleo incluyen el fichero autconf.h pero, como fuera del árbol de directorios de código fuente de Linux ese fichero no tiene significado, sólo creamos un fichero vacío para no tener errores de compilación cuando haya una dependencia de otro fichero de cabecera del núcleo.

El porqué de copiar las cabeceras del núcleo y no hacer enlaces simbólicos a ellas.

En el pasado, era una práctica común enlazar simbólicamente los directorios /usr/include/linux y asm con /usr/src/linux/include/linux y asm, respectivamente. Esta es una mala idea, como señala este extracto de un mensaje de Linus Torvalds a la Lista de Correo del Núcleo Linux:

Sugeriría que la gente que compile núcleos nuevos debe:

 - no tener un sólo enlace simbólico a la vista (excepto el que crea la
   misma construcción del núcleo, el enlace simbólico llamado
   "linux/include/asm", que sólo se usa para la compilación interna del
   mismo núcleo).

Y sí, esto es lo que yo hago. Mi /usr/src/linux todavía contiene los
ficheros de cabecera del antiguo 2.2.13, aunque no he ejecutado un
núcleo 2.2.13 desde hace _muucho_ tiempo. Pero esas fueron las cabeceras
con las que fue compilada glibc, por lo que esas cabeceras son las que
coinciden con los ficheros objeto de la librería.

Y este es, de hecho, el entorno que se ha sugerido en, al menos, los
últimos cinco años. No sé por qué el asunto del enlace simbólico sigue
coleando, como un mal zombi. Casi cada distribución todavía tiene ese
enlace simbólico roto,  y la gente todavía recuerda que el código fuente
de linux debe ir en "/usr/src/linux" aunque no ha sido cierto desde hace
_muucho_ tiempo.

La parte relevante de este mensaje es donde él afirma que las cabeceras deberían ser con las que fue compilada glibc. Estas son las cabeceras que deberían permanecer accesibles y por ello, copiándolas, nos aseguramos de que seguimos esa pauta. Fíjate también en que, como no tienes esos enlaces simbólicos, es adecuado tener el código fuente del núcleo en /usr/src/linux.

Contenido de kernel-2.4.18

Dependencias

Para instalar Linux-2.4.18 se necesita lo siguiente:


bash: sh
binutils: ar, as, ld, nm, objcopy
fileutils: cp, ln, mkdir, mv, rm, touch
findutils: find, xargs
gcc: cc1, collect2, cpp0, gcc
grep: grep
gzip: gzip
make: make
gawk: awk
modutils: depmod, genksyms
net-tools: dnsdomainname, hostname
sed: sed
sh-utils: basename, date, expr, pwd, stty, uname, whoami, yes
textutils: cat, md5sum, sort, tail