web-dev-qa-db-ja.com

エラー:関数 'create_proc_read_entry'の暗黙的な宣言[-Werror = implicit-function-declaration]

カーネル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カーネルパッチをどこで入手して最終的に問題を修正できるかを教えてもらえますか?ありがとう

8
scof007

エラーは、関数を宣言するヘッダーを明示的にインクルードしておらず、コンパイラーが暗黙的にインクルードしているためです。これにより警告がスローされます。フラグ「-Werror」は、コンパイラに警告をエラーとして処理させます。追加してみてください:#include <linux/proc_fs.h>

また:create_proc_read_entryは非推奨の関数です。

見てください: https://lkml.org/lkml/2013/4/11/215

7
braindf

linux3.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

linux3.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.1

したがって、create_proc_read_entry()proc_create()に変更し、5つのパラメーターを4つのパラメーターに変更します。その後、動作します。

3
tonysok

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);
2
wack