创建proc文件,用的create_proc_entry()函数,总是报错:隐式申明函数create_proc_entry。
在proc_fs.h头文件里也没有此函数。后来查阅文献,说是此函数已被proc_create()替代。
====================================================================================原来的函数:
static struct proc_dir_entry *proc_dir = NULL;
static struct proc_dir_entry *proc_file = NULL;
ssize_t file_write(struct file *filp, const char __user *buff, unsigned long len, void *data)
{
int value;
if (copy_from_user(&proc_data[0], buff, len))
return -EFAULT;
proc_data[len] = '\x0';
return len;
}
ssize_t file_read(char *page, char **start, off_t off, int count, int *eof, void *data)
{
sprintf(page, "%s", proc_data);
return strlen(page);
}
int create_procfs_entry(void)
{
proc_dir = proc_mkdir("demo", NULL);
if (!proc_dir) {
printk(KERN_DEBUG "\nxen:domU could not create demo entry in procfs");
ret = - EAGAIN;
return ret;
}
proc_file = create_proc_entry("file",0600,proc_dir); 1
if (proc_file) { 1
proc_file->read_proc = file_read; 1
proc_file->write_proc = file_write; 1
proc_file->owner = THIS_MODULE; 1
} else { 1
printk(KERN_DEBUG "\nxen:domU Could not create /proc/demo/file");
ret = -EAGAIN;
return ret;
}
return ret;
}
====================================================================================
修改之后的:
先在create_procfs_entry函数外建立结构体:
struct file_operations proc_fops=
{
.read=file_read,
.write=file_write,
.owner=THIS_MODULE,
};
将1位置的函数修改如下:
proc_file = proc_create("file", 0600, proc_dir, &proc_fops);
if(!proc_file){
其他不变
====================================================================================
两个函数没有很多差别,参数不一样,指定函数read或write方式不一样而已。