6

我正在尝试了解 Linux 内核模块,并希望查看pr_debugand的输出printk。我正在使用 GNU Make。
我知道要获取pr_debug消息,我们必须使用DDEBUG.

那么,如何启用printk语句?

可以说文件名是kvm.c. 这两者有什么区别:

      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()- 你用谷歌搜索了什么?除其他外,我发现似乎暗示printk()几乎总是可用的(但您必须用适当的级别标记消息,并且可能可以控制控制台上显示的级别)。

宏名称中的方括号是非正统的 - 因此可能是特定于您的系统的扩展。

从字里行间看,您很可能在谈论 Linux 内核和 GNU Make,但如果您说出这样的话,您会对每个人都有帮助。

:=符号是对变量的立即赋值。RHS 在读取和处理行时进行评估,而不是在通常情况下使用宏时。这意味着如果 RHS 上引用了宏,则对这些宏的后续更改不会影响此宏的值。考虑:

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

第一个变体指出 CFLAGS 将由 4 个命名的宏组成(实际上,它只是简单地复制行以供以后扩展),但在(可能)在 C 编译命令中使用之前不会扩展值。

第二个变体在读取行时立即查找 4 个宏的值并将它们展开。4 个引用宏的后续更改不会反映在 CFLAGS 中。

+=符号将 RHS 添加到宏中,而不是简单地替换它。

于 2011-02-26T18:53:57.573 回答