compilacion kernel 2.6.xx

Horst von Brand vonbrand en inf.utfsm.cl
Mar Feb 15 00:31:19 CLST 2005


"Muad'Dib" <muaddib en interaccess.cl> dijo:
> Hace muuuuuuucho tiempo que no compilo un kernel, pero te adjunto un 
> "howto" propio que generé en esos tiempos.
> 
> Está basado en Kernel 2.4, pero imagino que las cosas no han cambiado 
> tanto, espero te sirva.

Han cambiado un buen resto...

> Compilación y actualización de nuevos Kernel y patches ....
> 
> a) Bajar Kernel y patches que se desean actualizar, en este caso:
>    ( Se pueden bajar de la dirección: http://kernel.org/ )
> 	linux-2.4.17.tar.gz
> 	patch-2.4.18-pre2
> 	patch-2.4.18-pre3

No. Los patch-2.4.18-xyz son siempre directamente contra 2.4.17 (el
inmediatamente previo).

> b) Cambiar nombre al patch para dejarlo con extensión de comprimido
> 	mv patch-2.4.18-pre2{,gz}
> 	mv patch-2.4.18-pre3{,gz}

Si no estan comprimidos, no sacas nada con esto. Si estan comprimidos,
vienen con el nombre correcto... y bzip2(1) es mucho mejor comprimiendo.
Pero alla tu.

Y tambien esta scripts/patch_kernel...

> c) Descomprimir el Kernel y el patch
> 	tar zxvf linux-2.4.17.tar.gz

v es para marearse por el listado de archivos extraidos...

> 	gunzip patch-2.4.18-pre2.gz
> 	gunzip patch-2.4.18-pre3.gz

Bajas no comprimidos, cambias de nombre para hacerlos comprimidos,
descomprimes...

> d) Actualizar los patch en el kernel "pre2"
> 	patch -p0 < patch-2.4.18-pre2

En el directorio raiz del nucleo desempaquetado:

  zcat /donde/sea/esta/patch-2.4.18-pre2.gz | patch -p1 

(o bzcat(1) segun sea). Ver patch(1).

> e) Desactualizar los patch "pre2" en el kernel y actualizar "pre3"
> 	patch -R -p0 < patch-2.4.18-pre2
> 	patch -p0 < patch-2.4.18-pre3

patch(1)

> f) Cambiar el nombre del directorio que se crea de "linux" a
>    "linux-2.4.18" ( linux-{version} ) y moverlo a /usr/src
> 	mv linux linux-2.4.18
> 	mv linux-2.4.18 /usr/src

Mejor desempaquetar directamente alli... y no estar cambiando nombres, usar
-p1. patch(1).

> g) Opcionalmente, generar un nuevo link simbólico de linux a el
>    directorio que se acaba de mover. Si ya existe un directorio
>    o link llamado "linux", debe borrarse primero.
>    	ln -s linux-2.4.18 linux

ln -sf (ln(1))

> h) Copiar archivo con la configuración para usarlo de base.
> 	cp /usr/src/linux-2.2.16/configs/kernel-2.2.16-i686.config .

Eso suponiendo p.ej. Red Hat (que deja sus configuraciones en el fuente del
nucleo de la distro alli). No es universal.

> i) Abrir configuración del kernel y hacer "load" del archivo de
>    configuración copiado.  A partir de él hacer las modificaciones
>    deseadas y/o necesarias.
>    	make xconfig

  make menuconfig   # Curses
  make xconfig      # X11

Si ya tienes una configuracion previa:

  make oldconfig

solo consulta por las opciones que son nuevas.

> j) Seguir con los otros pasos de la compilación e instalación.
>    (Verificar que cada paso termine sin errores, antes de ejecutar
>     el siguiente).
>     	make dep
> 	make clean  (Si ya se ha instalado anteriormente)
> 	make bzImage
> 	make modules
> 	make modules_install

En 2.6 el dep no es necesario (no existe, creo), y clean es (casi)
superfluo. Para compilar en nucleo &c, "make all".

>     Nota: si se está seguro, se pueden colocar todas en una sola
>           orden:  make dep clean bzImage modules modules_install

Urgh.

  make modules_install install

en FC3 al menos corre un script que genera el initrd y demas automaticamente.

> k) Copiar kernel compilado y comprimido a su ubicación.
> 	cp arch/i386/boot/bzImage /boot/kernel-2.4.18{-pre3}.bz
> 
> l) Generación del RAMdisk para el booteo
> 	mkinitrd /boot/initrd-2.4.18{-pre3}.img 2.4.18{-}{pre3} (/lib/modules/2.4.)

Innecesario.

> m) Modificar /etc/lilo.conf, agregando nuevo punto de booteo.
> 	image = /boot/kernel-2.4.18{-pre3}.bz
> 	label = linux-2.4.18{-p3}
> 	root = /dev/hda

Idem. Por lo demas, grub(8) es mucho mas funcional...

> p) Para eliminar la versión de Kernel "2.4.18-pre2" que ya no se ocupará,
>    se deben borrar los siguientes archivos
> 	rm /boot/kernel-2.4.18-pre2.bz
> 	rm /boot/initrd-2.4.18-pre2.img
> 	rm -R /lib/modules/2.4.18pre2

De donde sacas esto?! La lista real (tambien 2.6) es:

  /boot/{vmlinuz,System.map}-2.4.18-pre2
  /boot/initrd-2.4.18-pre2.img
  /lib/modules/2.4.18-pre2

Y posiblemente algun *.old que quede por alli.

Y generalmente copio .config a /boot/config-2.4.18-pre2, asi que...

No olvidar eliminar de la configuracion del bootloader.

> Notas:
> 	En caso de querer disponer de varias configuraciones experimentales
> 	a partir de un módulo de Kernel, pudiendo "bootear" de ellas de
> 	manera independiente, se debe modificar el archivo "Makefile" que se
> 	encuentra en el dorectorio desde donde se compila el Kernel, agregando
> 	a la variable "EXTRAVERSION =" el nombre deseado,

Cuidado, no es "variable", es una macro.

> 	Ej. EXTRAVERSION = db1

Cuidado, EXTRAVERSION contiene lo que va despues de 2.4.18. Se puede dar un
nombre especial al configurar 2.6 ("General setup" --> "Local version").
-- 
Dr. Horst H. von Brand                   User #22616 counter.li.org
Departamento de Informatica                     Fono: +56 32 654431
Universidad Tecnica Federico Santa Maria              +56 32 654239
Casilla 110-V, Valparaiso, Chile                Fax:  +56 32 797513


Más información sobre la lista de distribución Linux