2012-09-05 3 views
2

내 존재의 단점 인 Makefile에 문제가 있습니다. "can.ko"라는 커널 모듈 (.ko 파일)을 만들려고합니다. 나는 12 개 정도의 소스 파일을 컴파일 중이다.여러 소스 파일에서 커널 모듈 빌드

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

가능한 중복 [여러 .c 인 파일과 커널 모듈을 컴파일하기위한 Makefile을 준비하는 방법?] (http://stackoverflow.com/questions/349811/how-to-arrange-a-makefile- 다중 c 파일을 사용하는 커널 모듈 컴파일) – BB9z

답변

5

can-objs은 .c 파일이 아니라 .o 파일을 참조해야합니다.

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