我试图在内核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内核补丁,以最终解决问题。感谢
答案 0 :(得分:7)
错误是因为您未明确包含声明该函数的标头,并且编译器包含&#39;包括&#39;隐含的对你而言会抛出一个警告。旗帜&#39; -Werror&#39;使编译器将警告视为错误。尝试添加:#include <linux/proc_fs.h>
另外:create_proc_read_entry
是不推荐使用的功能。
答案 1 :(得分:3)
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个参数。它然后工作。
答案 2 :(得分:2)
在您的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);