Makefile 为pr_调试和printk设置CFLAGS
我试图理解Linux内核模块,希望看到Makefile 为pr_调试和printk设置CFLAGS,makefile,printf-debugging,printk,Makefile,Printf Debugging,Printk,我试图理解Linux内核模块,希望看到pr_debug和printk的输出。我正在使用GNU Make。 我知道要获取消息,我们必须使用DDEBUG 那么,如何启用printk语句呢 假设文件名为kvm.c。这两者的区别是什么: CFLAGS_kvm.o := -DDEBUG CFLAGS_kvm.o += -DDEBUG 这句话是怎么说的: CFLAGS_kvm.o := -I. [编辑]: 看来我使用方括号引起了一些混乱。实际上,我所说的[文件名],是
pr_debug
和printk
的输出。我正在使用GNU Make。我知道要获取消息,我们必须使用
DDEBUG
那么,如何启用printk
语句呢
假设文件名为kvm.c
。这两者的区别是什么:
CFLAGS_kvm.o := -DDEBUG
CFLAGS_kvm.o += -DDEBUG
这句话是怎么说的:
CFLAGS_kvm.o := -I.
[编辑]:看来我使用方括号引起了一些混乱。实际上,我所说的[文件名],是指一些文件,比如kvm.c.我不知道如何激活
printk()
-你用谷歌搜索了什么?除此之外,我发现这似乎意味着printk()
几乎总是可用的(但您必须用适当的级别标记消息,并且可能有一个控制控制台上显示的级别的控件)
宏名称中的方括号是非正统的,因此可能是特定于系统的扩展
从字里行间看,你可能在谈论Linux内核,因此GNU制造,但是如果你说了这些话,你会帮助所有人
:=
符号是对变量的直接赋值。RHS是在读取和处理该行时计算的,而不是在通常情况下使用宏时计算的。这意味着,如果RHS上引用了宏,则对这些宏的后续更改不会影响此宏的值。考虑:
CFLAGS = ${OFLAGS} ${IFLAGS} ${DFLAGS} ${WFLAGS}
CFLAGS := ${OFLAGS} ${IFLAGS} ${DFLAGS} ${WFLAGS}
第一个变体注意到CFLAGS将由4个命名的宏组成(实际上,它只是复制行以备以后扩展),但在(大概)C编译命令中使用之前不会扩展值
第二种变体在读取行时立即查找4个宏的值并将其展开。CFLAGS中未反映4个引用宏中的后续更改
+=
符号将RHS添加到宏中,而不是简单地替换它。来自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.
嗯。。。这在makefile中吗?shell脚本?它是一个makefile。我已经更正了这个问题。谢谢。对不起,没有方括号。我已经纠正了这个问题。