Para generar el código objeto de este ejemplo basta con compilarlo como siempre hemos hecho, pero tenemos que tomar una pequeña precaución, hay que decirle al compilador donde están las cabeceras del kernel. Entre los sitios por defecto donde gcc busca librerías no está el directorio de las cabeceras del kernel4.6, por lo que no será capaz de encontrar los ficheros incluidos (module.h y kernel.h).
Con esto en mente el comando para compilar exitosamente el módulo será:
$ gcc -I/cabeceras-del-kernel -c -o hola.o hola.c
Con esto generamos el fichero objeto hola.o, que es directamente el módulo a insertar:
$ insmod ./hola.o
Si ahora hacemos un tail de /var/log/messages4.7:
. . . Feb 15 16:08:34 shire -- MARK -- Feb 15 16:15:27 shire kernel: hola: hola mundo
Podemos comprobar como el módulo se ha insertado perfectamente. Una llamada a lsmod nos generará la siguiente salida:
$ lsmod Module Size Used by hola 320 0 (unused) es1371 23872 1 soundcore 2372 4 [es1371]
De esta manera podemos ver información adicional sobre el estado de nuestro módulo ``hola'' en el kernel.
Si queremos eliminar el módulo, basta con:
$ rmmod hola
Si miramos otra vez /var/log/messages, podemos ver como el módulo se despide de nosotros. Si volvemos a hacer un lsmod, vemos que el módulo ya no está en el kernel.