Cómo compilar el núcleo de Linux en Debian

Inicio
Última actualización: 13 de febrero, 2011

Tabla de Contenido

Introducción

A veces es necesario compilar el núcleo de Linux para incluir nuevos soportes o dispositivos de nuevo hardware, aplicar un parche al núcleo o simplemente para tener una versión más reciente. Aquí explicaremos cómo compilar un núcleo de una manera fácil. Lo difícil no está en compilar sino en escoger los soportes y dispositivos correctos. Pero, ¿quien mejor que tu conoce tu computador?

La versión estable del núcleo es la número 2.6, aunque la versión 2.4 todavía sigue siendo usada, especialmente en computadores viejos. Aquí vamos a abordar la compilación e instalación del núcleo versión 2.6.

Instalar la fuente del núcleo

Vamos a abordar dos maneras de instalar la fuente del núcleo. Sugerimos preferir la fuente distribuida por Debian, a no ser que se requiera una versión mucho más nueva, por ejemplo, si cierto hardware no tiene soporte en la versión de Debian.

a) La fuente distribuida por Debian

Instala el paquete linux-source-2.6 con,

# apt-get install linux-source-2.6

Este es un meta paquete que depende del paquete que contiene la fuente actual del núcleo de Linux de Debian.

El archivo comprimido de la fuente del núcleo (linux-source-2.6.32.tar.bz2) se instala en el directorio /usr/src.

b) La fuente original

En la página oficial del núcleo de Linux,

  http://www.kernel.org/

puedes ver cual es la versión de la fuente más reciente. La página frontal incluye un enalce directo a la fuente estable actual.

También puedes ir directamente al reporitorio,

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

Descarga el archivo comprimido de la fuente (linux-[version].tar.bz2) y muévelo al directorio /usr/src,

# mv linux-[version].tar.bz2 /usr/src

Descomprimir la fuente

Para descomprimir archivos .bz2 necesitas tener instalado el paquete bzip2. Corre,

# apt-get install bzip2

Anda al directorio /usr/src con

# cd /usr/src

y descomprime el archivo con el comando,

# tar -jxvf linux-source-2.6.32.tar.bz2

La fuente del núcleo va a estar en el directorio,

  /usr/src/linux-source-2.6.32

(o /usr/src/linux-[version] dependiendo de la fuente que escojas).

Anda a ese directorio,

# cd /usr/src/linux-source-2.6.32

Configurar la compilación del núcleo

Instala el paquete libncurses5-dev con,

# apt-get install libncurses5-dev

En el directorio de la fuente da el comando,

# make menuconfig

Anda menú por menú, sub-menú por sub-menú marcando todos los soportes y dispositivos que necesita el computador. La fuente distribuida por Debian viene con la configuración del núcleo de instalación.

En muchos casos tienes la opción de marcar soportes y dispositivos para que sean compilados en el núcleo oprimiendo la tecla <y> ([*]) o que sean compilados como módulos, oprimiendo la tecla <m> (<M>). Los módulos son pedazos de códigos compilados tal que se puedan insertar o remover, con el núcleo corriendo, con los comandos insmod o rmmod, o la herramienta modconf. Habilita "Kernel module loader" en la sección "Loadable module support" para que el núcleo pueda insertar módulos automáticamente cuando los necesita. Si no estás bien seguro de alguna opción es preferible compilar como módulo y probar una vez corriendo el núcleo. Ve algunas sugerencias de configuración. Graba la configuración y sal de la utilidad.

Interfase gráfica de configuración

Si estas trabajando en X, en un emulador de terminal, puedes configurar el núcleo con una interfase gráfica.

Instala el paquete libqt3-mt-dev con,

# apt-get install libqt3-mt-dev

y luego corre,

# make xconfig

Compilar el núcleo

Instala el paquete kernel-package con,

# apt-get install kernel-package

Anda al directorio de la fuente,

# cd /usr/src/linux-source-2.6.32

y da el comando,

# make-kpkg clean

y luego,

# make-kpkg --initrd --append-to-version=-1-686 --revision=2.6.32 kernel_image kernel_headers

en donde --append-to-version añade el valor a la versión. Esta debe ser superior a la versión del núcleo de Debian.

La compilación tarda unos 30-60 minutos, dependiendo de la rapidez del computador. Una vez finalizada, se van a crear dos paquetes Debian

  linux-image-2.6.32-1-686_2.6.32_i386.deb
  linux-headers-2.6.32-1-686_2.6.32_i386.deb

en el directorio /usr/src.

Instalación del nuevo núcleo

Anda al directorio /usr/src con 'cd /usr/src' e instala el paquete con,

# dpkg -i linux-image-2.6.32-1-686_2.6.32_i386.deb

Instala también los encabezados (headers) del núcleo. Estos van a estar instalados en /lib/modules/2.6.32-1-686/build, que en realidad es un enlace simbólico que apunta a /usr/src/linux-headers-2.6.32-1-686.

Reinicia el computador con 'reboot' o 'shutdown -r now'.

Escoge arrancar con el núcleo nuevo (kernel 2.6.32-1-686). Si se produce un error insuperable y el arranque se cuelga, reinicia el computador con el núcleo de la instalación.

Recompilar el núcleo

Si hubiese errores, o simplemente necesitas agregar o modificar algo, vas a necesitar reconfigurar el núcleo ('make menuconfig [xconfig]') y recompilarlo con un número de revisión mayor, por ejemplo,

  --append-to-version=-2-686

Aplicar parches

a) Parches de la fuente distribuida por Debian

Debian mantiene un paquete con parches al núcleo, linux-patch-debian-2.6.32. Instala el paquete con,

# apt-get install kernel-patch-debian-2.6.32

Edita /etc/kernel-pkg.conf y agrega la línea,

  patch_the_kernel := yes

al final del archivo. En /usr/src/linux-source-2.6.32 limpia la compilación con,

# make-kpkg clean

luego configura y compila con,

# make-kpkg --config=menuconfig --initrd --append-to-version=-1-686 --revision=2.6.32 kernel_image kernel_headers

b) Parches a la fuente original

Si ya tienes en el computador la fuente de un núcleo original, puedes actualizarlo aplicando un parche. Los parches contienen solamente los cambios de una versión a otra y son por ende mucho más pequeños en porte. Digamos que tienes la fuente del núcleo 2.6.37.1 en /usr/src/linux-2.6.37.1 y deseas actualizar a la versión 2.6.37.2. Descarga el parche patch-2.6.37.2.bz2 y colócalo en /usr/src. Anda al directorio de la fuente (cd /usr/src/linux-2.6.37.1) y aplica el parche con,

# bzip2 -dc ../patch-2.6.37.2.bz2 | patch -p1

Sube un nivel en la estructura de directorios ('cd ..') y renombra el directorio,

 # mv linux-2.6.37.1 linux-2.6.37.2

Puedes aplicar parches sucesivamente, pero cuidando siempre de aplicar el parche de la versión siguiente y por ningún motivo saltarse uno.  

Sugerencias de configuración

A continuación presentamos una configuración básica para el núcleo version 2.6.32, que debería funcionar en la mayoría de computadores i386 y amd64.

Sección "General setup":
Marca "Prompt for development and/or incomplete code/drivers" para hacer accesible ciertos dispositivos en estado experimental. Marca "Support for paging of anonymous memory (swap)", "System V IPC", "POSIX Message Queues", "BSD Process Accounting", luego "BSD Process Accounting version 3 file format".
Sección "Loadable module support":
Marca "Enable loadable module support", luego "Module unloading", "Forced module unloading", "Module versioning support" y "Automatic kernel module loading".
Sección "Block layer":
Marca "Support for Large Block Devices" y "Support for Large Single Files".
Sección "Processor type and features":
Marca "Symmetric multi-processing support" si el computador tiene más de un CPU (multiple core, SMP).
Subsección "Subarchitecture Type (PC-compatible)":
Mueve el cursor hacia "PC-compatible" y oprime <Select>.
Subsección "Processor family (Pentium-Pro)":
Escoge el tipo de CPU del computador. Puedes obtener en nombre del CPU con 'cat /proc/cpuinfo' en la línea "model name".
Marca "HPET Timer Support". Si marcaste SMP, marca "SMT (Hyperthreading) scheduler support" y "Multi-core scheduler support", de lo contrario, marca "Local APIC support on uniprocessors", luego "IO-APIC support on uniprocessors". Marca "Machine Check Exception", luego "Check for non-fatal errors on AMD Athlon/Duron / Intel Pentium" (módulo) y "check for P4 thermal throttling interrupt". Marca "MTRR (Memory Type Range Register) support". Si marcaste SMP, marca "Enable kernel irq balancing". Marca "Use register arguments".
Sección "Power management options (ACPI, APM)":
Marca "Legacy Power Management API" y "Software Suspend".
Subsección "ACPI (Advanced Configuration and Power Interface) Support":
Marca "ACPI Support", luego "Sleep States" "AC Adapter" (módulo), "Battery" (módulo), "Button" (módulo), "Video" (módulo), "Fan" (módulo), "Dock" (módulo), "Processor" (módulo) y "Thermal Zone" (módulo).
Subsección "CPU Frequency scaling":
(Util para laptops) Marca "CPU Frequency scaling". En "Default CPUFreq governor" mueve el cursor hacia "performance" y oprime <Select>. Marca "'powersave' governor" (módulo), "'userspace' governor for userspace frequency scaling" (módulo), "'ondemand' cpufreq policy governor" (módulo), "'conservative' cpufreq governor" (módulo). Marca el controlador de dispositivo del CPU (módulo), por ejemplo, "Intel Enhanced SpeedStep" para procesadores Intel Pentium M Centrino.
Sección "Bus options (PCI, PCMCIA, EISA, MCA, ISA)":
Marca "PCI support". En "PCI access mode" mueve el cursor hacia "Any" y oprime <Select>. Marca "PCI Express support" y "Message Signaled Interrupts (MSI and MSI-X)".
Subsección "PCCARD (PCMCIA/CardBus) support":
Si tienes un bus PCMCIA (comunes en laptops), marca "PCCard (PCMCIA/CardBus) support" (módulo), luego "CardBus yenta-compatible bridge support" (módulo).
Sección "Executable file formats":
Marca "Kernel support for ELF binaries". Marca "Kernel support for a.out and ECOFF binaries" (módulo) y "Kernel support for MISC binaries" (módulo).
Sección "Networking":
Subsección "Networking options":
Marca "Packet socket" (núcleo), "Unix domain sockets" (núcleo), y "TCP/IP networking", luego "IP: multicasting" y "The IPv6 protocol" (módulo). Marca "Network packet filtering (replaces ipchains)".
Subsección "Network packet filtering (replaces ipchains)":
Subsección "Core Netfilter Configuration":
Marca "Netfilter Xtables support (required for ip_tables)" (módulo) y todos los soportes asociados (módulo).
Subsección "IP: Netfilter Configuration":
Marca "Connection tracking (required for masq/NAT)" (módulo) y todos los soportes asociados (módulo). Marca "IP tables support (required for filtering/masq/NAT)" (módulo) y todos los soportes asociados (módulo).
Subsección "IPv6: Netfilter Configuration":
Marca "IP6 tables support (required for filtering/masq/NAT)" (módulo) y todos los soportes asociados (módulo).
Marca "IrDA (infrared) subsystem support" (módulo).
Subsección "IrDA (infrared) subsystem support":
Marca "IrLAN protocol" (módulo), "IrNET protocol" (módulo), "IrCOMM protocol" (módulo) y "Ultra (connectionless) protocol".
Subsección "Infrared-port device drivers ":
Marca "IrTTY (uses Linux serial driver)" (módulo), "IrPORT (IrDA serial driver)" (módulo) y "IrDA USB dongles" (módulo).
Marca "Bluetooth subsystem support" (módulo).
Subsección "Bluetooth subsystem support":
Marca "L2CAP protocol support" (módulo), "SCO links support" (módulo), "RFCOMM protocol support" (módulo), luego "RFCOMM TTY support". Marca "BNEP protocol support" (módulo), luego "Multicast filter support" y "Protocol filter support". Marca "HIDP protocol support" (módulo).
Subsección "Bluetooth device drivers":
Marca "HCI USB driver" (módulo).
Marca "Generic IEEE 802.11 Networking Stack" (módulo), luego "IEEE 802.11 WEP encryption (802.1x)" (módulo), "IEEE 802.11i CCMP support" (módulo), "IEEE 802.11i TKIP encryption" (módulo) y "Software MAC add-on to the IEEE 802.11 networking stack" (módulo).
Sección "Device Drivers":
Subección "Generic Driver Options":
Marca "Select only drivers that don't need compile-time external firmware", "Prevent firmware from being built" y "Userspace firmware loading support" (módulo).
Subección "Parallel port support":
Marca "Parallel port support" (módulo), luego "PC-style hardware" (módulo), "Use FIFO/DMA if available" y "IEEE 1284 transfer modes".
Subsección "Plug and Play configuration":
Marca "Plug and Play support", luego "Plug and Play ACPI support".
Subsección "Block devices":
Marca "Loopback device support" (módulo), "RAM disk support" (núcleo), "Initial RAM filesystem and RAM disk (initramfs/initrd) support" y "Packet writing on CD/DVD media" (módulo).
Subsección "ATA/ATAPI/MFM/RLL support":
Marca "ATA/ATAPI/MFM/RLL support" (módulo), luego "Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support" (módulo). Marca "Include IDE/ATA-2 DISK support" (módulo), y "Include IDE/ATAPI CDROM support" (módulo). Marca "generic/default IDE chipset support" (módulo), luego "CMD640 chipset bugfix/support". Marca "PCI IDE chipset support", luego "Sharing PCI IDE interrupts support", "Generic PCI IDE Chipset Support" (módulo), "RZ1000 chipset bugfix/support" (módulo) y "Generic PCI bus-master DMA support", luego "Use PCI DMA by default when available". Aquí es importante marcar el chipset del puente PCI-IDE de la placa madre (módulo). Corre en un terminal el comando lspci y busca las palabras "PCI bridge:" o "ISA bridge:". La información que sigue normalmente identifica el chipset, por ejemplo, "Intel PIIXn chipsets support".
Subsección "SCSI support":
Marca "SCSI device support" (módulo), "legacy /proc/scsi/ support", "SCSI disk support" (módulo), "SCSI CDROM support" (módulo), luego "Enable vendor-specific extensions (for SCSI CDROM)". Marca "SCSI generic support" (módulo) y "Probe all LUNs on each SCSI device".
Subsección "SCSI low-level drivers":
Si tienes una tarjeta SCSI, corre en un terminal el comando lspci y busca las palabras "SCSI storage controller:". La información que sigue normalmente identifica el controlador SCSI (módulo), por ejemplo, "Adaptec AIC79xx U320 support". Si tienes bus SATA, marca "Serial ATA (SATA) support" (módulo). Corre en un terminal el comando lspci y busca las palabras "IDE interface:" y referencias a SATA. La información que sigue normalmente identifica el controlador SATA (módulo), por ejemplo, "Intel PIIX/ICH SATA support" para chipset Intel.
Subsección "IEEE 1394 (FireWire) support":
Si tienes un bus FireWire, marca "IEEE 1394 (FireWire) support" (módulo). Marca el dispositivo, comúnmente "OHCI-1394 support" (módulo). Marca "OHCI-1394 Video support" (módulo), "SBP-2 support (Harddisks etc.)" (módulo), "Ethernet over 1394" (módulo), "OHCI-DV I/O support" (módulo) y "Raw IEEE1394 I/O support" (módulo).
Subsección "Network device support":
Marca "Networking support".
Subsección "Ethernet (10 or 100 Mbit)":
Marca "Ethernet (10 or 100Mbit)", luego "Generic Media Independent Interface device support" (módulo). Si tienes una tarjeta Ethernet, corre en un terminal el comando lspci y busca las palabras "Ethernet controller:". La información que sigue normalmente identifica la tarjeta ethernet. Marca "EISA, VLB, PCI and on board controllers" y marca el dispositivo (módulo).
Subsección "Ethernet (1000 Mbit)":
Corre en un terminal el comando lspci y busca las palabras "Ethernet controller:". La información que sigue normalmente identifica la tarjeta Ethernet Gigabit. Marca el dispositivo (módulo).
Subsección "Wireless LAN (non-hamradio)":
Marca "Wireless LAN drivers (non-hamradio) & Wireless Extensions", luego "Wireless Extension API over RtNetlink ". Marca "Intel PRO/Wireless 2100 Network Connection " (módulo), luego "Enable promiscuous mode". Marca "Intel PRO/Wireless 2200BG and 2915ABG Network Connection" (módulo), luego "Enable promiscuous mode" y "Enable QoS support".
Marca "PPP (point-to-point protocol) support" (módulo) y luego "PPP support for async serial ports" (módulo), "PPP deflate compression" (módulo), "PPP BSD-Compress compression" (módulo), "PPP MPPE compression (encryption)" (módulo), "PPP over Ethernet" (módulo).
Subsección "Input device support":
Marca "Provide legacy /dev/psaux device". Da las resoluciones horizontal y vertical de la pantalla. Marca "Event interface" (módulo). Marca "Mouse".
Subsección "Mouse":
Marca "PS/2 mouse" (módulo).
Marca "Miscellaneous devices".
Subsección "Miscellaneous devices":
Marca "PC Speaker support" (módulo).
Subsección "Character devices":
Subsección "Serial drivers":
Marca "8250/16550 and compatible serial support" (módulo).
Marca "Legacy (BSD) PTY support", "Parallel printer support" (módulo), "Support for user-space parallel port device drivers" (módulo), "Hardware Random Number Generator Core support" y "Enhanced Real Time Clock Support" (módulo). Marca "/dev/agpgart (AGP Support)" (módulo) y luego el chipset de la tarjeta gráfica, si alguna le viene. Corre en un terminal el comando lspci y busca las palabras "VGA compatible controller:". La información que sigue puede identificar el chipset y la tarjeta. Marca "Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)" (módulo) y un dispositivo, si alguno viene (módulo).
Subsección "I2C support":
Marca "I2C support" (módulo).
Subsección "Hardware Monitoring support":
Marca "Hardware Monitoring support" (módulo).
Subsección "Multimedia devices":
Marca "Video For Linux" (módulo), luego "Enable Video For Linux API 1 compatible Layer".
Subsección "Graphics support":
Marca "Enable firmware EDID" y "Support for frame buffer devices" (núcleo), luego "VGA 16-color graphics support" (módulo), "VESA VGA graphics support" y algún soporte acorde con la tarjeta gráfica.
Subsección "Console display driver support":
Marca "Framebuffer Console support" (núcleo).
Marca "Backlight & LCD device support".
Subsección "Backlight & LCD device support":
Marca "Lowlevel Backlight controls" (módulo) y "Lowlevel LCD controls" (módulo).
Subsección "Sound":
Marca "Sound card support" (módulo).
Subsección "Advanced Linux Sound Architecture":
Marca "Advanced Linux Sound Architecture" (módulo), luego "Sequencer support" (módulo), "OSS Mixer API" (módulo), "OSS PCM (digital audio) API" (módulo), luego "OSS PCM (digital audio) API - Include plugin system". Marca "OSS Sequencer API" y "RTC Timer support" (módulo), luego " Use RTC as default sequencer timer".
Subsección "PCI devices":
busca el dispositivo de la tarjeta de sonido. Corre en un terminal el comando lspci y busca las palabras "Multimedia audio controller:". La información que sigue puede identificar la tarjeta de sonido. Marca el dispositivo (módulo), por ejemplo "Intel/SiS/nVidia/AMD/ALi AC97 Controller".
Subsección "USB support":
Marca "Support for Host-side USB" (módulo). Marca "USB device filesystem". En "USB Host Controller Drivers" marca "EHCI HCD (USB 2.0) support" (módulo), luego "Full speed ISO transactions" y "Root Hub Transaction Translators". Marca "OHCI HCD support" (módulo) y "UHCI HCD (most Intel and VIA) support" (módulo). Marca "USB Mass Storage support" (módulo) y todos los soportes asociados (Flash Memory). Marca "USB Human Interface Device (full HID) support" (módulo), luego "HID input layer support" y "/dev/hiddev raw HID device support".
Sección "File systems":
Marca "Second extended fs support" (módulo), luego "Ext2 extended attributes" y "Ext2 POSIX Access Control Lists". Marca "Ext3 journalling file system support" (módulo), luego "Ext3 extended attributes" y "Ext3 POSIX Access Control Lists". Marca "Inotify file change notification support", luego "Inotify support for userspace". Marca "Kernel automounter version 4 support (also supports v3)" (módulo).
Subsección "CD-ROM/DVD Filesystems":
Marca "ISO 9660 CDROM file system support" (módulo), luego "Microsoft Joliet CDROM extensions" y "Transparent decompression extension". Marca "UDF file system support" (módulo).
Subsección "DOS/FAT/NT Filesystems":
Marca "MSDOS fs support" (módulo), "VFAT (Windows-95) fs support" (módulo) y "NTFS file system support" (módulo), luego "NTFS write support".
Subsección "Pseudo filesystems":
Marca "/proc/kcore support" y "Virtual memory file system support (former shm fs)" (núcleo).
Subsección "Partition Types":
Marca "Advanced partition selection", luego "PC BIOS (MSDOS partition tables) support".
Subsección "Native Language Support":
Marca "Base native language support" (módulo), "Codepage 437 (United States, Canada)" (módulo), "Codepage 850 (Europe)", "ASCII (United States)" (módulo), "NLS ISO 8859-1 (Latin 1; Western European Languages)" (módulo), "NLS ISO 8859-15 (Latin 9; Western European Languages with Euro)" (módulo) y "NLS UTF8" (módulo).
Sección "Cryptographic options":
Marca "MD5 digest algorithm " (módulo) y "AES cipher algorithms" (módulo)".
Sección "Library routines":
Marca "CRC-CCITT functions" (módulo).
Copyright © 2002-2011 Ricardo Yanez


This document was generated using AFT v5.097