【问题标题】:error: implicit declaration of function 'create_proc_read_entry' [-Werror=implicit-function-declaration]错误:函数“create_proc_read_entry”的隐式声明 [-Werror=implicit-function-declaration]
【发布时间】:2014-09-09 13:53:42
【问题描述】:

我正在尝试在内核 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 内核补丁来最终解决问题。谢谢

【问题讨论】:

  • 该错误是因为您没有明确包含声明函数的标头,并且编译器为您隐式“包含”,这会引发警告。标志“-Werror”使编译器将警告视为错误。尝试添加:#include &lt;linux/proc_fs.h&gt;
  • @braindf:我们不会将此作为答案,因为它就是答案。
  • 另外:create_proc_read_entry 是一个已弃用的函数。 lkml.org/lkml/2013/4/11/215

标签: c linux linux-kernel kernel-module


【解决方案1】:

错误是因为您没有明确包含声明函数的标头,并且编译器为您隐式“包含”,这会引发警告。标志“-Werror”使编译器将警告视为错误。尝试添加:#include &lt;linux/proc_fs.h&gt;

另外:create_proc_read_entry 是一个已弃用的函数。

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

【讨论】:

  • 感谢您的回复。所以,我的标题中已经有 #include 了。我要检查已弃用的功能
【解决方案2】:

在 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个参数。然后就可以了。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-23
      • 2021-10-06
      • 1970-01-01
      相关资源
      最近更新 更多