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

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

我正在学习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.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连接我无法完成。有什么解决方法吗?您需要知道头文件的位置,以及要根据其生成的版本。我们现在无法为您找到它们。有任何查找头文件的命令吗?我被卡住了。我无法继续。