我想为我的班级构建一个内核模块,但是我遇到了一堵错误信息的墙,而在这堵墙的最上方是臭名昭著的“没有这个文件或目录”错误。它似乎是问题的根源。这不仅影响init.h,还包括module.h和kernel.h。程序的前三行如下:
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
我查看了周围并尝试了其他路径,以寻找类似问题时这些文件应该在哪里,但到目前为止都没有起作用。最奇怪的部分是我已经使用过这个模块。我被提供了带有此内容的入门代码(我没有更改任何内容),它没有给我那个错误。尽管显然后面的代码不同,但目前似乎这是最大的问题。
完整代码如下:
#include </usr/include/linux/init.h>
#include </usr/include/linux/module.h>
#include </usr/include/linux/kernel.h>
/* This function is called when the module is loaded. */
int simple_init(void)
{
printk(KERN_INFO "Loading Module\n");
static LIST_HEAD(birthday_list)
struct birthday{
int day;
int month;
int year;
struct list_head list;
};
struct birthday *ptr, *next;
struct birthday *bob;
struct birthday *judy;
struct birthday *josh;
struct birthday *lana;
struct birthday *jan;
bob = kmalloc(sizeof(*bob), GFP_KERNEL);
bob -> day = 17;
bob -> month = 1;
bob -> year = 1990;
INIT_LIST_HEAD(&bob -> list);
...
list_add_tail(bob -> list, &birthday_list);
list_add_tail(judy -> list, &birthday_list);
list_add_tail(josh -> list, &birthday_list);
list_add_tail(lana -> list, &birthday_list);
list_add_tail(jan -> list, &birthday_list);
struct birthday *ptr;
list_for_each_entry(ptr, &birthday_list, list){
kprintf('%d/%d/%d \n', ptr -> month, ptr -> day, ptr -> year);
}
list_for_each_entry_safe(ptr, &birthday_list, list){
list_del(&ptr->list);
kfree(ptr);
}
return 0;
}
/* This function is called when the module is removed. */
void simple_exit(void) {
printk(KERN_INFO "Removing Module\n");
}
/* Macros for registering module entry and exit points. */
module_init( simple_init );
module_exit( simple_exit );
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Simple Module");
MODULE_AUTHOR("SGG");
init.h
副本在哪里?你传递给 gcc 的 include 路径是什么? - user590028