6

pr_debugLinux カーネル モジュールを理解しようとしており、およびの出力を確認したいと考えていますprintk。私はGNU Makeを使用しています。pr_debugメッセージ
を取得するには、 . DDEBUG

printkでは、ステートメントを有効にするにはどうすればよいですか?

ファイル名がkvm.c. これら2つの違いは何ですか:

      CFLAGS_kvm.o := -DDEBUG
      CFLAGS_kvm.o += -DDEBUG

このステートメントは何をしますか:

      CFLAGS_kvm.o := -I.

[編集]:
私の角括弧の使い方が混乱を招いているようです。実際、[ファイル名] とは、kvm.c などのファイルを意味していました。

4

2 に答える 2

4

からhttps://www.kernel.org/doc/local/pr_debug.txt:

pr_debug()

Some files call pr_debug(), which is ordinarily an empty macro that discards
its arguments at compile time.  To enable debugging output, build the
appropriate file with -DDEBUG by adding

  CFLAGS_[filename].o := -DDEBUG

to the makefile.

For example, to see all attempts to spawn a usermode helper (such as
/sbin/hotplug), add to lib/Makefile the line:

    CFLAGS_kobject_uevent.o := -DDEBUG

Then boot the new kernel, do something that spawns a usermode helper, and
use the "dmesg" command to view the pr_debug() output.
于 2014-03-11T17:08:15.653 に答える
1

有効にする方法がわかりませんprintk()- Google で何を検索しましたか? とりわけ、これはほぼ常に利用可能であることを暗示しているように思われprintk()ます (ただし、適切なレベルでメッセージをマークする必要があり、コンソールに表示されるレベルを制御できる可能性があります)。

マクロ名の角括弧は一般的ではないため、おそらくシステム固有の拡張子です。

行間を読むと、Linux カーネル、つまり GNU Make について話している可能性がありますが、そのようなことを述べれば、すべての人を助けることができます。

:=表記は、変数への即時代入です。RHS は、通常のようにマクロが使用されるときではなく、行が読み取られて処理されるときに評価されます。これは、RHS で参照されているマクロがある場合、それらのマクロへのその後の変更は、このマクロの値に影響しないことを意味します。検討:

CFLAGS  = ${OFLAGS} ${IFLAGS} ${DFLAGS} ${WFLAGS}
CFLAGS := ${OFLAGS} ${IFLAGS} ${DFLAGS} ${WFLAGS}

最初のバリエーションは、CFLAGS が 4 つの名前付きマクロから形成されることを示しています (実際には、後で展開できるように行をコピーするだけです) が、(おそらく) C コンパイル コマンドで使用されるまで値を展開しません。

2 番目のバリエーションは、行が読み取られた時点で 4 つのマクロの値をすぐに探して展開します。参照される 4 つのマクロのその後の変更は、CFLAGS に反映されません。

この+=表記法は、単に RHS を置き換えるのではなく、RHS をマクロに追加します。

于 2011-02-26T18:53:57.573 に答える