Crear, modificar y compilar el Kernel en ubuntu

Buenas! esta vez intentare explicar a los amantes del software libre como se crea, modifica, y se compila un kernel de ubuntu.

Primero de todo, quiero decirles que si quieren crear un kernel adaptado tendran que tener mucha paciendia, y no desesperarse rapidamente.

Para compilar un kernel a medida vamos a necesitar 2 paquetes, los paquetes build-essential y kernel-package, asi que vamos a descargarlo (Por consola)

Primero Pulsamos Alt+F2 y se nos abrira la ventana de ejecucion, y escribimos

Gnome-Terminal

Se nos abrira la consola.


Y escribimos:

sudo apt-get install build-essential kernel-package

Voy a explicarles un poco de que se comopone el Kernel.

El kernel se compone de los paquetes antes instalados:

"build-essential" y de los "kernel-package"

Cual es la diferencia entre ellos?

Los archivos del kernel-package (Que son "kernel-source", provienen de Debian,
Y los linux-source, vienen de Ubuntu.(La empesa de distribución)

Para obtener la otra parte del kernel, en la consola deberemos escribir:

sudo apt-get install linux-source


El archivo que se baja tendra un nombre asi:

linux-source-nº_de_version.tar.bz2

En el directorio /usr/src/


-Ahora nos vamos a ese directorio, a través de la consola, escribimos:

cd /usr/src

una vez dentro, observamos lo que hay tecleando:

ls ("Ele y ese"

y se nos mostrara una lista con las carpetas y archivos del directorio.

Si vemos que hay un enlace (Acceso directo) llamado linux y esta enlazado a un kernel, lo eliminamos. poniendo:


sudo rm -R linux


Ahora vamos a descomprimir el Archivo de las fuentes, para ello escribimos:

sudo tar jxvf linux-source-nº_de_version.tar.bz2


Esto creara un directorio llamado linux-source-nº_de_version

Ahora en dentro del directorio /usr/src , haremos un enlaze al kernel llamado linux


sudo ln -s linux-source-nº_de_version linux


Listo, ahora paso a explciar las 2 maneras de editar un kernel con apariencia grafica.

Una puede ser a traves del comando "sudo make menuconfig" y la otra pueder ser a traves del comando "sudo make xconfig"

Para mi el mas comodo es el xconfig, y este tutorial lo he realizado con xconfig.

Para poder editarlo con el menuconfig, necesitaremos unas librerias, de tal manera que si lo van a editar utilizando "menuconfig" tendran que bajarse estas librerias:


sudo apt-get install libncurses5-dev


Y si por el contrario van a utilizar el "xconfig" deberan bajarse estas otras:


sudo apt-get install libqt3-dev


Una duda que siempre se nos pasa por la cabeza:

Para configurar el kernel, ¿puedo partir de una configuración conocida?.

Sí.

Si tenemos, por ejemplo, instalado el kernel que trae Ubuntu por defecto, en el directorio /boot nos encontraremos con un archivo llamado

config-nº-version,

y,¿qué es ese archivo?,
No es más que un archivo de texto con la configuración actual del kernel,

Por lo tanto, para partir de esa base y comenzar la configuración del nuevo kernel desde la actual,

Lo que tenemos que hacer es copiar dicho archivo al directorio

/usr/src/linux-source-nº-version, pero llamándolo .config, es decir:


Entramos al directorio /usr/src/linux:

cd /usr/src/linux

y copiamos el archivo de tal manera:


sudo cp /boot/config-nº-de-version.config


Y ahora ya podemos pasar a editar nuestro kernel,+

Para ello desde el directorio /usr/src/linux, tecleamos:


sudo make xconfig


Ahora atención que aqui si no sabemos lo que tocamos nos cagamos el kernel.
(basicamente el sistema operativo, no arrancaria)


Aqui se puede modificar lo que quieran ( o lo que pueden)


*Si no saben lo que es, o su función dejarla tal cual esta. El dicho es :

"No se, No toco"


Bueno para los que se animan, simplemente les explicare las 3 posibilidades de opcion que tienen.

En las casillas que tienen para marcar, habran observado que si le pulsamos encima, la casilla se puede marcar como:

Blanca: Eso significa "desahilitado"

Con una V: Aqui la tendriamos habilitada, y el sistema nos la cargaria por defecto.

Y si no esta marcada con un Punto: esta opcion es que la que se suele activar para optimizar el sistema, esta opcion es la modular, quiere decir que si por ejemplo tenemos soporte para dispositicos de memoria externa, tales como un PEN DRIVE, o un disco duro externo.

Si seleccionamos la opcion como modular, este se cargaria cuando sea necesitara.

Es decir que los modulos estan precargados para su uso, cuando el sistema necesite unos de estos modulos, los tendra preparados, (Pero no estaran cargados)

Asi no consumen memoria del sistema.

Es como una pequeña optimización.

Bueno, una vez que tengan el kernel listo, le dan al icono de arriba con forma de disquete, para guardarlo.

Una vez guardado cerramos la ventana de edición del kernel y en la consola escribimos:

sudo make-kpkg clean

Este proceso tarda un poco, el sistema se depura.

y luego escribimos:

sudo make-kpkg --append-to-version=.XXXX --initrd kernel_image

OJO AL DATO!

aqui en este ultimo comando deberemos modificar las 4 "X"

Escribiendo 4 caracteres alfanumericos. Osea de "A-Z" y de "1 al 9"

En mi caso es puesto:


sudo make-kpkg --append-to-version=.kede --initrd kernel_image

Ke= Kernel
De= Deeluxe XD


Un dia ya explicare la opción " --initrd" para que entiendan todo.

bueno pues una vez escrito esto, no se asusten, la consola empezara a sacar lineas por todas partes, si nos fijamos en las lineas que van saliendo, podremos ver como se esta compilando todo el kernel.

Intentar de adivinar todos los modulos que esta compilando, asi siempre se aprende algo mas.

Y tenienen para rato, por que el proceso de compilación puede ser lento....

Si se ha compilado bien, en el directorio /usr/src, deberia haber un archivo llamado:

kernel-image-nº-version.XXXX_10.00.Custom_i386.deb

Este es el archivo que contiene nuestro kernel, preparado para instalarlo.
Asi que teclearemos:

sudo dpkg -i kernel-image-nº-version.XXXX_10.00.Custom_i386.deb

Una vez instalado, lo que haremos sera borrar el enlaze que hicimos al principio, llamado linux, de tal manera:

sudo rm -R linux

Y ya esta!!!!

Ya tenemos nuestro kernel listo para usarlo, Para usarlo simplemente deberemos escojerlo en la pantalla del GRUB.

(NOTA: es posible que es si es la primera vez que hacen un kernel y tocaron mas de lo normal no les arranque el sistema, luego simplemente tendran que entrar con el kernel de ubuntu, y volver a modificar el suyo)

Espero que les haya gustado, que hayan disfrutado, y que hayan aprendido, nos veremos en el próximo post…

Comenten que no cueste nada….

9 comentarios - Crear, modificar y compilar el Kernel en ubuntu

@lucianohillcoat
A Favs
Siempre guardo cosas interesantes para verlas cuando la nesesito.
@potasa
Estimado medio94: puede explayarse mas?
@medio94
No tengo ganas, estoy cansado, no doy mas clases por hoy,mañana te mando un privado....

pero averigua bien que es el kernel y de donde viene si?

pero bue , me cae bien tu nick, ahi te va una breve explicacion ....




Kernel/Núcleo
Que es el kernel/núcleo?

El kernel ó núcleo de linux se puede definir como el corazón de este sistema operativo. Es el encargado de que el software y el hardware de tu ordenador puedan trabajar juntos.

Las funciones más importantes del mismo, aunque no las únicas, son:

* Administración de la memoria para todos los programas y procesos en ejecución.
* Administración del tiempo de procesador que los programas y procesos en ejecucion utilizan.
* Es el encargado de que podamos acceder a los periféricos/elementos de nuestro ordenador de una manera cómoda.

Hasta que empezó el desarrollo de la serie 2.6 del núcleo, existieron dos tipos de versiones del núcleo:

*

Versión de produccion: La version de produccion, era la version estable hasta el momento. Esta version era el resultado final de las versiones de desarrollo o experimentales.

Cuando el equipo de desarrollo del núcleo experimental, decidia que tenia un núclo estable y con la suficiente calidad, se lanzaba una nueva versión de producción ó estable. Esta versión era la que se debia utilizar para un uso normal del sistema, ya que eran las versiones consideradas más estables y libres de fallos en el momento de su lanzamiento.
* Versión de desarrollo: Esta versión era experimental y era la que utilizaban los desarrolladores para programar, comprobar y verificar nuevas características, correcciones, etc. Estos núcleos solian ser inestables y no se debian usar sin saber lo que se hacia.

Como interpretar los numeros de las versiones de las series por debajo de la 2.6:

* Las versiones del núcleo se numeraban con 3 numeros, de la siguiente forma: AA.BB.CC

AA: Indicaba la serie/versión principal del núcleo. Solo han existido la 1 y 2. Este número cambiaba cuando la manera de funcionamiento del kernel habia sufrido un cambio muy importante.
BB: Indicaba si la versión era de desarrollo ó de producción. Un número impar, significaba que era de desarrollo, uno par, que era de producción.
CC: Indicaba nuevas revisiones dentro de una versión, en las que lo único que se habia modificado eran fallos de programación.
* Unos ejemplos nos ayudaran a entenderlo mejor:

ej1: versión del núcleo 2.4.0: Núcleo de la serie 2 (AA=2), versión de producción 4 (BB=4 par), primera versión de la serie 2.4 (CC=0)
ej2: versión del núcleo 2.4.1: Núcleo de la serie 2, versión 4, en el que se han corregido errores de programación presentes en la version 2.4.0 (CC=1)
ej3: versión del núcleo 2.5.0: versión 0 del núcleo de desarrollo 2.5.

Con la serie 2.6 del núcleo, el sistema de numeración asi como el modelo de desarrollo han cambiado. Las versiones han pasado a numerarse con 4 digitos y no existen versiones de produccion y desarrollo.

* Las versiones del núcleo se numeran hoy en dia con 4 digitos, de la siguiente forma: AA.BB.CC.DD.

AA: Indica la serie/versión principal del núcleo.
BB: Indica la revision principal del núcleo. Numeros pares e impares no tienen ningun significado hoy en dia.
CC: Indica nuevas revisiones menores del núcleo. Cambia cuando nuevas caracteristicas y drivers som soportados.
DD: Este digito cambia cuando se corrigen fallos de programación o fallos de seguridad dentro de una revisión.

Hoy en dia se suele usar el nucleo distribuido con la distribucion que el usuario utiliza. Son las distribuciones las encargadas de distribuir núcleos estables a sus ausuarios y estos nucleos se basan en el núcleo ("vanilla&quot distribuido por Linus Torvalds y el equipo de programadores del núcleo.
Dónde conseguir el núcleo

El núcleo denominado "vanilla" (sin alteraciones y suministrado por Linus Torvalds) se puede bajar de un gran número de servidores en internet pero el sitio oficial es http://www.kernel.org/. En este enlace tienes la lista internacional oficial de servidores espejos, de donde es posible bajarse cualquier versión del núcleo (última y antigüas).

Cada distribución distribuye sus nucleos por los canales de actualización habituales para cada una de ellas.
Configuración e instalación de un nuevo núcleo

Este es uno de los temas que asustan a los nuevos usuarios de Linux. Lo primero, deciros que no hay razón para asustarse, la configuración e instalación de un nuevo núcleo en nuestro sistema es mas fácil de lo suena. Lo segundo, es que podeis tener un sistema estable, actualizado y que funcione sin problemas durante meses sin tener que compilar un solo núcleo, siempre y cuando utiliceis los núcleos distribuidos con vuestra distribución.

Es muy recomendable el utilizar los núcleos distribuidos por la distribución que utiliceis. Estos núcleos tienen muy buena calidad y son muy completos y con esto os evitais el trabajo de configurar, compilar y mantener nuevas versiones del núcleo. Si sois de los que os gustan experimentar y aprender nuevas cosas, adelante, nadie os impide bajaros el último núcleo y experimentar con el, esto era mucho más común hace unos años y una tarea casi imprescindible en muchos casos.

Para los interesados en el tema existen dos documentos muy buenos que podeis utilizar para aprender a como compilar un núcleo, FAQ/Kernel compilation y el Kernel Rebuild Guide
Consejos

* Pregunta: Necesito actualizar el núcleo que utilizo, cada vez que una nueva versión aparece?
Respuesta: No. La explicacion es la siguiente:

Cuando un nuevo núcleo aparece, puede ser por las siguientes causas:
o Nuevas características se han añadido.
o Fallos de programación se han corregido
o Fallos de seguridad se han corregido.
o Nuevo hardware es soportado.

Si las características que se han añadido, no las vamos a utilizar, es evidente que no necesitamos actualizar. Si los fallos de programacion que se han corregido, afectan a características/drivers que no utilizamos, no necesitamos actualizar. Si no utilizamos el nuevo hardware soportado, tampoco necesitamos actualizar.

De todas maneras es recomendable, actualizar de vez en cuando, sobre todo cuando se corrigen fallos de seguridad o cuando los cambios en el nuevo núcleo afectan a caracteristicas/funciones/hardware que utilicemos.
* Pregunta: Soy nuevo en Linux y acabo de instalar una distribucion, como compilo un nuevo núcleo?
Respuesta: Te aconsejo que esperes un poco. La distribución que acabas de instalar (si es de las últimas) viene con un kernel de los "últimos", totalmente funcional y que te sirve sin problemas.

Utiliza el sistema un tiempo, familiarizate con el nuevo sistema que acabas de instalar, y cuando comprendas un poco mas como funcionan las cosas, compila el núcleo si te apetece y sabes que estas haciendo. Un buen punto de partida para encontrar informacion sobre el núcleo, lo tienes en estas páginas.
@potasa
medio94 sos groso, sabelo. +10 para vos ( a pesar de Ctrl + C y Ctrl + v que te mandastes)
@EpilepticMAN +2
pregunta si creas tu kernel basado en linux.
¿tiene que llamarse linux?
¿o puedes ponerle martita?
@tute1090T +3
garolfa ponele de nombre!
@jufe13
siempre se crean en el grub las dos entradas, es decir si hago este procedimiento automáticamente queda la entrada con el kernel de ubuntu y la otra con el kernel compilado?

gracias que buen post
@mankeletor
En vez de esto:
sudo make-kpkg --append-to-version=.XXXX --initrd kernel_image


Yo haría esto:

sudo -i
make-kpkg --append-to-version=-1my_nick --initrd kernel_image kernel_headers