A continuación, te explico los pasos para compilar, instalar y probar cualquier driver en Linux.
1. Configura el Entorno
Antes de comenzar, asegúrate de que tienes lo siguiente instalado en tu sistema:
- Kernel headers: Incluyen los archivos necesarios para compilar drivers.
sudo apt install linux-headers-$(uname -r)
- Herramientas de desarrollo como
make
ygcc
:sudo apt install build-essential
2. Estructura del Proyecto
Organiza tus archivos en un directorio. Por ejemplo:
my_driver/
├── Makefile
├── driver.c
El archivo Makefile
es necesario para compilar el driver, y su contenido debe ser algo como esto:
Makefile
obj-m += driver.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
3. Compilar el Driver
- Cambia al directorio donde están los archivos del driver:
cd /ruta/a/my_driver/
- Compila el driver usando
make
:make
Esto generará un archivo con extensión.ko
(Kernel Object). Por ejemplo, si el archivo fuente esdriver.c
, el resultado serádriver.ko
.
4. Instalar el Driver en el Sistema
- Carga del módulo en el kernel: Usa el comando
insmod
para cargar el módulo.sudo insmod driver.ko
- Verifica que el driver esté cargado: Usa
lsmod
para listar los módulos cargados.lsmod | grep driver
Si ves tu módulo en la lista, significa que fue cargado exitosamente. - Verifica mensajes del kernel: Usa
dmesg
para ver los mensajes de registro del kernel.dmesg | tail
Aquí deberían aparecer mensajes relacionados con tu driver, como los definidos enprintk()
.
5. Probar el Driver
Dependiendo del tipo de driver (de carácter, bloque, etc.), deberás interactuar con él de distintas maneras. A continuación, algunos ejemplos:
- Driver de carácter: Si registraste un dispositivo de carácter, debería aparecer un archivo especial en
/dev
.ls /dev | grep nombre_del_dispositivo
Puedes leer/escribir en el dispositivo:echo "Hello, driver!" > /dev/nombre_del_dispositivo cat /dev/nombre_del_dispositivo
- Sysfs: Si tu driver usa
sysfs
, deberías ver un directorio en/sys
relacionado con tu driver:ls /sys/class/nombre_del_dispositivo
6. Desinstalar el Driver
Para descargar el módulo del kernel, usa rmmod
:
sudo rmmod driver
Luego, verifica que el módulo ya no esté cargado:
lsmod | grep driver
7. Limpiar Archivos Compilados
Si quieres eliminar los archivos generados durante la compilación, usa:
make clean
Ejemplo Completo
Supongamos que compilaste el driver char_device.c
y generaste el archivo char_device.ko
. Aquí está el flujo de comandos:
# Compilar el driver
cd /ruta/a/my_driver/
make
# Cargar el driver
sudo insmod char_device.ko
# Verificar que el módulo está cargado
lsmod | grep char_device
# Ver mensajes del kernel
dmesg | tail
# Probar el driver (en este caso, de carácter)
echo "Prueba" > /dev/char_device
cat /dev/char_device
# Descargar el módulo
sudo rmmod char_device
# Limpiar archivos compilados
make clean
Con este proceso, puedes compilar y ejecutar cualquier driver en Linux. Si tienes problemas específicos durante algún paso, ¡avísame y lo revisamos!