################################################################################ ================================================================================ RECOMPILAR EL KERNEL [mini-howto] ================================================================================ ################################################################################ La forma de este mini-howto tiene tres secciones, pasos rápidos, pasos explicados y pasos exhaustivos. Si has recompilado el kernel anteriormente puede que te baste con recordad los pasos rápidos. Sino recomendamos que leas los pasos explicados y pasos exhaustivos. ================================================================================ ANTES DE EMPEZAR ================================================================================ * Este documento está principalmente basado en el Kernel-HOWTO. * Lo primero es bajarse las fuentes si no las tienes instaladas: - ¿Tengo las fuentes instaladas? mira en /usr/src/ si tienes una carpeta linux/ o una carpeta kernel-* [donde * es la versión del kernel que quieres actualizar] ya tienes las fuentes. Puede que tengas las fuentes en otro lado: haz bash# locate kernel-sources-* - No tengo las fuentes, ¿Qué hago? Vete a "Pasos explicados" --> 1. * Documentación importante en: /usr/doc/HOWTO/en-txt/Kernel-HOWTO.gz este mismo howto está actualizado en www.linux.org/docs/ldp/howto/Kernel-HOWTO.html * También conviene leer: /usr/src/linux/kernel_*/README /usr/src/linux/kernel_*/debian.README [no entiendo pq los pasos son tan diferentes aquí] * Información sobre qué versiones de compiladore y otras herramientas para compilar tu nuevo kernel en: /usr/src/linux/kernel-*/Documentation/Changes chequea que tus versiones sean iguales o superiores a las especificadas aquí, si no es así, bájate instalate los nuevos paquetes. * La información sobre todas las opciones de configuración están en /usr/src/linux/kernel-*/Documentation/Configure.help * La información sobre cómo usar módulos está en: /usr/src/linux/kernel-*/Documentation/modules.txt * Si tienes algún problema serio después de compilar tu nuevo kernel mira la sección 8 y la 2.3. del Kernel-HOWTO. ================================================================================ PASOS RÁPIDOS ================================================================================ 1. Instalar y desenpaquetar las fuentes 2. make menuconfing (xconfig) 3. make dep 4. make clean 5. make bzImage 6. make modules 7a. make install 7b. o copiar la imagen a /boot/ 8. make modules_install 9. configurar LILO (si has elegido 7b) 10. shutdown -r now ================================================================================ PASOS EXPLICADOS ================================================================================ 1. Instalar y desenpaquetar las fuentes bash# apt-get install kernel-headers-* bash# apt-get install kernel-source-* [donde * depende de la versión del kernel que queramos compilar] bash# cd /usr/src/ si nunca has compilado el kernel seguramente necesitarás las ncurses: bash# apt-get install libncurses5-dev crear una carpeta para las nuevas fuentes bash# mkdir linux bash# cp kernel-source-* linux descomprimir las fuentes bash# tar xfjv kernel-source-* 2. Configurar nuevo kernel bash# make menuconfing ó si estamos en las X bash# make xconfig ------------------------------------------------------------------------- Within 'make xconfig' you must do these to avoid problems - · Select proper CPU type - Pentium 3, AMD K6, Cyrix, Pentium 4, Intel 386, DEC Alpha, PowerPC otherwise kernel will not boot!! · Select SMP support - whether single CPU or multiple CPUs · Filesystems - Select Windows95 Vfat, MSDOS, NTFS as part of kernel and not as loadable modules. (My personal preference but you are free to pick your own option). · Enable the Loadable kernel modules support! With this option you can load/unload the device drivers dynamically on running linux system on the fly. See these man pages -------------------------------------------------------------------------- 3. Crear dependencias bash# make dep 4. Limpiar movidas anteriores bash# make clean 5. Crear imagen del kernel bash# make bzImage ó bash# nohup make bzImage & bash# tail -f nohup.out para monitorear todo el proceso ahora tenemos la imagen del kernel en /usr/src/linux/arch/i386/boot/bzImage la copiamos a /boot/ cambiandole el nombre: bash# cp /usr/src/linux/arch/i386/boot/bzImage /boot/bzImage.nuevoker.fecha NOTA: de esta manera podemos reutilizar el kernel anterior que funciona bien y no arriesgamos nada. 6. Crear módulos: bash# make modules bash# make modules_install 7. Introducir opción de arranque con el nuevo kernel * Editamos /etc/lilo.conf y añadimos: image=boot/bzImage.nuevoker.fecha label=nuevoker root=/dev/hda3 read-only vga=ask optional * Ejecutamos lilo para que se actualicen los cambios bash# lilo bash# lilo -q nos muestra los nuevos kernel arrancables y el que está por defecto (marcado con *) 8. Probar el nuevo kernel * Reiniciamos y al salir el lilo le damos al tabulador y escribimos "nuevoker" sin en el entrecomillado * Si el nuevo kernel funciona hemos tenido éxito!!! sino hemos hecho algo mal ;( * Si nos ha salido bien deberíamos crear un disco de arranque: bash# cd /usr/src/linux bash# make bzdisk ================================================================================ PASOS EXHAUSTIVOS ================================================================================ 1. INSTALAR Y DESEMPAQUETAR LAS FUENTES --------------------------------------- 1.0 Mira si tienes las fuentes mira en /usr/src/ si tienes una carpeta linux/ o una carpeta kernel-* [donde * es la versión del kernel que quieres actualizar] ya tienes las fuentes. Puede que tengas las fuentes en otro lado, haz: bash# updatedb tardará un rato, es para actualizar la bd bash# locate kernel-source bash# locate kernel-headers si nunca has compilado el kernel seguramente necesitarás las ncurses: bash# apt-get install libncurses5-dev 1.1 Instalar y desenpaquetar las fuentes bash# apt-get install kernel-headers-* bash# apt-get install kernel-source-* [donde * depende de la versión del kernel que queramos compilar] bash# cd /usr/src/ crear una carpeta para las nuevas fuentes bash# mkdir linux bash# cp kernel-source-* linux descomprimir las fuentes bash# tar xfjv kernel-source-* 2. CONFIGURAR NUEVO KERNEL -------------------------- bash# cd /usr/src/linux/ bash# make menuconfing (ó xconfig) NOTA Las siguientes instrucciones están escritas para el #make menuconfig con el kernel 2.4.18. 2.1. PREVIO menuconfig (como el nombre indica) es un proceso de ir seleccionando opciones de configuración a través de un sistema de menús. Muchas opciones de configuración del kernel admiten tres variantes: vacio [], [*] y [M]. La última opción sirve para crear un módulo separable del kernel. Se recomiendo esta opción porque permite desmontar los módulos si dan problemas. De todas formas si es un módulo que vayas a usar constantemente lo puedes meter directamente en el kernel [*] Puedes pedir ayuda para más información de las opciones de configuración en el propio menuconfig. Para poder instalar módulos y opciones nuevas (experimentales) hay que elegir la primera opcion de menuconfig "Code maturity Menu Config --->" y seleccionar: "Prompt for the developer and/or incomplete coder/drivers" Generalmente menuconfig incluye por defecto las opciones más comunes y sólo tendrás que ir añadiendo algunos detalles extra que te interesen. Sin embargo es importante que lo mires todo, mirar no viene mal y conviene saber (aunque no sepas muy bien lo que es) aquello que tengas configurado en tu kernel. Menuconfig te pedirá guardar los cambios cuando salgas. Dí que sí si quieres compilar los cambios que has hecho. Además menuconfig siempre que lo inicies arrancará con los últimos cambios que guardaste. 2.2. BREVE DESCRIPCIÓN DE OPCIONES IMPORTANTES * Core Maturity level option: Elige esta opción si quieres instalar modulos o drivers para dispositivos nuevos. Esta opción te permitirá elegir muchas más opciones en los siguientes menús. Usalos con precaución porque son experimentales. * Loadable module support: activa esto para poder introducir módulos más adelante. Si eliges esta opción (hazlo) no olvides hacer "make modules" y "make modules_install" más adelante. * Enhanced (MFM/RLL) disk and IDE disk/cdrom support (Block Devices) Elige esto si no tienes un disco duro SCSI, sino sabes lo que es esto elige esta opción. * Procesadores Elige el tuyo, si no sabes cual es, en otra consola (Ctrl-Alt-F2) escribe bash# cat /proc/cpuinfo * Filesystems para saber qué tipo de filesystem tienes puedes hacer (en otra consola Ctrl-Alt-F2) bash# cat /proc/filesystems o también bash# mount ext2 es el estandar de linux msdos para leer sistemas de archivo msdos (de windows) /proc este tipo es para almacenar información de tu ordenador, lo usan algunos programas por lo que es recomendable ponerlo, hazlo! nfs para compartir archivos con otros ordenadores en red iso9660 para leer cd-rom * Character device Aquí tendrás que elegir tus drivers para los periféricos. Los portatiles suelen usar PS/2 para el touchpad "gpm" es un programa que te permitirá usar el ratón en las consolas virtuales fuera de las X. A veces puede dar problemas en los portátiles. * Kernel-hacking Si estás leyendo esto NO quieres activar esta opción 3. CHEQUEAR Y CREAR DEPENDENCIAS -------------------------------- Después de correr el menuconf (y guardar los cambios) te saldrá un mensaje diciéndote que ejecutes "make dep". Esto creará las dependencias necesarias entre módulos, librerías, etc. bash# make dep 4. LIMPIAR ---------- Ahora tienes que limpiar lo que haya quedado colgando para que no te de problemas. Esto hace tiempo que no es necesario. bash# make clean 5. COMPILAR: Crear imagen del kernel ------------------------------------ Ahora vamos a crear una imagen comprimida del kernel, es el momento de compilar y puede que requiera mucho tiempo (si estas compilando en un ordenador muy viejo esto puede durar días, se recomienda recompilar en otro ordenador más rápido). bash# cd /usr/src/linux/ bash# make bzImage ó bash# nohup make bzImage & bash# tail -f nohup.out para monitorear todo el proceso ahora tenemos la imagen del kernel en /usr/src/linux/arch/i386/boot/bzImage la copiamos a /boot/ cambiandole el nombre: bash# cp /usr/src/linux/arch/i386/boot/bzImage /boot/bzImage.nuevoker.fecha NOTA: de esta manera podemos reutilizar el kernel anterior que funciona bien y no arriesgamos nada. 6. CREAR MÓDULOS ---------------- bash# make modules bash# make modules_install 7. INTRODUCIR OPCIÓN DE ARRANQUE CON EL NUEVO KERNEL EN EL LILO --------------------------------------------------------------- * Editamos /etc/lilo.conf y añadimos (hacia el final, encontrarás lineas parecidas para el linuz.old: image=boot/bzImage.nuevoker.fecha label=nuevoker root=/dev/hda3 read-only vga=ask optional * Ejecutamos lilo para que se actualicen los cambios bash# lilo bash# lilo -q nos muestra los nuevos kernel arrancables y marca el que esté por defecto para el arranque con un asterisco * 8. PROBAR EL NUEVO KERNEL ------------------------- * Reiniciamos y al salir el lilo le damos al tabulador o al shift (mayúsculas) y escribimos: "nuevoker" sin en el entrecomillado o lo que haymos puesto en el label= en el lilo * Si el nuevo kernel funciona hemos tenido éxito!!! sino hemos hecho algo mal ;( * Si nos ha salido bien deberíamos crear un disco de arranque: bash# cd /usr/src/linux bash# make bzdisk ================================================================================ TODO ================================================================================ * Cómo parchear el kernel (sección 10 del Kernel-HOWTO). * Info extra de los módulos (modconf, etc.) * Corto y pego info de como cargar módulos y cómo configurar cosas (tomado del kernel-HOWTO #2) ================================================================================ For example to load the module /lib/modules/2.4.2-2/ker­ nel/drivers/block/loop.o, you would do : ______________________________________________________________________ bash# man insmod bash# modproble loop bash# insmod loop bash# lsmod ______________________________________________________________________ mirar también /usr/doc/HOWTO/en-txt/mini/Modules * post-kernel configuration 2.4. Post Kernel Building After successfully building and booting the Linux kernel, you may be required to do these additional steps to make some of the devices to work with Linux. (The steps below were tested on Redhat Linux but should work with other distributions as well.) Video card/Monitor configuration: · Please see the video card manual which is usually shipped with the PC. You should look for a "Technical Specifications" page. · Please see the monitor's manual and look for a "Technical Specifications" page. You can configure the Video card and monitor by using these commands: ___________________________________________________________________ bash$ su - root bash# man Xconfigurator bash# /usr/bin/X11/Xconfigurator --help bash# /usr/bin/X11/Xconfigurator bash# /usr/bin/X11/Xconfigurator --expert See also: bash# man xf86config bash# /usr/bin/X11/xf86config ___________________________________________________________________ If your card is not detected automatically, then you can use the --expert option and select the "Unlisted card". If your monitor is not listed then select the generic monitor type SVGA 1024x768. Sound card configuration: · Connect your external speakers to the sound card's audio port. · Connect your CDROM audio wire to sound card's audio 4-pin socket. (Otherwise your cdrom drive will not play the music from your music cd) · Refer to HOWTO docs on 'Sound' at ___________________________________________________________________ bash$ su - root bash# man sndconfig bash# /usr/sbin/sndconfig ___________________________________________________________________ Then start X-window 'KDE desktop' with 'startx' command. Click on 'K Start->ControlCenter->SoundServer->General->Test Sound'. This should play the test sound. Then click on 'K Start->MultiMedia->Sound­ Mixer->SoundVolumeSlider' and adjust the sound volume. Network card configuration: · Use /sbin/linuxconf · Or use KDE control panel · Refer to HOWTO docs on 'Networking' at Configure Firewall and IP Masquerading : For Linux kernel version 2.4 and above, the firewall and IP Masquerading is implemented by NetFilter package. Hence in kernel config you should enable Netfilter and run the Firewall/IPMasq script. Download the scripts from Firewall-IPMasq scripts , main page of Netfilter is at . Related materials at firewalling-matures and Netfilter-FAQ . For kernel version below 2.4 you should install the firewall rpms from rpmfind.net or firewall.src.rpm . Configuration of other devices: Refer to HOWTO docs relating to your devices at ================================================================================ DEBIAN PACKAGE ================================================================================ make-kpkg clean ; make-kpkg kernel-image modules-image