-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmodulo1.c
More file actions
70 lines (58 loc) · 1.58 KB
/
modulo1.c
File metadata and controls
70 lines (58 loc) · 1.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/proc_fs.h>
#include <linux/sched.h>
#include <asm/uaccess.h>
#include <linux/slab.h>
//Reimer Adolfo Chamalé Linares
//200815270
//Contadores
int tam,tam2;
//Mensaje en memoria
char *msg;
//Simbolo público
EXPORT_SYMBOL(msg);
//Metodo para leer archivo virtual en proc
int read_proc(struct file *filp,char *buf,size_t count,loff_t *offp )
{
if(count>tam2)
{
count=tam2;
}
tam2=tam2-count;
copy_to_user(buf,msg, count); //Da la información al usuario
if(count==0)
tam2=tam;
return count;
}
//Metodo para escribir en el archivo virtual en Proc
int write_proc(struct file *filp,const char *buf,size_t count,loff_t *offp)
{
copy_from_user(msg,buf,count); //Obtiene información dada por el usuario (desde consola)
tam=count;
tam2=tam;
return count;
}
//Aqui defino las operaciones que tendrá el archivo virtual (y los nombres de los metodos, dentro de este archivo, que llamará para eso)
struct file_operations proc_fops = {
read: read_proc,
write: write_proc
};
//Metodo para crear el archivo virtual de proc
void create_new_proc_entry()
{
//Se crea el archivo virtual, con el nombre "modulo1" y las operaciones dadas (en el struct.)
proc_create("modulo1",0,NULL,&proc_fops);
msg=kmalloc(GFP_KERNEL,10*sizeof(char));
}
//Metodo que se llama al cargar el modulo (aqui se llama el metodo que crea el archivo virtual)
int proc_init (void) {
create_new_proc_entry();
return 0;
}
void proc_cleanup(void) {
remove_proc_entry("modulo1",NULL);
}
module_init(proc_init);
module_exit(proc_cleanup);
MODULE_LICENSE("GPL");