proc文件系统是一种虚拟的文件系统,它只存在于内存当中,一般用来在内核中输出一些信息到用户层,通常可以利用其来打印内核程序中的一些调试信息,具体的操作如下代码。
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/uaccess.h>
#include <linux/proc_fs.h>
MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("fuyajun1983cn@yahoo.com.cn");
// Entries for /proc/gdl and /proc/gdl/memory
static struct proc_dir_entry * mm_proc_mem; //对应目录项
static struct proc_dir_entry * mm_proc_dir; //对应文件
static int mm_write_proc_func(struct file * file,
const char * buffer,
unsigned long count,
void * data)
{
unsigned char file_name[80];
unsigned int size_to_copy;
size_to_copy = count;
memset(file_name, 0x0, 80);
copy_from_user(file_name, buffer, size_to_copy);
printk("%s", file_name);
return size_to_copy;
}
//----------------------------------------------------------------------------
// Initialize proc filesystem
//----------------------------------------------------------------------------
static int __init mm_procfs_init(void)
{
mm_proc_dir = 0;
mm_proc_mem = 0;
mm_proc_dir = proc_mkdir("gdl",0);//在/proc下创建一个目录
if (mm_proc_dir == 0)
{
printk(KERN_ERR "/proc/gdl/ creation failed\n");
return -1;
}
//创建/proc/gdl/memory文件
mm_proc_mem = create_proc_entry("memory",
S_IFREG|S_IRWXU|S_IRWXG|S_IRWXO,
mm_proc_dir);
if (mm_proc_mem == 0)
{
printk(KERN_ERR "/proc/gdl/memory creation failed\n");
remove_proc_entry("gdl", 0);
mm_proc_dir = 0;
return -1;
}
mm_proc_mem->read_proc = 0;
mm_proc_mem->write_proc = mm_write_proc_func;
mm_proc_mem->data = 0;
return 0;
}
//----------------------------------------------------------------------------
// De-initialize proc filesystem
//----------------------------------------------------------------------------
static int __exit mm_procfs_deinit(void)
{
if (mm_proc_dir != 0)
{
if (mm_proc_mem != 0)
{
remove_proc_entry("memory", mm_proc_dir);
mm_proc_mem = 0;
}
remove_proc_entry("gdl", 0);
mm_proc_dir = 0;
}
return 0;
}
module_init(mm_procfs_init);
module_exit(mm_procfs_deinit);