错误:隐含的函数声明' create_proc_read_entry' [-Werror =隐函数声明]

时间:2014-09-09 13:53:43

标签: c linux linux-kernel kernel-module

我试图在内核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。我在某处(在KERNEL 3.10上)读到内核需要补丁。任何人都可以告诉我在哪里可以得到3.13内核补丁,以最终解决问题。感谢

3 个答案:

答案 0 :(得分:7)

错误是因为您未明确包含声明该函数的标头,并且编译器包含&#39;包括&#39;隐含的对你而言会抛出一个警告。旗帜&#39; -Werror&#39;使编译器将警告视为错误。尝试添加:#include <linux/proc_fs.h>

另外:create_proc_read_entry是不推荐使用的功能。

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

答案 1 :(得分:3)

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个参数。它然后工作。

答案 2 :(得分:2)

在您的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);