home
/**
* Makefile Para compilar (el archivo se llama fente.c):
*
* obj-m := fente.o
* PWD := $(shell pwd)
* #Compiler
*
* all:
* @echo "------------------------------------------"
* make -C /lib/modules/$(shell uname -r)/build SUBDIRS=$(PWD) modules
*
* clean:
* @echo "------------------------------------------"
* @rm -f *.o *.ko *.mod.c .*.cmd sysenter.h
* make -C /lib/modules/$(shell uname -r)/build SUBDIRS=$(PWD) clean
*
*/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/types.h>
#include <linux/fs.h>
#include <asm/uaccess.h>
int leido =0;int mn = 0; //si le ponemos igual a 0 el kernel nos asigna el primero que este libre ;)
int mi_open (struct inode * inode, struct file * filp)
{
leido=0;
printk(KERN_INFO "open realizada\n");
return 0;
}
ssize_t mi_read (struct file * filp, char __user * buff)
{
int i;
char * cadena = "Hola caracola\n";
printk(KERN_INFO "Read ejecutada\n");
if(!leido)
{
for ( i=0; i<strlen(cadena) ; i++)
{ put_user(cadena[i], buff + i);}
leido++;
return strlen(cadena);
//int aux= copy_to_user(buff,cadena,sizeof(cadena));
//return aux;
}
return 0;
}
int mi_release (struct inode * inode,struct file *filep)
{
printk(KERN_INFO "Release del fichero \n");
return 0;
}
struct file_operations fops = {
.owner = THIS_MODULE,
.open = mi_open,
.read = mi_read,
.release= mi_release,
};
int no_dev = MKDEV(50,1);
static int __init fent_init(void) {
printk(KERN_INFO "Prueba de un driver\n");
if ((mn=register_chrdev(mn, "my_device", &fops))<0 )
return -1;
printk("mknod /dev/hook c %d 0.\n", mn);
return 0;
}
static void __exit fent_exit(void) {
printk(KERN_INFO "Se descarga el LKM...\n");
unregister_chrdev(mn, "my_device");
}
module_init(fent_init);
module_exit(fent_exit);
MODULE_LICENSE("GPL");