2012-01-28 127 views
1

只是爲了一些例子擴大,現在的問題是: 鑑於以下來源:如何在Linux Ubuntu中編譯驅動程序/內核模塊?

/* hello.c */ 

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

int init_module(void) 
{ 
printk(KERN_INFO "Hello world\n"); 
return 0; 
} 

void cleanup_module(void) 
{ 
printk(KERN_INFO "Goodbye world\n"); 
} 

/* end of hello.c */ 

和下面的Makefile:

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

當我鍵入make,而在相同的目錄源和製作文件,我得到的消息:'沒有什麼可以爲'全部' 編譯似乎停在這裏,沒有目標文件被創建。

現在只是用於測試,我嘗試了新的簡單的Makefile: TARGET:=你好 $ {TARGET}的.o:$ {TARGET} .C

運行make給了我新的錯誤:hello.c中:1:致命錯誤:linux/module.h:沒有這樣的文件或目錄。

然而,這文件的文件夾中可以找到:

/usr/src/linux-headers-2.6.35-22/include/linux 

以及在

/usr/src/linux-headers-2.6.35-22-generic/include/linux 

因爲是kernel.h當文件

我缺少什麼,什麼想法?

在此先感謝

+1

您至少需要內核源代碼才能獲取所需的頭文件... – 2012-01-28 21:50:12

+0

注意:完整的源代碼不需要;構建環境(包括Makefiles,Kconfigs,scripts /和某些目錄中的.h文件)就足夠了。 – 2012-01-28 23:35:37

+0

嘗試:http://fsmsh.com/1238 – 2012-02-13 06:02:51

回答

1

確保在Makefile與「製作」開始的行由製表符縮進。 這就是'all:'下方的一行,'clean:'下面的一行應該以標籤開頭。