web-dev-qa-db-ja.com

CFLAGSをLinuxカーネルモジュールのMakefileに設定することは可能ですか?

例:共通デバイスモジュールの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をファイルに設定できるかどうかを検討します。 defaultセクションを

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

しかし、それはうまくいきませんでした。

何か助けは?どうもありがとう。

22
大宝剑

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

Kbuildは_CFLAGS_modulename.o_という名前のmake変数を理解して、このユニットをコンパイルするときに特定のCフラグを追加します。あなたの場合、モジュールオブジェクトは_jc.o_になるので、次のように指定できます。

_CFLAGS_jc.o := -O2
_

そしてそれはうまくいくはずです。 _V=1_を$(MAKE)行に追加して詳細な出力を取得すると、_-O2_がコンパイルされているときに_jc.c_が表示されます。

モジュールのコンパイルの詳細については、 公式ドキュメント を参照してください。

27
eepp

あなたも使うことができます

ccflags-y := -O2

これは、Makefileを使用してモジュール用にコンパイルされたすべてのソースファイルに適用されます。これは、eeppによって セクション4.2 で提供されているリンクに間接的に記載されています。

16