2

helloworld モジュールを作成しようとしています。以下のようにmakefileを書く必要があります。

ifneq ($(KERNELRELEASE), )
obj-m := hello.o
else
KDIR := /path/to/kernel/sources
all:
    make -C  $(KDIR) M= 'pwd' modules
endif

このメイクファイルが 2 回実行されることがわかりました。1回だけ呼び出して2回実行するにはどうすればよいですか?

obj-mここで使用される値はいつですか?

4

2 に答える 2

4

このメイクファイルには 1 つのルールがあります。

all:
    make -C $(KDIR) M= 'pwd' modules

英語では、「ディレクトリに移動して$(KDIR)Make を実行します (ターゲットはmodules)」。

したがって、この makefile を使用して Make を呼び出すと別の makefile を使用して Make が呼び出されます。

もっと単純なものから始めるべきです。あなたが何をしようとしているのか教えていただければ、私たちはお手伝いできます。

于 2013-01-16T05:18:45.970 に答える
0

このファイルには 1 つのルールがあるように見えますが、空の場合のみですKERNELRELEASE。 が空でない場合にのみobj-m定義されます。その場合、は実際には何もしません...実際に構築していた場合に備えて、これを (定義した後) 独自のものの 1 つに含めて、カーネルによって使用されると思います。動的にロードされるモジュールとしてではなく、カーネルに組み込まれます。KERNELRELEASEMakefileobj-mMakefileKERNELRELEASE

于 2013-01-16T12:24:10.460 に答える