Como compilar el kernel en Linux

Descargar y preparar el ultimo kernel

Copiamos el link del ultimo kernel estable (el que esta en el boton amarillo grande que dice "Latest Stable Kernel") desde www.kernel.org y lo descargamos en /usr/src

Código:
cd /usr/src
aria2c https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.10.tar.xz

Se descomprime el kernel

Código:
tar xvfJ linux-3.10.tar.xz

Se crea el link simbolico linux a las fuentes

Código:
rm linux
ln -s linux-3.10 linux

Se configuran las variables de entorno

Código:
export CFLAGS="-march=native -O2 -pipe"
export CXXFLAGS="$CFLAGS"
export COPTFLAGS="$CFLAGS"

-march=native: genera el binario utilizando todo el conjunto de instrucciones del procesador actual, generalmente estos binarios NO funcionan en otro PC. Podemos ver las flags activas por este switch con el comando:

Código:
gcc -march=native -E -v - </dev/null 2>&1 | grep cc1

Un ejemplo de que se activa con y sin este switch en un procesador "AMD FX(tm)-4100 Quad-Core Processor":

Código:
[open@suse]:~$ gcc -march=native -E -v - </dev/null 2>&1 | grep cc1
 /usr/lib64/gcc/x86_64-suse-linux/4.7/cc1 -E -quiet -v - -march=bdver1 -mcx16 -msahf -mno-movbe -maes -mpclmul -mpopcnt -mabm -mlwp -mno-fma -mfma4 -mxop -mno-bmi -mno-bmi2 -mno-tbm -mavx -mno-avx2 -msse4.2 -msse4.1 -mlzcnt -mno-rdrnd -mno-f16c -mno-fsgsbase --param l1-cache-size=16 --param l1-cache-line-size=64 --param l2-cache-size=2048 -mtune=bdver1
[open@suse]:~$ gcc -E -v - </dev/null 2>&1 | grep cc1
 /usr/lib64/gcc/x86_64-suse-linux/4.7/cc1 -E -quiet -v - -mtune=generic -march=x86-64
[open@suse]:~$

-O2: optimiza el codigo, gcc activa casi todas las opciones de optimizacion soportadas manteniendo relativamente estable el balance espacio - velocidad, esta opcion incrementa el tiempo de compilacion y el rendimiento del binario
-pipe: acelera la compilacion usando tuberias en vez de archivos temporales
por ultimo se verifican las fuentes:

Código:
cd linux
make mrproper

Configurar el kernel

Comenzamos con una configuracion que sabemos que funciona, la del kernel actual del sistema, la obtenemos mediante el comando:

Código:
zcat /proc/config.gz > .config

Ahora se ingresa a la configuracion del kernel mediante alguno de los siguientes comandos:
make menuconfig (ncurses) o make xconfig (QT) o make gconfig (GTK)

Opciones a modificar (obviamente se me deben estar pasando algunas):

  • General Setup:
    • Local version - append to kernel release -> -open
    • Kernel compression mode -> bz2
  • Processor type and features:
    • Processor family -> Opteron/Athlon64/Hammer/K8 (en mi caso xq tengo un AMD64, Core 2/newer Xeon para intel, Intel Atom obviamente para un atom o Generic-x86-64 si no sabes que poner)
    • SMT (Hyperthreading) scheduler support -> deshabilitar si el micro no tiene hyperthreading
    • MCE features -> deshabilitar las que no corresponden, en mi caso Intel
    • Dell laptop support -> es una laptop Dell? sino desmarcar
    • microcode loading support -> = que MCE features
  • Power management and ACPI options:
    • CPU Frequency scaling:
      • Default CPUFreq governor -> conservative si es una laptop
  • Device Drivers:
    • Graphics support:
      • Laptop Hybrid Graphics - GPU switching support -> tengo esto? sino lo deshabilito
      • Bootup logo -> hace aparecer un tux por nucleo detectado durante el inicio (como se puede ver en algunos liveCD)
    • Driver varios, se pueden quitar los que no tenemos
  • kernel hacking:
    • Compile the kernel with debug info -> sacar
    • Remote debugging over FireWire early on boot -> sacar
    • Remote debugging over FireWire with firewire-ohci -> sacar
    • KGDB: kernel debugger -> sacar, a no ser que quieras debuguear el kernel por consola serial con gdb
  • Security options:
    • NSA SELinux Support -> shoo con esta cosa
    • TOMOYO Linux Support -> sacar
    • AppArmor support -> lo uso para Skype, si no lo usas, se puede sacar

Guardar y salir

Compilacion e instalacion

Preparado y configurado el kernel ahora hay que compilar, se usa el comando:

Código:
make -j X

siendo X = cantidad de nucleos + 1, en el caso del "AMD FX(tm)-4100 Quad-Core Processor" sera 5, aqui es donde dependiendo del PC utilizado podemos esperar unos minutos o ir a hacer otra cosa.
Una vez terminada la compilacion se instala el kernel mediante el comando:

Código:
make modules_install && make install

Una vez terminado esto tenemos el kernel instalado, la imagen initrd creada y grub actualizado

Reducir el initrd (opcional)

Se instala dracut:

Código:
zypper in dracut

y se utiliza para crear un initrd especifico para iniciar el PC actual con la opcion -H, le pasamos la version del kernel nuevo (aunno hemos reiniciado) mediante -kver y le decimos que sobreescriba el initrd actual con --force

Código:
dracut -H -kver 3.10.0-open --force

A modo de ejemplo dejo mis initrd:

Código:
-rw-------  1 root root 6.5M Jul  2 16:29 initrd-3.10.0-open          /* Generado con dracut */
-rw-r--r--  1 root root  12M Jun 27 17:55 initrd-3.7.10-1.16-desktop     /* Generado con mkinitrd */

la version pasada con kver se puede ver haciendo "ls /boot"

Reiniciar
Solo resta reiniciar el sistema

Código:
systemctl reboot

 

FUENTE: http://www.forosuse.org/forosuse/showthread.php?t=30117