db4*_*b42 6 makefile printk printf-debugging
我想了解一个Linux内核模块,并希望看到的输出pr_debug和printk.我正在使用GNU Make.
我知道要获得pr_debug消息,我们必须使用DDEBUG.
那么,我该如何启用printk语句?
让我们说文件名是kvm.c.这两者有什么区别:
CFLAGS_kvm.o := -DDEBUG
CFLAGS_kvm.o += -DDEBUG
Run Code Online (Sandbox Code Playgroud)
这句话的作用是什么:
CFLAGS_kvm.o := -I.
Run Code Online (Sandbox Code Playgroud)
[编辑]:
看起来我使用方括号引起了一些混乱.实际上通过[filename],我的意思是一些文件,比如kvm.c.
我不知道如何激活printk()- 您用 Google 搜索了什么?除此之外,我发现这似乎意味着printk()几乎总是可用(但您必须使用适当的级别标记消息,并且可能可以控制控制台上显示的级别)。
宏名称中的方括号是非正统的 - 因此可能是特定于您的系统的扩展。
从字里行间看,您很可能正在谈论 Linux 内核,因此也谈论 GNU Make,但如果您陈述这些内容,就会对每个人都有帮助。
该:=符号是对变量的立即赋值。RHS 在读取和处理行时进行评估,而不是像通常情况那样在使用宏时进行评估。这意味着如果 RHS 上引用了宏,则随后对这些宏的更改不会影响该宏的值。考虑:
CFLAGS = ${OFLAGS} ${IFLAGS} ${DFLAGS} ${WFLAGS}
CFLAGS := ${OFLAGS} ${IFLAGS} ${DFLAGS} ${WFLAGS}
Run Code Online (Sandbox Code Playgroud)
第一个变体指出 CFLAGS 将由 4 个命名宏组成(实际上,它只是复制该行以供以后扩展),但在(大概)在 C 编译命令中使用它之前不会扩展这些值。
第二种变体在读取该行时立即查找 4 个宏的值并将其展开。4 个引用宏的后续更改不会反映在 CFLAGS 中。
该+=符号将 RHS 添加到宏中,而不是简单地替换它。