代码框架如下, my_proc_file_read,my_proc_file_write等完整代码参见http://download.csdn.net/detail/iwtg/5222961
static struct proc_dir_entry *my_proc_entry;
static char *cookie_pot; // Space for my_proc_file strings
static int cookie_index; // Index to write next my_proc_file
static int next_pos_index; // Index to read next my_proc_file
int init_my_proc_file_module( void )
{
int ret = 0;
cookie_pot = (char *)vmalloc( MAX_COOKIE_LENGTH );
if (!cookie_pot)
{
ret = -ENOMEM;
}
else
{
memset( cookie_pot, 0, MAX_COOKIE_LENGTH );
my_proc_entry = create_proc_entry("my_proc_file", 0644, NULL );
if (NULL == my_proc_entry)
{
ret = -ENOMEM;
vfree(cookie_pot);
printk(KERN_INFO "my_proc_file: Couldn't create proc entry.");
}
else
{
cookie_index = 0;
next_pos_index = 0;
my_proc_entry->read_proc = my_proc_file_read;
my_proc_entry->write_proc = my_proc_file_write;
//my_proc_entry->owner = THIS_MODULE;
printk(KERN_INFO "my_proc_file: Module loaded.");
}
}
return ret;
}
void cleanup_my_proc_file_module( void )
{
remove_proc_entry("my_proc_file", NULL);
vfree(cookie_pot);
printk(KERN_INFO "my_proc_file: Module unloaded.\n");
}
makefile
obj-m=myprocfile.o
KERNELDIR := /lib/modules/`uname -r`/build
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
测试结果
root@ubuntu:/home/code/myprocfile# echo "xxx111111111111111111111111" > /proc/my_proc_file
root@ubuntu:/home/code/myprocfile# echo "xxx222222222222222222222222" > /proc/my_proc_file
root@ubuntu:/home/code/myprocfile# echo "xxx333333333333333333333333" > /proc/my_proc_file
root@ubuntu:/home/code/myprocfile# cat /proc/my_proc_file
xxx333333333333333333333333
root@ubuntu:/home/code/myprocfile# cat /proc/my_proc_file
xxx111111111111111111111111
root@ubuntu:/home/code/myprocfile# cat /proc/my_proc_file
xxx222222222222222222222222
root@ubuntu:/home/code/myprocfile# cat /proc/my_proc_file
xxx333333333333333333333333
root@ubuntu:/home/code/myprocfile# cat /proc/my_proc_file
xxx111111111111111111111111
root@ubuntu:/home/code/myprocfile#