gpt4 book ai didi

Linux内核模块编程的编译错误

转载 作者:太空宇宙 更新时间:2023-11-04 06:56:30 25 4
gpt4 key购买 nike

我正在学习 Linux 内核模块编程。为此,我正在使用 Beaglebone black。我制作了简单的“Hello World”应用程序和 makefile。我已经检查了我的 makefile,它是正确的。但是当我命令“make”时,它会给我以下错误:

root@beaglebone:/home/sonu# make
make: Warning: File `Makefile' has modification time 2.2e+02 s in the future
make -C /lib/modules/3.8.13-bone70/build M=/home/sonu modules
make: *** /lib/modules/3.8.13-bone70/build: No such file or directory. Stop.
make: *** [all] Error 2

虽然我提到了一些网站。但是,他们都要求我安装软件包。因为我是新手。我什至不知道如何使用以太网在 Beaglebone 上配置和启动互联网连接。请帮助我,我被困住了。提前致谢。

代码是:

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

static int __init hello(void)
{
printk(KERN_INFO "Hello World!");
return 0;
}

static void __exit hello_cleanup(void)
{
printk(KERN_INFO "Bye");
}

module_init(hello);
module_exit(hello_cleanup);

Makefile 是:

obj-m+=Hello.o

all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
$(CC) Hello.c -o test
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
rm test

最佳答案

看来您正在尝试为尚未安装头文件的内核版本构建模块。

与其在您的规则中直接调用 uname,不如将其放入您可以覆盖的变量中:

obj-m+=Hello.o

KSRC := /lib/modules/$(shell uname -r)/build

all:
make -C $(KSRC) M=$(PWD) modules
$(CC) Hello.c -o test
clean:
make -C $(KSRC) M=$(PWD) clean
rm test

现在,您可以使用内核头文件的实际位置进行覆盖:

make KSRC=/usr/src/linux-headers-4.9.2 all

您可以使用包罗万象的规则进一步简化 Makefile:

obj-m+=Hello.o

KSRC := /lib/modules/$(shell uname -r)/build

all: modules
$(CC) Hello.c -o test

%:
make -C $(KSRC) M=$(PWD) $@

clean::
make -C $(KSRC) M=$(PWD) clean
$(RM) test

关于Linux内核模块编程的编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43762871/

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