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

  1. Sin dudarlo ni un segundo te recomendaría que leas el Linux Device Drivers. Es un excelente libro para todos aquellos que quieran aprender a realizar módulos en el kernel de linux.

  2. Varrojo says:

    Desde hace tiempo tengo ganas de leerlo sí, pero desgraciadamente a esta altura del año ando sin tiempo de leer un libro completo.

    De momento tengo que conformarme leyendo algunos tutoriales puntuales, principalmente en los links que adjunté al final del post, los cuales están muy buenos también y expresan en forma clara y concisa los conceptos básicos para desarrollar un módulo.

    Ya tengo funcionando un módulo simple que crea una entrada en /proc y permite leerla y escribirla, guardando lo que el usuario ingresa en un buffer en memoria del Kernel 🙂

  3. Sanchez says:

    Estoy haciendo la tecnica de teleco y en una asignatura de segundo estoy haciendo una practica que consiste en hacer un módulo que cree un archivo en /proc y lo que se escriba en el se mande al puerto serie. Me ha parecido una practica muy útil para conocer el funcionamiento interno del kernel (aunque sea un módulo simple).

Comments are closed.