2011-02-26 68 views
6

我想了解一个Linux内核模块,并希望看到pr_debugprintk的输出。我正在使用GNU Make。
据我所知,要得到pr_debug消息,我们必须使用DDEBUG为pr_debug和printk设置CFLAGS

那么,我该如何启用printk声明?

可以说文件名是kvm.c。什么是这两者之间的区别:

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

这是什么语句来做到:

 CFLAGS_kvm.o := -I. 

[编辑]:
它看起来像我的方括号的使用已经造成了一些混乱。其实通过[文件名],我的意思是一些文件,说kvm.c.

+0

嗯......这是在makefile?一个shell脚本? – Beta 2011-02-26 16:56:33

+0

它是一个makefile。我纠正了这个问题。 – db42 2011-02-26 19:07:45

回答

1

我不知道如何激活printk() - 你用Google搜索什么?除此之外,我发现this这似乎意味着printk()几乎总是可用的(但您必须标记具有适当级别的消息,并且可能控制在控制台上显示哪些级别)。

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

在这两行之间进行阅读,很可能您正在谈论Linux内核,因此也就是GNU Make,但如果您陈述了这些内容,则可以帮助每个人。

:=表示法是立即赋值给变量。 RHS在读取和处理行时进行评估,而不是像通常情况下那样使用宏。这意味着如果在RHS上引用了宏,那么对这些宏的后续更改不会影响此宏的值。试想一下:

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

第一种变化指出,CFLAGS将从4个名为宏(当然,实际上,它只是复制线准备好为以后的扩展),但不会直到它被用于扩大值形成(据推测)是一个C编译命令。

第二种变体立即查找当读取行并将其展开时的4个宏的值。 CFLAGS中未反映4个引用宏的后续更改。

+=表示法将RHS添加到宏中,而不是简单地将其替换。

+0

谢谢。对不起,没有方括号。我纠正了这个问题。 – db42 2011-02-26 19:07:26

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.