2010-10-31 316 views
5

我嘗試編譯簡單的Linux內核模塊:Linux內核模塊編譯

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

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

void cleanup_module(void) 
{ 
     printk(KERN_ALERT "Goodbye world 1.\n"); 
} 

我的生成文件:

obj-m = testmodule.o 
KVERSION = $(shell uname -r) 
all: 
     make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules 
clean: 
     make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean 

現在,我在我的.c文件沒有錯誤。

但是,當我嘗試在終端:make:沒有什麼可以做'全部'。

怎麼了?

謝謝。

回答

5

在你的Makefile中的默認命令是

make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules 

指示作出cd到/ lib/modules目錄/ $(KVERSION)/構建和運行

make module m=YOUR_CURRENT_DIR 

反過來,這的Makefile沒有找到任何事情要做。據推測,該makefile期望在當前目錄中找到一些特定的結構。

你需要更仔細地閱讀指導你設置這個makefile的任何指令。

+1

我有同樣的問題。將命令放在命令行中時不用使用'make'就能很好地工作。原來我的編輯器在複製'Makefile'時放置了空格而不是製表符。 – 2013-04-06 13:11:03

0

你真的沒有提供足夠的信息來確定正確的答案,但我會給你一些東西來看看。

你是如何編譯它的?你的構建中是否有正確的包含路徑?構建路徑通過gcc的-I選項指定。確保你指向你的內核源代碼樹。

您是否構建內核?當你做一個make時,你可以設置某些東西來建立。做一個make不會構建所有東西(如模塊),但會爲您設置最初的東西。

0

確保您的發行版安裝了提供這些包含文件的內核頭文件/開發包。

如果已安裝它們,請搜索計算機上這些包含文件的位置,並將這些目錄添加到您的編譯器包含搜索路徑(-I選項)。

0

這是因爲你的Makefile中含有給make命令

make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules 

所以通常你的文件應該像下面前沒有標籤:

obj-m = test.o                 

KVERSION = $(shell uname -r)              

all:                    
     make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules     
clean:                   
     make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean