Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile 为pr_调试和printk设置CFLAGS_Makefile_Printf Debugging_Printk - Fatal编程技术网

Makefile 为pr_调试和printk设置CFLAGS

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. [编辑]: 看来我使用方括号引起了一些混乱。实际上,我所说的[文件名],是

我试图理解Linux内核模块,希望看到
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。我已经更正了这个问题。谢谢。对不起,没有方括号。我已经纠正了这个问题。