gpt4 book ai didi

linux - 模块编译 : asm/linkage. h 文件未找到

转载 作者:IT王子 更新时间:2023-10-28 23:54:32 35 4
gpt4 key购买 nike

我正在尝试编译“hello world”内核模块的示例,在 ubuntu 11.04、内核 3.2.6、gcc 4.5.2 和 fedora 16、内核 3.2.7、gcc 4.6.7 上发现问题。

代码:

#include <linux/module.h>
#include <linux/init.h>
MODULE_LICENSE("GPL");

static int __init hello_init (void)
{
printk("Hello module init\n");
return 0;
}
static void __exit hello_exit (void)
{
printk("Hello module exit\n");
}
module_init(hello_init);
module_exit(hello_exit);

编译:

gcc -D__KERNEL__ -I /usr/src/linux/include/ -DMODULE -Wall -O2 -c hello.c -o hello.o

错误:

In file included from /usr/src/linux/include/linux/kernel.h:13:0, from /usr/src/linux/include/linux/cache.h:4, from /usr/src/linux/include/linux/time.h:7, from /usr/src/linux/include/linux/stat.h:60, from /usr/src/linux/include/linux/module.h:10, from hello.c:1: /usr/src/linux/include/linux/linkage.h:5:25: fatal error: asm/linkage.h: file not found

然后我发现在/usr/src/linux/include/中没有名为 'asm' 的文件夹,而是 'asm-generic';所以我将“asm”软链接(soft link)到“asm-generic”,并编译成功:

这次的错误是:

In file included from /usr/src/linux/include/linux/preempt.h:9:0, from /usr/src/linux/include/linux/spinlock.h:50, from /usr/src/linux/include/linux/seqlock.h:29, from /usr/src/linux/include/linux/time.h:8, from /usr/src/linux/include/linux/stat.h:60, from /usr/src/linux/include/linux/module.h:10, from hello.c:1: /usr/src/linux/include/linux/thread_info.h:53:29: fatal error: asm/thread_info.h: file not found

所以我意识到我错了,但为什么呢? T_T

最佳答案

obj-m += hello.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

是构建模块的正确方法,请参阅 kbuild documentation

要查看编译器调用之间的差异,您可以

cat /lib/modules/$(shell uname -r)/build/Makefile

并分析输出

关于linux - 模块编译 : asm/linkage. h 文件未找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9492559/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com