2012-09-05 97 views
2

我遇到了麻煩,我的存在,Makefile的麻煩。我試圖創建一個名爲「can.ko」的內核模塊(.ko文件)。我正在編譯一打左右的源文件:從多個源文件構建一個內核模塊

TARGET = can 
OBJS = can_core.o can_open.o can_select.o can_sysctl.o can_write.o can_close.o \ 
     can_ioctl.o can_read.o can_util.o can_debug.o can_error.o can_async.o 
KDIR = /lib/modules/3.1.10-1.16-desktop/build 
PWD := $(shell pwd) 

obj-m += $(TARGET).o 

default: 
make -C $(KDIR) M=$(PWD) modules 
$(TARGET).o : $(OBJS) 

編譯器吐出它找不到。 「can.c」。

make[4]: *** No rule to make target `/home/mike/iCOM-SDKv1.11.000/framework/drivers/can/can.c', needed by `/home/mike/iCOM-SDKv1.11.000/framework/drivers/can/can.o'. Stop. 

我很確定我不需要在源文件之後命名輸出對象,所以顯然有些問題。我做了一些在得到超過1個源文件一起圍繞serching,發現這是另一種選擇:

TARGET = can 
can-objs := can_core.c can_open.c can_select.c can_sysctl.c can_write.c \ 
    can_close.c can_ioctl.c can_read.c can_util.c \ 
    can_debug.c can_error.c \ 
    can_async.c 
KDIR = /lib/modules/3.1.10-1.16-desktop/build 
PWD := $(shell pwd) 

obj-m += $(TARGET).o 

default: 
make -C $(KDIR) M=$(PWD) modules 

這次我被告知,它不知道如何處理.c文件做:

LD [M] /home/mike/iCOM-SDKv1.11.000/framework/drivers/can/can.o 
/home/mike/iCOM-SDKv1.11.000/framework/drivers/can/can_core.c: file not recognized: File format not recognized 

任何人都可以幫助我得到這個東西的工作?

+1

的可能重複[如何安排一個Makefile編譯多個.c文件內核模塊?](http://stackoverflow.com/questions/349811/how-to-arrange-a-makefile-編譯一個內核模塊與多個c文件) – BB9z

回答

5

can-objs需要引用.o文件,而不是.c文件。

can-objs := can_core.o can_open.o can_select.o can_sysctl.o can_write.o \ 
    can_close.o can_ioctl.o can_read.o can_util.o \ 
    can_debug.o can_error.o \ 
    can_async.o 
+0

哇,這是愚蠢的。謝謝! – Mike

相關問題