#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/interrupt.h>
#include <linux/proc_fs.h>
#include<linux/sched.h>
#include <asm/uaccess.h>
#include <asm/io.h>
#include <linux/slab.h>

#define PROC_FILE_NAME "testfile"

ssize_t read_simple(struct file *filp, char *buf, size_t count, loff_t *offp ) 
{
	printk("Read was called!\n");
	return 0;
}

ssize_t write_simple(struct file *filp,const char *buf,size_t count,loff_t *offp)
{
	printk("Write was called, with a buffer containing %s\n", buf);
	return count;	
}

struct file_operations proc_fops = {
	read: read_simple,
	write: write_simple
};

int proc_init (void) {
	printk("We're in the kernel!\n");
	proc_create(PROC_FILE_NAME,0,NULL,&proc_fops);
	return 0;
}

void proc_cleanup(void) {
	remove_proc_entry(PROC_FILE_NAME,NULL);
}

MODULE_LICENSE("GPL"); 
module_init(proc_init);
module_exit(proc_cleanup);