C Linux内核模块编程的编译错误
我正在学习Linux内核模块编程。我用的是Beaglebone黑色。我制作了简单的“Hello World”应用程序和makefile。我已经检查了我的makefile,它是正确的。但当我命令“make”时,它会给我以下错误:C Linux内核模块编程的编译错误,c,linux-kernel,embedded-linux,kernel-module,beagleboneblack,C,Linux Kernel,Embedded Linux,Kernel Module,Beagleboneblack,我正在学习Linux内核模块编程。我用的是Beaglebone黑色。我制作了简单的“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.1
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上配置和启动internet连接。请帮帮我,我卡住了。提前谢谢
代码为:
#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);
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
您可以使用“全部捕获”规则进一步简化生成文件:
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
似乎您正在尝试为尚未安装头的内核版本构建模块 与其在规则中直接调用
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
您可以使用“全部捕获”规则进一步简化生成文件:
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
你请求帮助,但你没有给出Makefile本身(假设它是正确的可能是错误的),也没有代码(这可能不是太糟糕,因为错误在于Makefile)。@tambre我已经反复检查过我的Makefile很多次了。我相信这件事没有错。为方便起见,我附上了代码。经历它,更好。即使你认为它没有缺点,也最好附上它——这对理解发生了什么很有用。现在,是否存在
/lib/modules/3.8.13-bone70/build
目录?来自Make的“未来修改时间”消息通常是由于将文件存储在网络文件系统中而导致的,该文件系统与构建计算机的时间不正确同步。请两台机器的管理员确保他们的NTP客户端工作正常。你说“尽管我参考了一些网站。但是,他们都要求我安装软件包。因为我是新手。我甚至不知道如何使用以太网在Beaglebone上配置和启动internet连接。“请从头开始,并在尝试内核黑客攻击之前学习如何进行。你请求帮助,但你没有给出生成文件本身(假设它是正确的,可能是错误的),而且也没有代码(这可能并不太糟糕,因为错误在于Makefile)@tambre我已经反复检查过我的makefile很多次了。我确信它没有任何错误。为了您的方便,我附加了代码。仔细检查一下。更好。附加它总是一个好主意,即使您认为它没有错误-它可能有助于理解正在发生的事情。现在,/lib/modules/3.8.13-bone70/build
目录是否存在?“未来的修改时间”来自Make的消息通常是由于将文件存储在网络文件系统上而导致的,该文件系统与生成计算机的时间不正确同步。请要求两台计算机的管理员确保他们的NTP客户端工作正常。您说“虽然我参考了一些网站。但是,他们都要求我安装软件包。因为我是新手。”。我甚至不知道如何使用以太网在Beaglebone上配置和启动internet连接。'请从头开始,并在尝试内核黑客攻击之前学习如何进行。.不幸的是,我在/usr/src中看不到'linux headers xxx'文件夹。现在要解决这个问题,我只需要安装'linux headers'。但没有internet connec,我无法做到这一点有什么解决办法吗?你需要知道头文件的位置,你想要建立的版本。现在我们没有什么办法帮你找到它们。有什么命令可以找到头文件吗?我被卡住了。我不能继续了。不幸的是,我看不到/usr/src中的'linux headers xxx'文件夹。现在要解决这个问题,我只需要nstall“linux headers”。但是没有internet连接我无法完成。有什么解决方法吗?您需要知道头文件的位置,以及要根据其生成的版本。我们现在无法为您找到它们。有任何查找头文件的命令吗?我被卡住了。我无法继续。