Makefile 在Debian9上编译内核模块

Makefile 在Debian9上编译内核模块,makefile,module,debian,kernel,Makefile,Module,Debian,Kernel,我试图在Debian9下构建一个内核模块。 我使用安装了必要的软件包 sudo apt-get install build-essential linux-headers-4.9.0-5-amd64 但是,当我尝试编译模块时,收到以下错误消息: > make make -C /lib/modules/4.9.0-5-amd64/build M=/home/sven/tmp/kernel modules make[1]: Entering directory '/lib/modules/4

我试图在Debian9下构建一个内核模块。 我使用安装了必要的软件包

sudo apt-get install build-essential linux-headers-4.9.0-5-amd64
但是,当我尝试编译模块时,收到以下错误消息:

> make
make -C /lib/modules/4.9.0-5-amd64/build M=/home/sven/tmp/kernel modules
make[1]: Entering directory '/lib/modules/4.9.0-5-amd64/build'
make[1]: *** No rule to make target 'modules'.  Stop.
make[1]: Leaving directory '/lib/modules/4.9.0-5-amd64/build'
Makefile:6: recipe for target 'all' failed
make: *** [all] Error 2
问题似乎是,在该文件中没有Makefile

/lib/modules/4.9.0-5-amd64/build
目录。事实上,这个目录是空的。。。 这可能是一个初学者的问题,但有人知道如何解决这个问题吗? 下面列出了内核模块的源代码以及相应的Makefile

非常感谢你的帮助

模块的C代码:

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

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Homer S.");
MODULE_DESCRIPTION("hmmmm ...");
MODULE_VERSION("1.0")


static int __init
start(void) {
  printk(KERN_INFO "\nCHELLAS!\n\n");
  return 0;
}


static void __exit
end(void) {
  printk(KERN_INFO "\nCIAO!\n\n");
  return 0;
}


module_init(start);
module_exit(end);

makefile可以与较新的linux headers软件包配合使用,这可能是暂时的问题,也可能是系统上软件包安装的问题

请注意,您的.c代码不会编译以下内容:

diff --git a/foo.c b/foo.c
index 97611ef..5769fa7 100644
--- a/foo.c
+++ b/foo.c
@@ -5,7 +5,7 @@
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Homer S.");
 MODULE_DESCRIPTION("hmmmm ...");
-MODULE_VERSION("1.0")
+MODULE_VERSION("1.0");


 static int __init
@@ -18,7 +18,6 @@ start(void) {
 static void __exit
 end(void) {
   printk(KERN_INFO "\nCIAO!\n\n");
-  return 0;
 }
diff --git a/foo.c b/foo.c
index 97611ef..5769fa7 100644
--- a/foo.c
+++ b/foo.c
@@ -5,7 +5,7 @@
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Homer S.");
 MODULE_DESCRIPTION("hmmmm ...");
-MODULE_VERSION("1.0")
+MODULE_VERSION("1.0");


 static int __init
@@ -18,7 +18,6 @@ start(void) {
 static void __exit
 end(void) {
   printk(KERN_INFO "\nCIAO!\n\n");
-  return 0;
 }