Tuesday, April 28, 2009

Drivers en linux (I)

Bueno iba a hacer esto en un solo post pero por partes es mejor, primero lo básico, cargar y bajar el modulo. En mi caso necesito un modulo para SPI, entonces lo ubico en drivers/spi/test.c

Comenzando con lo basico, entrar y bajar el modulo.

test.c

#include <linux/module.h>
#include "test.h"

static int __init this_init(void)
{
// Initialize module.

printk(DEVICE_NAME ": Init.\n");
}

static void __exit this_exit(void)
{
// Exit module.

printk(DEVICE_NAME ": Exit.\n");
}


test.h

#ifndef _TEST_SPI_H_
#define _TEST_SPI_H_

#define DEVICE_NAME "test-spi"

MODULE_AUTHOR("Jorge Eduardo Cardona <jorgeecardona@gmail.com>");
MODULE_DESCRIPTION("SPI test driver.");
MODULE_LICENSE("GPL");

// Linux module functions.
static int __init this_init(void);
static void __exit this_exit(void);
module_init(this_init);
module_exit(this_exit);

#endif


Tenemos que manipular dos archivos mas: Kconfig y Makefile, ambos en la misma carpeta:

Kconfig

.
.
.
config SPI_TEST
tristate "Test SPI driver."
depends on SPI_MASTER && EXPERIMENTAL
help
Test SPI driver.
.
.
.


Makefile

.
.
.
obj-$(CONFIG_SPI_TEST) += test.o
.
.
.


Al configurar el kernel nos saldra la opcion, la seleccionamos y podremos hacer esto:

root@gumstix-custom-connex:~$ modprobe test
root@gumstix-custom-connex:~$ dmesg | tail -n1
<4>; test-spi: Init.
root@gumstix-custom-connex:~$ rmmod test
root@gumstix-custom-connex:~$ dmesg | tail -n1
<4> test-spi: Exit.
root@gumstix-custom-connex:~$


Primer paso listo.

No comments: