2017-12-21 17 views
0

私は、デバイスドライバ用のツリー外のカーネルモジュールを構築しています。全体的に、物事がうまくいっているが、私はkbuildとビルドシステムの使用に関するいくつかの質問だった:kbuild external module questions

  1. を私はこの素晴らしい記事を見つけました:Is it possible to set CFLAGS to a linux kernel module Makefile?、コンパイラフラグを変更する方法を示しています。その結果、私はコンパイラのフラグをccflags-y := -O2 -Wall -Wextra -I $(DRIVER_INC_DIR)として設定しています。ここで、$(DRIVER_INC_DIR)は私のドライバのさまざまなヘッダファイルです。私のドライバはいくつかの.oファイルで構成されていて、ひとつの.koファイルにマージされることに注意してください。私は自分のコードでコンパイラが生成した警告を表示したいが、Linuxではコードを表示したくない(例えば、linux/module.h)。どうすればそれを達成できますか?私はユーザー空間アプリケーションでは-isystemオプションがあることを知っていますが、ここでどのように適用されるのだろうと思います。
  2. modules_installと.koファイルをコンパイルした後にコピーを行うだけの違いはありますか?なぜなら私は "make uninstall"ターゲットをサポートする必要があるからです(そしてmodules_uninstallはありません。cleanは削除されていないと思われます)。それがインストールされた場所からko)。

ご協力いただきありがとうございます。

答えて

0

私は#1に答えることができました。基本的に、kbuildの内部では、LINUXINCLUDE変数は-Iを使用して、すべてのソースコードをLinuxヘッダーから取得します。その結果、私は私のMakefileにこの行を追加:

LINUXINCLUDE := $(subst -I, -isystem, $(LINUXINCLUDE)) 

これは-isystemを持つすべての-Iのフラグを置き換えるため、警告は無視されます。