错误:函数的隐式声明'create_proc_read_entry'

我想在内核3.13编译一个内核模块,我得到这个错误:

error: implicit declaration of function 'create_proc_read_entry' [-Werror=implicit-function-declaration] 

我谷歌,并没有发现任何回应。 以下是引用此错误的代码部分:

 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) proc = proc_net_create(KAODV_QUEUE_PROC_FS_NAME, 0, kaodv_queue_get_info); #else proc = create_proc_read_entry(KAODV_QUEUE_PROC_FS_NAME, 0, init_net.proc_net, kaodv_queue_get_info, NULL); #endif if (!proc) { printk(KERN_ERR "kaodv_queue: failed to create proc entry\n"); return -1; } 

我能得到帮助吗? 我真的不知道什么是错的。 它可能是内核3.13需要补丁。 我在某处读了(内核3.10)内核需要补丁。 任何人都可以告诉我在哪里可以得到3.13内核补丁最终解决问题。 谢谢

这个错误是因为你没有明确包含声明这个函数的头文件,而且编译器对你隐式的“包含”,这会引发一个警告。 标志“-Werror”正在使编译器将该警告视为错误。 尝试添加: #include <linux/proc_fs.h>

另外: create_proc_read_entry是一个不推荐的函数。

看看: https : //lkml.org/lkml/2013/4/11/215

在Linux 3.9中

 static inline struct proc_dir_entry *create_proc_read_entry(const char *name, umode_t mode, struct proc_dir_entry *base, read_proc_t *read_proc, void * data ) { return NULL; } 

http://lxr.free-electrons.com/source/include/linux/proc_fs.h?v=3.9

在Linux 3.10中

 static inline struct proc_dir_entry *proc_create(const char *name, umode_t mode, struct proc_dir_entry *parent, const struct file_operations *proc_fops ) 

http://lxr.free-electrons.com/source/include/linux/proc_fs.h?v=3.10

因此,将create_proc_read_entry()更改为proc_create() ,并将5个参数更改为4个参数。 它然后工作。

在你的linux版本3.13中, create_proc_read_entry这个方法已经被删除,而使用proc_create或者proc_create_data 。你可以使用这个API

 struct proc_dir_entry *proc_create_data(const char *, umode_t, struct proc_dir_entry *, const struct file_operations *, void *); static inline struct proc_dir_entry *proc_create( const char *name, umode_t mode, struct proc_dir_entry *parent, const struct file_operations *proc_fops);