カーネル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 <linux/proc_fs.h>
また:create_proc_read_entry
は非推奨の関数です。
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つのパラメーターに変更します。その後、動作します。
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);