3

私の存在の悩みの種である 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.

ソースファイルにちなんで出力オブジェクトに名前を付ける必要はないと確信しているので、明らかに何かが間違っています。複数のソースファイルをまとめることについていくつかの検索を行ったところ、別のオプションとしてこれが見つかりました:

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

誰でもこのことを機能させるのを手伝ってもらえますか?

4

1 に答える 1

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
于 2012-09-05T19:23:42.840 に答える