Fedora Linux——编译第一个Linux模块

5
在Fedora Linux中编译我的第一个内核模块时遇到了错误。
源代码如下:--
#include <linux/module.h>       /* Needed by all modules */
#include <linux/kernel.h>       /* Needed for KERN_INFO */
#include <linux/init.h>         /* Needed for the macros */
static int __init hello_start(void)
{
printk(KERN_INFO "Loading hello module...\n");
printk(KERN_INFO "Hello world\n");
return 0;
}
static void __exit hello_end(void)
{
printk(KERN_INFO "Goodbye Mr.\n");
}
module_init(hello_start);
module_exit(hello_end);

Makefile:

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

制作时出现错误:--
$ make
make -C /lib/modules/3.8.6-203.fc18.x86_64/build M=/home/dinesh/development/linux/kernel_modules/hello modules
make: *** /lib/modules/3.8.6-203.fc18.x86_64/build: No such file or directory.  Stop.
make: *** [default] Error 2

现在,如果我检查是否存在build,我会得到以下输出。构建显示为软链接:---
$ ls -l /lib/modules/3.8.6-203.fc18.x86_64/
total 2632
lrwxrwxrwx.  1 root root     38 Apr 15 21:32 build -> /usr/src/kernels/3.8.6-203.fc18.x86_64
drwxr-xr-x. 

即使安装了kernel-devel,我仍然遇到相同的错误:--

我的makefile是正确的,在规则之前有正确的制表符。请建议如何解决此错误?


/usr/src/kernels/3.8.6-203.fc18.x86_64 是否存在? - Brian Cain
@peter根据您提供的链接,我们可以通过以下主题获取内核源代码-获取源代码-然后按照此过程安装我的内核源代码在此处-${HOME}/rpmbuild/SOURCES-之后将源代码复制到以下路径-/usr/src/kernels/3.8.6-203.fc18.x86_64-我理解的对吗? - Katoch
@Katoch 听起来差不多。请注意,这是Red Hat配置的Linux内核。您也可以直接从kernel.org和镜像获取内核。所有版本都可用。许多/大多数人会将内核源代码放在/usr/src/linux中,或者将其作为符号链接到源代码。这一切可能看起来像是构建/加载第一个模块的迂回方式,但模块开发人员需要熟悉内核以及他们的模块如何与之配合工作。 - Peter L.
@Katoch 同时,请确保不要覆盖已经存在于 /usr/src/linux 中的任何文件。 - Peter L.
1
在 Fedora 中构建模块时,您不需要内核源代码树;您只需要匹配正在构建的内核的 kernel-develkernel 包版本即可。 - guido
显示剩余7条评论
1个回答

3
如Guido所说,您需要匹配当前的内核版本和kernel-devel软件包。
要获取内核版本,请运行以下命令:
uname -r

我得到了3.6.10-4.fc18.x86_64版本,下载该版本的kernel-devel。
sudo yum install kernel-devel-3.6.10-4.fc18

或者更新您的系统并使用新内核启动,我相信这两个会自动匹配。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接