Compilacion de Linux Kernel

Iniciado por ..sR. aDiKtO.., 2 Septiembre 2002, 21:49 PM

0 Miembros y 1 Visitante están viendo este tema.

..sR. aDiKtO..

.===============================
-- Autor: Wendell
-- Desidents Espanña www.desidents.org
-- Fuente: http://www.jsnv.org/textos/lin_004.html
.================================.
|===========~ INDICE ~===========
|================================
|=~ 1 - Introduccion |
|=~ 2 - Requisitos para compilar el kernel |
|=~ 3 - Obtencion del fuente |
|=~ 4 - Manos a la obra |
|=~ 5 - Arranque con el nuevo kernel |
|=~ 6 - Parchear una version inferior del kernel para actualizarlo |

====================~ INDICE ~============



|=======~ 1 INTRODUCCION ~===============


En GNU/Linux tenemos la posibilidad de poder compilar el nucleo de nuestro
sistema para poder adaptarlo a nuestras necesidades, es el encargado de que
el software y el hardware de tu ordenador puedan trabajar conjuntamente, las
distribuciones actuales de Linux suelen traer un kernel precompilado que
incluye las configuraciones mas comunes. Algunos se preguntaran:

¿esrealmente necesario actualizarme al ultimo kernel cada vez que este ten
gauna nueva version?

Bien, las ultimas versiones del kernel suelen traercorreciones de progr-
amacion, nuevos soportes para distintas funciones etc.Si todas estas nuev-
as caracteristicas que se han añadido no la vamos autilizar, pues real-
mente no necesitariamos compilar un kernel nuevo, aunque siempre es bueno
actualizarse cuando el kernel que poseemos ya se estaquedando un poco
desfasado. Al compilar un nuevo nucleo definimos en granmedida su comporta-
miento,podemos dar soporte a distintos tipo de filesystems, hardware, protoc-
olos de red, SCSI etc.

|=======~ 2- REQUISITOS PARA COMPILAR EL KERNEL ==========

Para compilar el nucleo es necesario tener previamente algunas herramientas
instaladas y configuradas, algunas son bastantes obvias, como el compilador
gcc,el compilador de lenguaje C "entre otros" de GNU, el kernel esta escrito
en C en su mayoria, si no recuerdo mal, el 99% es C, y 1% esamblador. Aqui
pongo un pequeño listado de las herramientas necesarias para la compilacion

GCC
make
ncurses
ncurses-dev
bin86
libc6
libc6-dev
binutils.

Si os faltase alguno de estos requisitos deberiais buscarlos en
http://www.freshmeat.net , http://www.rpmfind.net o en http://www.google.com
.No hace falta decir que para compilar el kernel tenemos que estar como super
usuario (root).

|=======~ 3- OBTENCION DEL FUENTE ============


Para poder bajarnos el kernel de Linux solo debemos ir a su pagina oficial:

http://www.kernel.org

aqui encontraremos un servidor de ficheros al que sepuede acceder mediante
http, ftp y rsync, el camino mas corto es descargandodirectamente el fichero
que sale al lado de:

The latest stable version of theLinux kernel is: 2.*.* .

En la realizacion de este articulo, la ultimaversion es la 2.4.17, siem-
pre es una buena idea leer un poco sobre los bugs del kernel que nos quer-
emos descargar y decidir si es recomendable o nocompilarlo. Nosotros va-
mos a poner de ejemplo la version 2.4.17, asi que nosdirigimos hacia:

http://www.kernel.org/pub/linux/kernel/v2.4/

una vez que lapagina este cargada nos daremos cuenta de que aqui se encue-
ntran todos losnucleos 2 .4.* , aqui encontraremos los distintos ficheros
con distintasextensiones.

linux-2.4.17.tar.bz2 --- 22.7 Mblinux-2.4.17.tar.gz ---- 28.4 Mb

Ahora nos tenemos que bajar cualquiera de los ficheros, es mejor que os
bajeis el tar.bz2, puesto que ocupa 6 Megas menos . Los diferentes numeros
del nucleo indican la version del kernel, el primero es el general 2.*.*, el
segundo segun sea par o impar indica si es estable o si esta en desarollo
2.4.* , y el tercer y ultimo numero indica la revision en la que se
encuentra, 2.4.17..


|=======~ 4- MANOS A LA OBRA ================

Bien, una vez que se hayan bajado los 22.1 Mb en nuestro disco duro,
procederemos a descomprimirlo y a destarearlo en /usr/src/ con el siguiente
comando:
---------------------------------------------------------------------------|
En el caso de haber bajado: linux-2.4.17.tar.bz2 ||
# tar xyf linux-2.4.17.tar.bz2
|--------------------------------------------------------------------------|
En el caso de haber bajado: linux-2.4.17.tar.gz ||
# tar -xzvf linux-2.4.17.tar.bz2
|--------------------------------------------------------------------------|

Con esto se habra creado una carpeta nueva llamada linux, pues bien, nos
metemos dentro y estaremos situados en /usr/src/linux/. Ahora debemos elegir
el metodo por el cual vamos a compilar el nuevo kernel, en total hay tres,
los tres son igualmente validos y suele ser cuestion de gusto cual manejar,
estos tres metodos son: make config, make menuconfig y make xconfig. Ahora
vamos a analizar estos tres metodos:

---------------1- make config-----------------------------------------------
Este en el metodo mas complejo que podemos escoger, solo es recomendable
para usuarios experimentados, ya que se basa todo en metodo texto, sin
colores, ni menus, tambien hay que seguir un orden muy estricto, y se hecha
en falta ayudas en el proceso.

---------------2- make menuconfig-------------------------------------------
Este metodo es mucho mas recomendable que el anterior, no es en modo grafico,
pero se maneja de forma similar desde el teclado, con la barra espaciadora
marcamos y desmarcamos las opciones a compilar, y con los cursores nos movemos.
Tambien permite cargar opciones ya guardadas para retocarlas o hacer la misma
compilacion. Dispone de menus de ayuda, cosa que no poseia make config.
----------------3- make xconfig----------------------------------------------
Este es el metodo mas recomendable para los usuarios novatos o inexpertos en
el tema de compilacion del kernel. Este metodo es 100% grafico solo permite
usar raton, igual que el anterior este permite cargar y guardar
configuraciones, posee tambien menus de ayuda.
*****************************************************************************
Bien, una vez que tengais claro que opcion os gusta mas, solo debeis poner en
el terminal el make de esta misma, y seguidamente teneis que escoger las opc-
iones que quereis compilar.Una vez que hayais escogido todas esas opciones de
compilacion, pasamos a la compilacion en si.

1- En el terminal ejecutaremos:

make dep

Este comando crea las dependencias necesarias para poder compilar el kernel
correctamente
2- Ahora ejecutamos

make clean

Esto borra lo posibles binarios existentes para poder crear los nuevos de
forma limpia y ordenadada
3- Y por ultimo

make bzImage

Este es el ultimo comando para compilar el kernel, una imagen se creara en:
/usr/src/linux/arch/i386/boot/ , esta imagen se llama bzImage, que mas tarde
servira para poder arrancar el equipo con el nuevo kernel compilado, esto se
puede hacer de dos maneras: la primera es editando el lilo y la seguna es
cear un disco de inicioBien, como podreis comprobar hemos tecleado estos tres
comandos por separado, cuando uno terminaba pues ejecutabamos el siguiente,
pues bien, esto se puede todo de golpe, y se hace con el siguiente comando:

make dep && make clean && make bzImage

La duracion de la compilacion del nucleo puede variar mucho dependiendo de
la velocidad de tu ordenador, puede tardar desde 10m, 20m, 40m ....Ahora solo
queda instalar los modulos, que se realizan con el siguiente comando:

make modules && make modules_install ,

Este comando instala los modulos en /lib/modules/version_kernel


|=======~ 5- ARRANQUE CON EL NUEVO KERNEL ~=============

Hay dos formas de poder usar linux con el nuevo kernel, una de ellas es edi-
tando el lilo, y la otra es creando un disko de arranque, para los despista-
dos que no sepan lo que es el lilo, pues sencillamente es un gestor de arra-
nque muy versatil que permite iniciar un sistema operativo (SO) cargan-
do el sector de arranque de una partición del disco duro.

-------------------------*** arrancar con lilo ***-------------------------
Bien primero veamo como arrancar usando el lilo, lo primero que debemos de
hacer es copiar la imagen del kernel nuevo en /boot , esto se hace con el
siguiente comando:

cp /usr/src/linux/arch/i386/boot/bzImage /boot

Seguidamente no dirigimos /boot y cambiamos el nombre del bzImage por:
vmlinuz-2.4.17 , el cambio de nombre se realiza de esta manera siguiente

mv bzImage vmlinuz-2.4.17

Ahora debemos copiar tambien el System.map que se encuentra en
/usr/src/linuxa /boot , esto lo hacemos con este comando:

cp /usr/src/linux/System.map /boot/

Si te pregunta si deseas sobreescribir le dices que si, antes de hacer este
ultimo comando seria recomendable copiar el antiguo el System.map en cualqu-
ier directorio por razones de preaucatividad. Bien ya tenemos la imagen del
kernel2.4.17 y la System.map en /boot, ahora abrimos el archivo de configur-
acion del lilo, este se encuentra en: /etc/lilo.conf , una vez abierto deb-
emos editarlo para añadir una nueva entrada para el nuevo kernel, normalmen-
te con solo añadir las siguientes lineas ya valdria:

image=/boot/vmlinuz-2.4.17 label=linux_2.4.17 root=/dev/hde6
-----------------------------------------------------------------------------
read-only--------------------------------------------------------------------

*nota: como podeis comprobar /dev/hde6 es la particion donde esta
|| instalado linux en mi maquina, si no sabeis en que particion esta||
||instalada la vuestra, solo debeis poner en el terminal: df , y en ||
||la linea en el cual salga el directorio raiz / es la particion en ||
||la que esta vuestro linux, si la vuestra no es hde6 pues la ||
||deberiais cambiar por la que salga.En mi caso es ||
||
Filesystem Size Used Avail Use% Mounted on ||
/dev/hde6 4.7G 1.1G 3.4G 24% /
|---------------------------------------------------------------------
Ahora deberiamos guardar el lilo.conf con la nueva entrada, y en el terminal
pondriamos:

lilo

Y como resultado nos tendria que dar algo como esto:

Added linux *Added linux_2.4.17Si tuviesemos mas sistemas operativos, pues
saldran Added y el nombre de SO.

Bien, ahora reiniciamos el sistema, y cuando nos saldriese el lilo deberiamos
ver una entrada con el siguiente nombre: linux_2.4.17 , pues le damos para
arrancar y todo deberia salir bien, si quieres que el nuevo kernel sea el que
se inicie por defecto solo debes sustituir la linea: default=* por

default=linux_2.4.17

Y volveriamos a poner lilo en el terminal --------------------------------
*** arrancar con un diskete ***--------------------------------
lo primero es que debemos de tener es un diskete formateado, para formatear
un disekete en Linux se hace con de este el siguiente comando:

fdformat /dev/fd0

Despues nos vamos a: /usr/src/linux/ y ejecutamos el siguiente comando:

mkbootdisk

Ahora sigues estos sencillos pasos, lo configuras y reinicias booteando desde
el diskete.
||---------------------------------------------------------------||
||*nota: para comprobar si estas en el kernel 2.4.17 solo debes ||
|| ejecutar este comando: uname -r , os deberia salir: 2.4.17 , ||
||con uname -a obtendras mas informacion sobre el sistema
|-----------------------------------------------------------------

|=======~ 6- PARCHEAR UNA VERSION INFERIOR DEL KERNEL PARA ACTUALIZARLO ====

El parche para el kernel de Linux es un archivo que contiene informacion
sobre las lineas de codigo que han cambiado desde la penultima version del
nucleo, por ejemplo, si tienes la version del kernel 2.4.16 y quieres
actualizarte a la 2.4.17 pues solo deberias bajarte el parche:
patch-2.4.17.bz2 ,

que solo ocupa 388 kb en vez de los 22.7 Mb del nucleo nuevo, esto supone un
ahorro considerable de tiempo para usuarios que no disponemos de conexiones
rapidas. Supongamos que tienes el kernel 2.4.14, y quieres disponer de la Ve
rsion 2.4.17 sin tener que bajarte el nucleo entero, pues entonces tendrias
que bajarte los parches patch-2.4.15.bz2, patch-2.4.16.bz2 ,patch-2.4.17.bz2.

Con estos dosejemplos creo que todo ha quedado mas claro, ahora pasemos a la
accion.Una vez que este bajado el parche lo copias a /usr/src con el siguie-
nte comando:

cp patch-XX.YY.ZZ.gz /usr/src/

Ahora descomprimes el fichero con:

bunzip patch-XX.YY.ZZ.bz2

Aplica el parche con:

patch -s -p0 < patch-XX.YY.ZZ

A continuacion entras en /usr/src/linux y ejecutas

make clean
make xconfig
make dep
make bzImage

Ahora te toca leer desde: | arranque con el nuevo kernel | , que esta un poco
mas arriba.


AbeToRiuS

Adikto, he movido este post a esta sección que creo que es mas adecuada.

..sR. aDiKtO..

Yo la keria poner en esta sección pero no tengo pribilegios, me parece de pm AbeToRiuS k la hayas movido.

ice

bueno io voy a decir algo tal ves les sirva a alguno... yo soy un tipo vago jejeje asi que tambien los pasos para compilar el kernel pueden ser asi: make menuconfig (se ponen a seleccionar lo que necesiten, no pongan cosas de mas porque es al pedo) despues escribimos asi:  make dep;  make clean; make bzImage; make modules; make modules_install; make bzlilo y listo con esas lineas con los ; (punto y coma) hacen que se vayan ejecutando los comandos en el orden que los escribieron y asi con el make bzlilo no tendran que tocar el lilo.conf ni ninguna otra cosa porque se setea solo :)

kfault

Una pregunta, que tengo que hacer si en vez de tener Lilo tengo Grub? Me refiero por la sección de "Arranque con el nuevo kernel".

Gracias.