2013-09-21 71 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中手動輸入代碼。