9

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

scof007
  • 415
  • 2
  • 9
  • 15
  • 1
    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 ` – braindf Sep 09 '14 at 14:17
  • @braindf: We not make this an answer, as it is the answer. – alk Sep 09 '14 at 14:23
  • Also: `create_proc_read_entry` is a deprecated function. https://lkml.org/lkml/2013/4/11/215 – braindf Sep 09 '14 at 14:24
  • possible duplicate of [implicit declaration of function 'create\_proc\_entry'](http://stackoverflow.com/questions/26808325/implicit-declaration-of-function-create-proc-entry) – Léo Lam May 08 '15 at 08:57

3 Answers3

9

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

alk
  • 69,737
  • 10
  • 105
  • 255
braindf
  • 734
  • 4
  • 14
  • 1
    Thanks for the reply. So, I have already the #include in my header. I'm going to check the deprecated function – scof007 Sep 09 '14 at 14:39
4

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.

depperm
  • 10,606
  • 4
  • 43
  • 67
tonysok
  • 627
  • 1
  • 7
  • 13
2

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);
wack
  • 71
  • 4