Como compilar el Kernel en Gentoo


CategoryGentoo

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 :

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 ~ $

Referencias

Como_compilar_el_kernel_en_Gentoo (last edited 2008-04-20 14:38:05 by localhost)