Compilar kernel al modo debian
Debian-Kernel-Compile-Howto (Kernel 2.6)
By falko Created 2004-12-27 18:34 Modificado y traducido por Luis Ángel Ortega Martín el 30/01/06
Como Compilar el kernel 2.6 en Debian
langel [punto] ortega [arroba] educa [punto] madrid [punto] orgEn algunos casos puede ser que desees compilar tu propio kernel (núcleo) que satisface tus necesidades mejor que el kernel estándar que viene con tu distribución, aquí se describe cómo se hace esto en una máquina Debian (una descripción para Debian Sarge se puede encontrar aqui!). Observa que este tutorial es para el kernel 2.6 solamente! Un tutorial para el kernel 2.4 lo puedes encontrar aqui.
Enteraté que hay un cierto riesgo en hacerlo! Por ejemplo, podría suceder que su máquina no arranque correctamente después de que hayas instalado el nuevo kernel así que puede ser que tengas que arrancar desde un CD del rescate para reparar su sistema. ¡Quedas advertido! ¡Este documento no viene con garantía! ;-)
Primero logeate en tu maquina Debian como root. Comprueba que los tienes o instala los paquetes que te van a hacer falta para compilar el nuevo kernel:
apt-get install kernel-package ncurses-dev fakeroot wget bzip2
Vete a /usr/src:
cd /usr/src
Bajate el ultimo source kernel Linux (o el que necesites) desde
http://www.kernel.org/pub/linux/kernel/v2.6/:
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.6.tar.bz2
Desempaquetal el sources kernel:
tar xvjf linux-2.6.14.6.tar.bz2
Es conveniente hacer un enlace al directorio donde va a estar el nuevo kernel
ln -s linux-2.6.14.6 linux
Y luego
cd linux-2.6.14.6/
Normalmente es una buena idea tomar la configuración que tenemos, de existir (la que trabaja!) ya un kernel 2.6, como punto de partida para la configuración de su nuevo núcleo. La configuración actual del kernel se guarda generalmente en un fichero, /boot, e.g. /boot/config-2.6.3. Cargaremos esta configuración y después haremos los cambios que deseamos. Si no tienes el archivo de los config de un kernel 2.6 this one éste puede ayudarte.
make mrproper
make menuconfig
La configuracion del tu kernel será leida y puedes navegarla a traves del menu y cambiarla según tus necesidades.
Aquí, si tenemos mas de 1 gb de memoria hay que seleccionar en
Processor Type and Features -> High memory support [4gb],
y añadir tu tarjeta de red al kernel (no como modulo) y las recomendaciones del final.
Luego selecciona Load an Alternate Configuration File e introduce la localización del fichero de configuración del fichero y entra la localización del archivo de la configuración de tu kernel actual (o upload mi kernel configuracion mi configuración del kernel de tu máquina y entra su path):
Luego ejecuta los siguientes comandos (fijate que el comando make dep no es necesario para el kernel 2.6):make-kpkg clean
fakeroot make-kpkg --revision=luis.1 kernel_image
O mejor, en lugar de lo anterior
make-kpkg buildpackage -initrd -rev luis.1 kernel_image
Si la compilacion se para con un error, entonces ejecuta:
make clean
y reejecuta el comando anterior:
make menuconfig
que cambia la configuración del kernel cuando hay errores en la compilación.
Si no hay errores en la compilación, tardará un buen rato!, podrás encontrar el nuevo kernel como un paquete de Debian llamado kernel-image-2.6.14.6_luis.1_i386.deb en el directorio /usr/src. y también los paquetes .deb kernel-headers, kernel-source y kernel-doc con la revisión que hayamos puesto.
cd ../
Ahora tienes que instalar algunos paquetes que hacen falta para el kernel 2.6.
Primero comprueba que los tienes dpkg -l module-init-tools, nitrd-tools, procps y si no estan instalados agrega la línea siguiente a /etc/apt/sources.list:
deb http://www.backports.org/debian/ sarge module-init-tools initrd-tools procps
y ejecuta
apt-get update
apt-get install module-init-tools initrd-tools procps
Si te hacen la siguiente pregunta:
"If you really want to remove modutils type 'yes':"
responde yes.
Puede ser que también sea necesario actualizar paquetes como ike bind9, quota, etc. dependiendo de tu configuración. Si tienes problemas con tus paquetes existentes intenta conseguir el paquete apropiado en www.backports.org.
Instala tu nuevo nuevo kernel:
dpkg -i kernel-image-2.6.14.6_luis.1_i386.deb
dpkg -i kernel-headers-2.6.14.6_luis.1_i386.deb
dpkg -i kernel-doc-2.6.14.6_luis.1_i386.deb
Hay que comprobar que tenemos el fichero /boot/initrd.img-2.6.14.6 , si no crea un ramdisk del nuevo kernel (si no tu sistema no seguramente no arrancará y te dará un mensaje de kernel panic):
cd /boot/
mkinitrd -o /boot/initrd.img-2.6.14.6 2.6.14.6
Seguramente habra creado las entradas en lilo o grub para lo cual comprobaremos
cat /boot/grub/menu.lst
que tiene que tener las entradas nuevas con algo asi
title Debian GNU/Linux, kernel 2.6.14.6-386
root (hd0,0)
kernel /boot/vmlinuz-2.6.14.6-386 root=/dev/hdb1 ro
initrd /boot/initrd.img-2.6.14.6-386
savedefault
boot
title Debian GNU/Linux, kernel 2.6.14.6-386 (recovery mode)
root (hd0,0)
kernel /boot/vmlinuz-2.6.14.6-386 root=/dev/hdb1 ro single
initrd /boot/initrd.img-2.6.14.6-386
savedefault
boot
Con lo que hemos terminado casi.
En lilo editamos la parte de image=/vmlinuz del fichero /etc/lilo.conf y comprobamos que esta la la linea initrd=/boot/initrd.img-2.6.14.6 o la añadimos
# Boot up Linux by default. |
Ejecutamos
lilo
esto actualiza el boot loader y luego rebooteamos el ordenador:
shutdown -r now
y si todo esta bien, el ordenador arrancará con el nuevo kernel. Para comprobar
uname -a
que el kernel con el que he arrancado es el nuevo. Good luck (buena suerte, jeje)!
Update:
Esto es un extracto de un email que R (Chandra) Chandrasekhar (muchas gracias por ello!) que le han enviado al autor con respecto a la configuración del kernel en caso de que se utilicen memorias flash y tarjetas nVidia:
"1. Si vas a usar flash drives, deseleciona lo siguiente cuando estes en
Block Devices -> Low Performance USB Block driver (BLK_DEV_UB)
Hay una clara explicación en http://linux.usc.edu/pipermail/usclug-chat/2004-December/000111.html
y en http://dev.gentoo.org/~dsd/gentoo-dev-sources/issues-current.htm#2.6.9-ub porqué esto es recomendable hasta el desarrollo adicional del desarrollo del módulo del ub.
Tuve que instalar (comprobar primero que no lo tenemos instalado, como antes dpkg -l paquete)
apt-get install udev hotplug
para usar el flash drive, y luego funciono estupendo!
2. Si tienes una tarjeta nVidia, deseleciona lo siguiente cuando estes en
Graphics Support -> nVidia Riva support (FB_RIVA)
Kernel Hacking -> Use 4Kb for kernel stacks instead of 8Kb (4KSTACKS)
Processor Type and Features -> Local APIC support on uniprocessors (X86_UP_APIC)
Para instalar los drivers de nVidia, seguí el HOWTO de
http://home.comcast.net/~andrex/Debian-nVidia/index.html y compile los drivers desde los paquetes de Debian despues de aplicar el vmalloc_reserve.patch durante la formación del kernel.”
Bueno el método esta probado y funciona fenomenal.
Salu2
1 comentario:
Realizando los pasos me da error, aquí está descrito lo que hice:
#aptitude search kernel-package ncurses-dev fakeroot wget bzip2
Con eso verifico que sólo me falta el kernel-package, entonces lo instalo.
#aptitude install kernel-package
luego:
#cd /usr/src
#ls
...
linux-source-2.6.18.tar.bz2
...
Imagino que ese es el archivo que necesito, entonces
tar xvjf linux-source-2.6.18.tar.bz2
#ln -s linux-source-2.6.18 linuxsou
#cd linux-source-2.6.18
Este paso creo q lo hago bien, pero no estoy seguro, verifico que tenga la configuración actual del kernel con:
#more /boot/config-2.6.18-6-686
Pues por encima se ve bien, imagino que no tengo que hacer más nada sino:
#make mrproper //no bota ninguna salida
#make menuconfig //este comando bota esta salida:
HOSTCC scripts/basic/fixdep
HOSTCC scripts/basic/docproc
HOSTCC scripts/kconfig/conf.o
HOSTCC scripts/kconfig/kxgettext.o
HOSTCC scripts/kconfig/mconf.o
SHIPPED scripts/kconfig/zconf.tab.c
SHIPPED scripts/kconfig/lex.zconf.c
SHIPPED scripts/kconfig/zconf.hash.c
HOSTCC scripts/kconfig/zconf.tab.o
HOSTLD scripts/kconfig/mconf
HOSTCC scripts/kconfig/lxdialog/checklist.o
In file included from scripts/kconfig/lxdialog/checklist.c:24:
scripts/kconfig/lxdialog/dialog.h:31:20: error: curses.h: No existe el fichero o el directorio
In file included from scripts/kconfig/lxdialog/checklist.c:24:
scripts/kconfig/lxdialog/dialog.h:128: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘use_colors’
scripts/kconfig/lxdialog/dialog.h:129: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘use_shadow’
scripts/kconfig/lxdialog/dialog.h:131: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘attributes’
scripts/kconfig/lxdialog/dialog.h:143: error: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/dialog.h:146: error: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/dialog.h:147: error: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/dialog.h:148: error: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/dialog.h:149: error: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/dialog.h:151: error: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/checklist.c:31: error: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/checklist.c:59: error: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/checklist.c:95: error: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/checklist.c: In function ‘dialog_checklist’:
scripts/kconfig/lxdialog/checklist.c:117: error: ‘WINDOW’ undeclared (first use in this function)
scripts/kconfig/lxdialog/checklist.c:117: error: (Each undeclared identifier is reported only once
scripts/kconfig/lxdialog/checklist.c:117: error: for each function it appears in.)
scripts/kconfig/lxdialog/checklist.c:117: error: ‘dialog’ undeclared (first use in this function)
scripts/kconfig/lxdialog/checklist.c:117: error: ‘list’ undeclared (first use in this function)
scripts/kconfig/lxdialog/checklist.c:117: warning: left-hand operand of comma expression has no effect
scripts/kconfig/lxdialog/checklist.c:121: warning: implicit declaration of function ‘endwin’
scripts/kconfig/lxdialog/checklist.c:122: warning: implicit declaration of function ‘fprintf’
scripts/kconfig/lxdialog/checklist.c:122: warning: incompatible implicit declaration of built-in function ‘fprintf’
scripts/kconfig/lxdialog/checklist.c:122: error: ‘stderr’ undeclared (first use in this function)
scripts/kconfig/lxdialog/checklist.c:140: error: ‘COLS’ undeclared (first use in this function)
scripts/kconfig/lxdialog/checklist.c:141: error: ‘LINES’ undeclared (first use in this function)
scripts/kconfig/lxdialog/checklist.c:143: warning: implicit declaration of function ‘draw_shadow’
scripts/kconfig/lxdialog/checklist.c:143: error: ‘stdscr’ undeclared (first use in this function)
scripts/kconfig/lxdialog/checklist.c:145: warning: implicit declaration of function ‘newwin’
scripts/kconfig/lxdialog/checklist.c:146: warning: implicit declaration of function ‘keypad’
scripts/kconfig/lxdialog/checklist.c:146: error: ‘TRUE’ undeclared (first use in this function)
scripts/kconfig/lxdialog/checklist.c:148: warning: implicit declaration of function ‘draw_box’
scripts/kconfig/lxdialog/checklist.c:148: error: ‘attributes’ undeclared (first use in this function)
scripts/kconfig/lxdialog/checklist.c:149: warning: implicit declaration of function ‘wattrset’
scripts/kconfig/lxdialog/checklist.c:150: warning: implicit declaration of function ‘mvwaddch’
scripts/kconfig/lxdialog/checklist.c:152: warning: implicit declaration of function ‘waddch’
scripts/kconfig/lxdialog/checklist.c:156: warning: implicit declaration of function ‘print_title’
scripts/kconfig/lxdialog/checklist.c:159: warning: implicit declaration of function ‘print_autowrap’
scripts/kconfig/lxdialog/checklist.c:166: warning: implicit declaration of function ‘subwin’
scripts/kconfig/lxdialog/checklist.c:191: warning: implicit declaration of function ‘print_item’
scripts/kconfig/lxdialog/checklist.c:197: warning: implicit declaration of function ‘print_arrows’
scripts/kconfig/lxdialog/checklist.c:200: warning: implicit declaration of function ‘print_buttons’
scripts/kconfig/lxdialog/checklist.c:202: warning: implicit declaration of function ‘wnoutrefresh’
scripts/kconfig/lxdialog/checklist.c:204: warning: implicit declaration of function ‘doupdate’
scripts/kconfig/lxdialog/checklist.c:207: warning: implicit declaration of function ‘wgetch’
scripts/kconfig/lxdialog/checklist.c:214: error: ‘KEY_UP’ undeclared (first use in this function)
scripts/kconfig/lxdialog/checklist.c:214: error: ‘KEY_DOWN’ undeclared (first use in this function)
scripts/kconfig/lxdialog/checklist.c:224: error: ‘FALSE’ undeclared (first use in this function)
scripts/kconfig/lxdialog/checklist.c:225: warning: implicit declaration of function ‘scrollok’
scripts/kconfig/lxdialog/checklist.c:226: warning: implicit declaration of function ‘wscrl’
scripts/kconfig/lxdialog/checklist.c:235: warning: implicit declaration of function ‘wrefresh’
scripts/kconfig/lxdialog/checklist.c:285: warning: incompatible implicit declaration of built-in function ‘fprintf’
scripts/kconfig/lxdialog/checklist.c:286: warning: implicit declaration of function ‘delwin’
scripts/kconfig/lxdialog/checklist.c:290: error: ‘KEY_LEFT’ undeclared (first use in this function)
scripts/kconfig/lxdialog/checklist.c:291: error: ‘KEY_RIGHT’ undeclared (first use in this function)
make[2]: *** [scripts/kconfig/lxdialog/checklist.o] Error 1
make[1]: *** [menuconfig] Error 2
make: *** [menuconfig] Error 2
Y ahí me quede pegado porque me imagino que debería ejecutarse un script para completar los pasos que describes después.
¿Qué significa ese error?, ¿qué debería hacer?
Publicar un comentario