#include #include #include #include #include #include #include /* Module information */ MODULE_AUTHOR( "Gul-uc3m" ); MODULE_DESCRIPTION( "Modulo de ejemplo" ); MODULE_LICENSE("GPL"); int entero=0; int major=250; char * cadena; module_param(major,int,S_IRUGO); struct cdev *my_cdev; ssize_t midispositivo_write (struct file *fichero, const char __user * datos, size_t tamano, loff_t * offset){ printk(KERN_INFO "Estoy escribiendo\n"); return tamano; } ssize_t midispositivo_read (struct file *fichero , char __user * destino, size_t tamano, loff_t * offset){ printk(KERN_INFO "Estoy leyendo\n"); return 0; } struct file_operations fops = { .owner = THIS_MODULE, .read = midispositivo_read, .write = midispositivo_write }; int hola(void){ entero=4; cadena=kmalloc(entero+1,GFP_KERNEL); memcpy(cadena,"hola",entero); cadena[entero]=0x00; my_cdev = cdev_alloc(); my_cdev->owner = THIS_MODULE; my_cdev->ops = &fops; if(cdev_add(my_cdev, MKDEV(major,0), 1)){ printk(KERN_INFO "ERROR CARGANDO\n"); return -1; } printk(KERN_INFO "Hola Mundo.entero=%d y cadena=%s.\n",entero, cadena); return 0; } void adios(void){ cdev_del(my_cdev); printk(KERN_INFO "Adios mundo cruel.entero=%d y cadena=%s.\n",entero, cadena); kfree(cadena); } module_init(hola); module_exit(adios);