2013-08-28 14 views
14

例:一般的なデバイスモジュールのMakefileCFLAGSをLinuxカーネルモジュールMakefileに設定することはできますか?

obj-m:=jc.o 

default: 
    $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules 
clean: 
    $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules clean 

私は、ファイルにCFLAGSを設定することができれば、私は考えます。私は

$(MAKE) -O2 -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules 

からデフォルトセクションを変更しかし、とき、それは動作しませんでした。

助けが必要ですか?どうもありがとう。

+1

'$$ PWD'は' $(shell pwd) 'を置き換えることができます。 – eepp

答えて

22

-O2は、あなたが試したことでmake(またはそれを使用している場合は$(MAKE))のオプションになります。明らかに、コンパイラ(おそらくgcc)はmakeではなく、このフラグを必要とします。

Kbuildは、このユニットをコンパイルするときに特定のCフラグを追加するために、CFLAGS_modulename.oという名前のmake変数を理解しています。

CFLAGS_jc.o := -O2 

をし、それが動作するはずです:あなたが指定することができますので、あなたのケースでは、あなたのモジュールオブジェクトは、jc.oになります。 V=1$(MAKE)行に追加すると冗長出力が得られ、jc.cをコンパイルすると-O2が表示されます。

モジュールのコンパイルの詳細はthe official documentationにあります。

12

また、これは、メイクファイルを使用してモジュール用にコンパイルされたソースファイルのすべてに適用されます

ccflags-y := -O2 

を使用することができます。これはeeppが提供するリンクに間接的に記載されています。Section 4.2

関連する問題