2015-11-08 251 views
1

我在構建helloworld Linux內核模塊時遇到了問題。我使用SUN公司的VirtualBox和我從Ubuntu網站下載的Ubuntu ISO映像。任何幫助將不勝感激。貝婁是C代碼和我收到錯誤消息:Linux內核模塊編譯

的模塊文件被稱爲hellowrld.c,它包含下面的代碼:

#include <linux/module.h> // included for all kernel modules 
    #include <linux/kernel.h> // included for KERN_INFO 
    #include <linux/init.h>  // included for __init and __exit macros 

    MODULE_LICENSE("GPL"); 

    static int __init helloworld_init(void) 
    { 
     printk(KERN_INFO "Hello world!\n"); 
     return 0;  
    } 

    static void __exit helloworld_exit(void) 
    { 
     printk(KERN_INFO "Cleaning up module.\n"); 
    } 

    module_init(helloworld_init); 
    module_exit(helloworld_exit); 

make文件被稱爲makefile.c它包含下面的代碼:

obj -m += helloworld.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命令,我得到的錯誤信息是如下:

cc makefile.c -o makefile 
makefile.c:1:4: error: expected '=', ',', ';', 'asm' or '__attribute__' before '-' token 
obj-m helloworld.o 

make: *** No targets specified no makefile found. Stop 
+0

我認爲這個問題是在make文件。 – PeCosta

+0

2秒後有答案。 – PeCosta

+0

makefile應該*不*有'.c'擴展名。在Linux上,根本沒有擴展是很方便的。稱它爲'Makefile'或'makefile'。 – wallyk

回答

3

正確的Makefile看起來像這樣...

obj-m := helloworld.o 

KDIR := /lib/modules/$(shell uname -r)/build 
PWD := $(shell pwd) 

default: 
    $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules 

clean: 
    rm -rf *.o *.ko *.mod.* *.symvers *.order 

+0

非常感謝您的幫助。它正在按預期進行編譯。沒有你的幫助,我今晚不會解決這個問題。 – Honore

+0

@Honore如果此答案解決了您的問題,請點擊答案左側的打勾接受答案 – shami

+0

@shami謝謝您告訴我們。 – Honore