Construcción y compilación manual del kernel (make menuconfig)

Fuente: https://rootsudo.wordpress.com/2014/10/09/construccion-y-compilacion-manual-del-kernel-en-gentoo-make-menuconfig/

La compilación manual es la recomendada en Gentoo, tanto por su versatilidad como por su sorprendente simplicidad, sí, has leído bien, simplicidad. Que todo es difícil en Gentoo es un falso mito. Gentoo no es difícil, sino complejo, pero esa complejidad tan sólo es pureza y riqueza de posibilidades, no dificultad.

Vamos allá:

descargamos un paquete de fuentes de kernel, podemos usar alguno de los que están en Portage o cualquier otro. Hay que tener en cuenta que conviene usar fuentes que incluyan los parches para Gentoo. Como ejemplo podemos buscar kernels en Portage así:

emerge -s sources

lo que encontrará fuentes del núcleo linux; en este ejemplo vamos a instalar las fuentes oficiales de Gentoo:

sys-kernel/gentoo-sources

las emergemos de Portage:

sudo emerge -a gentoo-sources

Hay que tener en cuenta que por defecto si emergemos “gentoo-sources” Portage descargará la última versión del kernel que haya. Si queremos instalar un kernel determinado más antiguo de los que hay aquí /usr/portage/sys-kernel/gentoo-sources tenemos que emergerlo llamándolo específicamente a él anteponiendo un signo igual (=), así:

sudo emerge -a =sys-kernel/gentoo-sources-3.14.39

de esta manera emergemos específicamente la versión 39 del kernel 3.14 (LTS).

Portage no instala el nuevo kernel, sino que se limita a crear su directorio de fuentes en:

/usr/src/linux-3.16.5-gentoo/

podemos comprobar que están ahí.

Lo primero es hacer que el enlace simbólico /usr/src/linux apunte a las nuevas fuentes, esto es necesario pues como luego usaremos el comando genkernel para instalar el “initramfs” se necesita que apunte a las fuentes correctas.

eselect kernel list

sudo eselect kernel set 1 (o el número que sea)

entramos en el directorio de la fuentes, en nuestro caso:

/usr/src/linux-3.16.5-gentoo/

abrimos una terminal y nos hacemos root

su

make menuconfig

ahora se nos muestra el menú para determinar las opciones que queremos que compile nuestro kernel, las opciones que trae por defecto suelen funcionar, pero como es lógico conviene comprobar que compile el kernel para nuestra tarjeta de red ethernet, para la tarjeta wifi, para la tarjeta gráfica y para la tarjeta de sonido y ALSA.

Podemos encontrar información sobre nuestros dispositivos de hardware con:

sudo lspci -k (encontraremos nuestros dispositivos de red, Ethernet y Wireless)

sudo lspci | grep -i audio (nuestra tarjeta de sonido)

sudo lspci | grep -i VGA (la tarjeta gráfica)

las opciones principales están en “Device Drivers”, podemos seleccionarlas con “Y” (se marca con un asterisco) lo cual supone que se compilará dentro del kernel, o si la seleccionamos con “M” (se marca con una letra M) se instalará como módulo. Sobre la famosa cuestión de si es mejor instalar los controladores dentro del kernel o como módulos hay mucha polémica. Cada opción tiene sus ventajas. Yo suelo integrar dentro del núcleo los principales, tarjeta gráfica, tarjeta ethernet, tarjeta wifi y sonido. Eso no hace mucho más grande el kernel y, así evito problemas de que sean cargados o no al inicio, evitando que tengan que ser reconocidos por udev, etc. Pero en esto, para gustos hay colores.


MAKE MENUCONFIG

Tarjeta Ethernet:

Device Drivers > Network device support > Ethernet driver support >

Tarjeta Wifi:

Device Drivers > Network device support > Wireless LAN >

Tarjeta Gráfica:

Device Drivers > Graphics support >

Tarjeta de Sonido:

Device Drivers > Sound card support > Advanced Linux Sound Architecture>

Web-Cam:

Device Drivers —>
Multimedia support —>
[*] Cameras/video grabbers support
[*] Media USB Adapters —>
USB Video Class (UVC)
[*] UVC input events device support (NEW)

Pantalla Táctil (touchscreen):

Device Drivers > HID support > Special HID drivers —>
<*> HID Multitouch panels


Nótese que en el menuconfig se accede a los distintos apartados selecionándolo y haciendo enter, y se retrocede un paso con cada “exit”. Al hacer “exit” desde la página principal se sale de menuconfig. Ya hemos dicho que para entrar sólo hace falta “make menuconfig” en la carpeta de las fuentes del kernel.
Una vez que hemos seleccionado nuestras opciones se guardan (Save) en el archivo .config ese archivo será el que compile después el comando “make”. Yo personalmente suelo guardar primero una copia con otro nombre, por ejemplo .config-01 para tener un control de las versiones compiladas, y después lo vuelvo a guardar como .config, pues ese será el que siempre se compile, y así no sobreescribo las configuraciones previas si hago sucesivas compilaciones.

Salimos de menuconfig con “exit” (hacemos exit las veces necesarias).

Volvemos a estar en la terminal y ya sólo nos resta empezar la compilación propiamente dicha, con el comando estándar “make”:

make

ahora toca esperar, pues dependiendo del microprocesador, así como de la cantidad de opciones a compilar, puede tardar entre unos 20-30 minutos en ordenadores modernos y más de una hora en equipos antiguos.

Nos tomamos un café.

compilando

cafeCuando termine de compilar hacemos:

make modules_install

para instalar los controladores que hemos activado como módulos, que se copiarán en el directorio /lib/modules

después:

make install

lo cual instalará el nuevo kernel en /boot/

Instalamos genkernel si no está instalado:

sudo emerge -a genkernel

y luego instalamos en /boot/ el “initramfs” mediante genkernel.

genkernel --install initramfs

Ya está, sólo nos queda actualizar GRUB2 para poder arrancar con el nuevo kernel:

grub-mkconfig -o /boot/grub/grub.cfg

exit

reboot

Al arrancar el equipo elegimos en el menú de GRUB el nuevo kernel y lo probamos.
Si todo va bien, ya tenemos nuestro nuevo kernel personalizado y compilado por nosotros, si alguna cosa no funciona, puede que no hayamos compilado sus drivers en el kernel, por lo que habría que activarlos en nuestro archivo .config (make menuconfig) y recompilar.

Depurar, compilar y recompilar en Gentoo, constituye unos de sus placeres viciosos y gozosos.