Desarrollando módulos del Kernel

Como tarea obligatoria del curso de Linux en facultad le propuse a Rodolfo Pilas la posibilidad de desarrollar un módulo del Kernel. La idea no es volverme loco haciendo un driver de video ni nada demasiado complicado, sino más bien experimentar haciendo un módulo sencillo que haga algo.

Existe muchísima documentación en varios sitios que proveen una iniciación en el mundo de la programación de módulos, pero comencemos por el principio – ¿qué es un módulo de Linux para un programador?

Linux es un Kernel modular. Esto significa que es capaz de cargar nuevas funcionalidades en tiempo de ejecución, a medida que un usuario o el sistema las necesita. Los paquetitos que brindan estas nuevas funcionalidades serían los módulos.

Ejemplos de todos los días incluyen: drivers de video, drivers de sonido, controladores de dispositivos o controladores de Sistema de Archivos, entre otros.

Cuando un módulo es cargado en el Kernel, éste se “une” con él y queda ejecutando dentro de su espacio de direcciones. De aquí surge el poder de los módulos. El ejecutar dentro del Kernel les brinda el poder de hacer prácticamente cualquier cosa: acceder a donde quieran y hacer lo que tengan que hacer sin restricciones.

Esto significa también que quien desarrolla los módulos debe ser extremadamente cuidadoso, ya que puede hacer mucho -mucho- daño al sistema desde dentro de él, en particular considerando que implementar un módulo no es una tarea para nada complicada.

El módulo más simple que se nos pueda ocurrir tiene dos funciones: una de inicialización, invocada cuando éste es cargado y una de terminación, invocada cuando el usuario desea descargarlo.

La función de inicialización debería crear todas las estructuras que el módulo necesitará. Generalmente serían estructuras en memoria, pero también existen funciones para crear entradas en los sistemas virtuales como /proc y /dev, por donde el módulo puede comunicarse con “el mundo exterior”.

Es por este lado que estoy pensando implementar el trabajo obligatorio, desarrollando un módulo sencillo que cree una entrada en /proc y permita leer y escribir mensajes.

UPDATE: Finalmente el módulo desarrollado ha sido publicado. Puden encontrar más detalles, así como todo el fuente aqui mismo: http://varrojo.linuxuruguay.org/?p=156. También pueden encontrar más información en nuestra sección de Tutoriales.

Para quienes estén interesados en seguir leyendo sobre el tema, encontré una serie de referencias muy útiles. Links obligatorios para quien quiere desarrollar un conocimiento más profundo sobre el funcionamiento interno del Kernel:

This entry was posted in Linux, Programacion, Tutoriales. Bookmark the permalink.

3 Responses to Desarrollando módulos del Kernel

Comments are closed.