Como compilar el Kernel en Gentoo
Contents
He aqui una guia bastante práctica desde mi optica para compilar o recompilar su kernel, específicamente para el caso de GNU/Linux Gentoo, en la instalación del sistema usando el CD Live de install le da dos posibilidades la una es instalar el kernel que trae este por defecto o que usted mismo lo compile, este ejemplo también aplica si usted ha instalado otra distribución la cual es una rama de Gentoo como Sabayon
Descarga de Código
Para descargar el código del kernel usaremos el gestor de instalación de programas de gentoo Portage
sys-kernel/gentoo-sources sys-kernel/vanilla-sources sys-kernel/xen-sources sys-kernel/vserver-sources sys-kernel/hardened-sources
En gentoo hay varias fuentes de código disponibles para compilar el primero es el tradicional con parches hechos por la gente de la misma comunidad de para tener la funcionalidad ideal conjunta, el segundo solo descarga el kernel sin parches adiccionales, el tercero es el usado para ejecutar Xen, el cuarto es para compilar para que funcione con el Vserver, finalmente el ultimo viene con parches y configuración especial para seguridad.
La opción de kernel que voy a seguir es el primero, por funcionalidad con el sistema. Para comenzar se busca las caracteristicas del [Portage] de la siguiente manera:
usuario@gentoo ~ $ emerge -s gentoo-sources
Searching...
[ Results for search key : gentoo-sources ]
[ Applications found : 1 ]
* sys-kernel/gentoo-sources
Latest version available: 2.6.22-r8
Latest version installed: 2.6.22-r2
Size of files: 44,197 kB
Homepage: http://dev.gentoo.org/~dsd/genpatches
Description: Full sources including the Gentoo patchset for the 2.6 kernel tree
License: GPL-2
usuario@gentoo ~ $
Antes de hacerlo asegurate que el arbol de portage este actualizado con emerge --sync, eso debe hacerlo con permisos de superusuario, por experiencia es fácil de usar el sudo.
Como ven en la parte de Latest version installed es la versión instalada dentro del sistema, solo en caso que aparezca una nueva en Latest version availableo que en esta diga [Not installed].En mi caso es solo descargar la actualización, pero en ambos casos hago lo siguiente:
usuario@gentoo ~$ sudo emerge gentoo-sources Password:
Pasos previos antes de compilación
Descarga el paquete junto con los parches y luego los descomprime en el directorio /usr/src/, ahora gentoo posee una herramienta que fácilita el proceso de compilación del kernel llamada genkernel, y nos apoyaremos en esta herramienta para ahorrarnos ciertos pasos y que nos ayude con la configuración (Ya que la que trae por defecto puede fallar en mi experiencia usando esta no he fallado con ningún kernel panic hasta ahora):
usuario@gentoo ~ $ emerge -s genkernel
Searching...
[ Results for search key : genkernel ]
[ Applications found : 1 ]
* sys-kernel/genkernel
Latest version available: 3.4.8
Latest version installed: 3.4.8
Size of files: 7,381 kB
Homepage: http://www.gentoo.org
Description: Gentoo autokernel script
License: GPL-2
usuario@gentoo ~ $En caso de no tenerlo o no tener el más reciente, ejecutamos lo siguiente para instalarlo:
usuario@gentoo ~ $ sudo emerge genkernel Password:
Finalmente vamos al directorio /usr/src/
usuario@gentoo ~ $ cd /usr/src/ usuario@gentoo /usr/src $ ls -la total 3 drwxr-xr-x 5 root root 216 Oct 6 17:27 . drwxr-xr-x 17 root root 488 Aug 17 22:58 .. -rw-r--r-- 1 root root 0 Apr 19 18:54 .keep lrwxrwxrwx 1 root root 23 Sep 10 11:23 linux -> linux-2.6.22-gentoo-r2/ drwxr-xr-x 20 root root 976 Aug 28 12:19 linux-2.6.20-gentoo-r8 drwxr-xr-x 20 root root 1008 Sep 10 12:52 linux-2.6.22-gentoo-r2 drwxr-xr-x 19 root root 736 Oct 6 17:29 linux-2.6.22-gentoo-r8
y hacemos un enlace simbolico para facilitar el uso del genkernel.
usuario@gentoo /usr/src $ sudo rm linux Password: usuario@gentoo /usr/src $ sudo ln -s linux-2.6.22-gentoo-r linux-2.6.22-gentoo-r2/ linux-2.6.22-gentoo-r8/ derodriguez@overdrive /usr/src $ sudo ln -s linux-2.6.22-gentoo-r8 linux derodriguez@overdrive /usr/src $ ls -la total 3 drwxr-xr-x 5 root root 216 Oct 6 22:02 . drwxr-xr-x 17 root root 488 Aug 17 22:58 .. -rw-r--r-- 1 root root 0 Apr 19 18:54 .keep lrwxrwxrwx 1 root root 22 Oct 6 22:02 linux -> linux-2.6.22-gentoo-r8 drwxr-xr-x 20 root root 976 Aug 28 12:19 linux-2.6.20-gentoo-r8 drwxr-xr-x 20 root root 1008 Sep 10 12:52 linux-2.6.22-gentoo-r2 drwxr-xr-x 19 root root 736 Oct 6 17:29 linux-2.6.22-gentoo-r8 derodriguez@overdrive /usr/src $
Compilando nuestro kernel
Una vez hecho todo lo anterior vamos al directorio donde esta el kernel y ejecutamos de la siguiente forma:
usuario@gentoo /usr/src $ cd linux usuario@gentoo /usr/src/linux $ sudo genkernel --menuconfig --bootloader=grub all Password: * Gentoo Linux Genkernel; Version 3.4.8 * Running with options: --menuconfig --bootloader=grub all * Linux Kernel 2.6.22-gentoo-r8 for x86... * kernel: >> Running mrproper... * config: Using config from /usr/share/genkernel/x86/kernel-config-2.6 * Previous config backed up to .config.bak * >> Running oldconfig... * kernel: >> Cleaning... * config: >> Invoking menuconfig...
Modificando el archivo .config
Usando genkernel
En esta parte le di la opcion de invocar menuconfig, donde se seleccionan los modulos agregados que desea agregar al kernel, aunque con el genkernel modifica .config para que funcione con lo necesario, lo unico que cambiaria es si necesita usar algun código o libreria especial.
.config - Linux Kernel v2.6.22-gentoo-r8 Configuration
Linux Kernel Configuration
Arrow keys navigate the menu. <Enter> selects submenus --->. Highlighted letters are hotkeys.
Pressing <Y> includes, <N> excludes, <M> modularizes features. x
Press <Esc><Esc> to exit, <?> for Help, </> for Search. Legend: [*] built-in [ ] excluded <M> module < > module capable
Code maturity level options --->
General setup --->
Loadable module support --->
Block layer --->
Processor type and features --->
Power management options (ACPI, APM) --->
Bus options (PCI, PCMCIA, EISA, MCA, ISA) --->
Executable file formats --->
Networking --->
Device Drivers --->
File systems --->
Instrumentation Support --->
Kernel hacking --->
Security options --->
Cryptographic options --->
Library routines --->
---
Load an Alternate Configuration File
Save an Alternate Configuration File
<Select> < Exit > < Help > Terminado ese proceso el guarda la configuración y luego compila e instala el nuevo kernel, además de modificar el archivo de gestor de arranque sea lilo o sea grub.
*** End of Linux kernel configuration. *** Execute 'make' to build the kernel or try 'make help'. * kernel: >> Making dependencies... * >> Compiling 2.6.22-gentoo-r8 bzImage... * >> Compiling 2.6.22-gentoo-r8 modules... * Copying config for successful build to /etc/kernels/kernel-config-x86-2.6.22-gentoo-r8 * initramfs: >> Initializing... * >> Appending base_layout cpio data... * >> Appending auxilary cpio data... * >> Appending busybox cpio data... * >> Appending insmod cpio data... * >> Appending modules cpio data... * * Adding kernel to /boot/grub/grub.conf... * * Kernel compiled successfully! * * Required Kernel Parameters: * real_root=/dev/$ROOT * * Where $ROOT is the device node for your root partition as the * one specified in /etc/fstab * * If you require Genkernel's hardware detection features; you MUST * tell your bootloader to use the provided INITRAMFS file. Otherwise; * substitute the root argument for the real_root argument if you are * not planning to use the initrd... * WARNING... WARNING... WARNING... * Additional kernel cmdline arguments that *may* be required to boot properly... * add "vga=791 splash=silent" if you use a bootsplash framebuffer * Do NOT report kernel bugs as genkernel bugs unless your bug * is about the default genkernel configuration... * * Make sure you have the latest genkernel before reporting bugs. usuario@gentoo /usr/src/linux $
Usando scripts manuales
* creamos el archivo .config para nuestro kernel :
# cd /usr/src/linux # make menuconfig
y allí salir. Se generará un archivo .config en /usr/src/linux.
- Luego:
# make oldconfig # make modules_prepare # depmod
Reiniciando el sistema y verificando
Terminado este demorado proceso reiniciamos el sistema y arrancara con nuestro nuevo kernel:
usuario@gentoo ~ $ sudo reboot Password:
Y luego de reiniciado si quiere verificar su nuevo kernel haga:
usuario@gentoo ~ $ dmesg |head Linux version 2.6.22-gentoo-r8 (root@overdrive) (gcc version 4.1.2 (Gentoo 4.1.2 p1.0.1)) #1 SMP Sat Oct 6 23:50:06 COT 2007 BIOS-provided physical RAM map: BIOS-e820: 0000000000000000 - 000000000009fc00 (usable) BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved) BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved) BIOS-e820: 0000000000100000 - 000000001fff0000 (usable) BIOS-e820: 000000001fff0000 - 000000001fff3000 (ACPI NVS) BIOS-e820: 000000001fff3000 - 0000000020000000 (ACPI data) BIOS-e820: 00000000ffff0000 - 0000000100000000 (reserved) 0MB HIGHMEM available. usuario@gentoo ~ $
