Breve resumen de conceptos básicos de programación del Kernel Linux, utilizando Debian GNU/Linux como distribución. Todo hace referencia a la versión 2.6 del Kernel.
Instalación de paquetes necesarios
apt-get install git libncurses5-dev
Obtención del código fuente
Creamos un directorio y clonamos el repositorio del kerne:
mkdir code
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git linux-X.X
# O también...
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-X.X
Configuración inicial
Nos situamos dentro del directorio raíz y ejecutamos
make menuconfig
Ahora podemos configurar manualmente las opciones de nuestro kernel. Sin embargo, podemos también copiar la configuración de nuestro kernel actual, para asegurar el funcionamiento:
cp -v /boot/config-X.X.X .config
make oldconfig # En lugar del anterior `make menuconfig`.
Para evitar tener que pulsar Intro cada vez que la configuración nos pregunte, podemos hacer lo siguiente:
yes '' | make oldconfig
Podemos ponerle un nombre a nuestro kernel. Esto se hace cambiando la variable
EXTRAVERSION del fichero Makefile del directorio raíz.
Compilación e instalación del kernel
Ahora podemos compilar el kernel:
make
E instalarlo:
make modules_install
make install
update-initramfs -c -k X.X.X # `X.X.X` es la versión del kernel.
update-grub
Si queremos ahorrar espacio en disco, también podríamos haber hecho en primer
lugar make INSTALL_MOD_STRIP=1 modules_install.
Si queremos que los ficheros generados después de la compilación estén en un directorio diferente, dejando aparte el directorio de código fuente del kernel, podemos hacerlo:
mkdir ../build_dir
make 0=../build_dir menuconfig
make 0=../build_dir
make 0=../build_dir modules_install
Limpieza después de la compilación
Para limpiar el directorio raíz después de una compilación:
make clean # Borra archivos generados, pero mantiene la configuración.
make mrproper # Borra archivos generados, configuración y ficheros de respaldo.
make distclean # Borra todo como `mrproper` y además los ficheros de parches.
Compilación de módulos
No es necesario tener un kernel compilado para poder compilar un módulo para ese
kernel. Simplemente hace falta tenerlo previamente configurado, bien con
menuconfig o bien con oldconfig. Entonces podemos hacer en el directorio
raíz:
make modules_prepare
Ejemplo de código
Podemos ver un ejemplo de código para un módulo del Kernel Linux en el repositorio de GitHub https://github.com/jose-lpa/kernel-tics