2013-09-21 100 views
1

我刚刚开始使用Linux内核开发,并且遇到了编译make文件的问题。为linux内核编译make文件时出现问题?

这是hello世界的教程。

我的HELLO-1.C文件

* 
* hello−1.c − The simplest kernel module. 
*/ 
#include <linux/module.h> 
/* Needed by all modules */ 
#include <linux/kernel.h> 
/* Needed for KERN_INFO */ 
int init_module(void) 
{ 
printk(KERN_INFO "Hello world 1.\n"); 
/* 
* A non 0 return means init_module failed; module can't be loaded. 
*/ 
return 0; 
} 
void cleanup_module(void) 
{ 
printk(KERN_INFO "Goodbye world 1.\n"); 
} 

我的Makefile

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

无论这个文件是在文件夹中的/ home/KKR /文档/ HelloWorld的

当我运行使命令我得到下面的输出。

uname: extra operand `−r' 
Try `uname --help' for more information. 
make −C /lib/modules//build M=/home/kkr/Documents/HelloWorld modules 
make[1]: Entering directory `/home/kkr/Documents/HelloWorld' 
make[1]: *** No rule to make target `−C'. Stop. 
make[1]: Leaving directory `/home/kkr/Documents/HelloWorld' 
make: *** [all] Error 2 

任何人都可以有任何想法是什么根源?我知道这很简单,但我不能从这里出来吗?

感谢

+0

这真的是你的'Makefile'的格式吗?如果是,则格式不正确。命令应该在具有目标和依赖关系的行之后缩进。 – lurker

+0

@mbratch不,它不是。其实发布问题时,我做了CTRL + K可能是删除标签。我再次编辑了这个问题。 – user2510115

回答

4
$(shell uname −r) 
      ^
      This is not a - (dash , minus) character. 

你想

$(shell uname -r) 
+0

哦!很好的观察,我也为C做了同样的事情。但我做到了,编译也很好。谢谢 – user2510115

+0

出于好奇,你是怎么发现的?你刚刚看到了吗? –

+3

@Étienne只需复制粘贴到终端运行uname -r,失败,然后键入自己的工作命令。 – nos

0

我最初曾面临同样的问题。

不应复制Makefile的内容。 复制将改变一些字符,所以'make'命令不会再识别它们。

要正确构建模块,您需要在Makefile中手动输入代码。