2017-06-19 85 views
1

我正在尝试构建一个内核模块。我在Fedora 25没有这样的文件或目录错误。哪里不对?

这里是我的Makefile:

obj-m += simple.o 
all: 
     make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules 
clean: 
     make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean 

这是simple.c文件:

#include <linux/init.h> 
#include <linux/module.h> 
#include <linux/kernel.h> 

/* This function is called when the module is loaded. */ 
int simple_init(void) 
{ 
    printk(KERN_INFO "Loading Module\n"); 

    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"); 

使用make命令后,我得到的错误:

make -C /lib/modules/4.11.3-202.fc25.x86_64/build M=/home/nubian/Downloads/ch02/ch2 modules 
make[1]: *** /lib/modules/4.11.3-202.fc25.x86_64/build: No such file or directory. Stop. 
Makefile:7: recipe for target 'default' failed 
make: *** [default] Error 2 
+0

'/ lib/modules/4.11.3-202.fc25.x86_64/build'应该是一个指向内核模块所在目录的链接。是吗?请参阅http://elixir.free-electrons.com/linux/v4.9.33/source/README#L124 – stark

+0

这是我在尝试安装kernel-devel时得到的消息:最后一次元数据过期检查:1:09:07以前在Mon Jun 19 12:26:54 2017. 软件包kernel-devel-4.11.5-200.fc25.x86_64已经安装,正在跳过。 –

+0

请注意,您正在运行内核“4.11.3-202.fc25”,但已安装软件包“kernel-devel-4.11.5-200.fc25”。这些不匹配,所以你的构建不能成功。也许你已经将你的软件包更新到一个更新的内核,但还没有重新启动你的系统,所以你实际上并没有运行该内核? – MadScientist

回答

0

当您调用递归make时,您应始终使用$(MAKE)从不make。但是,这不是你的问题。

您的问题是您没有安装当前运行内核的模块构建环境。如果你安装它,它会创建你需要为你的内核构建模块的目录。

例如,请参阅this page上的yum install命令。

+0

你好,谢谢你的帮助。我已经安装了kernel-devel软件包,并且仍然有相同的错误信息。 –

+0

然后你的运行内核不能是一个正常安装的Fedora内核。 '$(shell uname -r)'命令返回当前运行的内核版本,这是makefile试图找到的目录。 – MadScientist

相关问题