简体   繁体   中英

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

I'm trying to compile a kernel module on kernel 3.13 and I get this error:

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

I google it and did not found any response. Here is the part of the code which refers to this error:

#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;
    }

Can I get help ? I really don't know what is wrong. It might be the kernel 3.13 which needs a patch. I read somewhere (on KERNEL 3.10) that the kernel needs patch. Can anyone show me where can I get the 3.13 kernel patch to eventually fix the problem. Thanks

The error is because you are not including explicitly the header that declares the function and the compiler is 'including' implicitily for you and this throws a warning. The flag '-Werror' is making the compiler treats the warning as an error. Try adding: #include <linux/proc_fs.h>

Also: create_proc_read_entry is a deprecated function.

Take a look at: https://lkml.org/lkml/2013/4/11/215

in 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

in 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

So change create_proc_read_entry() to proc_create() , and change the 5 parameters to 4 parameters. It then works.

In your linux version 3.13 create_proc_read_entry this method has been deleted,instead using proc_create or proc_create_data .You can use this 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);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM