Ultima actualización 2020-12-09 Palabras clave: linux kernel eudyptula
Enlaces a la documentación del kernel:
Documentación general para desarrollo: https://www.kernel.org/doc/html/latest/process/index.html
Descripción de como funciona la comunidad de desarrollo del kernel: https://www.kernel.org/doc/html/latest/process/howto.html
“Think of a teacher grading homework from a math student. The teacher does
not want to see the student’s trials and errors before they came up with the
solution. They want to see the cleanest, most elegant answer. A good student
knows this, and would never submit her intermediate work before the final
solution.
The same is true of kernel development. The maintainers and reviewers do
not want to see the thought process behind the solution to the problem
one is solving. They want to see a simple and elegant solution.”
De: https://www.kernel.org/doc/html/latest/process/submitting-patches.html
Obtener el current source tree del kernel:
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Style-check your changes:
Check your patches with the patch style checker prior to submission
(scripts/checkpatch.pl)
De: https://www.kernel.org/doc/html/latest/process/coding-style.html
La indentación son 8 espacios. NOTA: NO ESTÁ ACLARADO, PERO LA INDENTACIÓN ES CON UN TABULADOR.
El limite de linea son 80 caracteres.
No más de 3 niveles de indentación.
La apertura de una función se realiza en la linea siguiente a su definición:
int function(int x)
{
body of function
}
No usar braces
en if's de una sola linea:
if (condition)
action();
NEVER try to explain HOW your code works in a comment: it’s much better to
write the code so that the working is obvious, and it’s a waste of time to
explain badly written code.
Se puede utilizar el script scripts/checkpatch.pl
para verificar la
sintaxis de un archivo (esto no está documentado en el enlace anterior):
$ /path/to/checkpatch.pl -f file
La lista de los requerimientos minimos para compilar y ejecutar el kernel se encuentran en: https://www.kernel.org/doc/html/latest/process/changes.html
Los paquetes en debian
que se corresponden son los siguientes:
FIXME: COMPLETAR LA LISTA Y EL COMANDO
Estos se instalan utilizando la siguiente linea:
$ sudo apt-get update
$ sudo apt-get install -qVy build-essential linux-headers-amd64
Para crear un módulo del kernel fuera del arbol se necesita:
Un archivo Kbuild Makefile
Este archivo indica los fuentes del módulo a compilar utilizando la variable obj-m. Ver el apartado 3.1 Goal definitions en la documentación del kernel sobre Kbuild.
Un archivo stand-alone Makefile
Para este caso que el módulo es sencillo se utiliza el makefile propuesto en la documentación sobre construcción de módulos, en el apartado 3.2 Separate Kbuild file and Makefile.
En este archivo se indica utilizando la variable KDIR cual es la ruta a los headers del kernel.
Los archivos fuente del módulo.
En nuestro caso es el archivo hello.c.
Por más información leer los enlaces previos.
En el libro Linux Kernel Development
en el capítulo 17 - Devices and
Modules se explica como crear un módulo Hello World!.
Para compilar el módulo y probar que este es correctamente instalado y desinstalado:
$ make clean \
&& make \
&& sudo -s -- sh -c "dmesg --clear \
&& insmod hello.ko \
&& echo \"==== After insmod\" \
&& dmesg \
&& echo \"==== After rmmod\" \
&& rmmod hello \
&& dmesg"
La salida de este comando es la prueba al problema.