欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux内核printk宏开关

程序员文章站 2022-05-29 20:49:59
...

在内核开发时经常使用printk打印调试信息,但是printk又对性能有一定的影响,比如写了一个驱动调试完毕要发布或者做内核实验调试完毕正式测试时将这些printk删除又很麻烦,之后再想调试又要重新添加。

在内核中可以使用printk宏开关来控制这些信息的显示:

#ifdef DEBUG_A
#define DEBUG(fmt, args...) printk( KERN_DEBUG "DEBUG_A: " fmt, ## args)
#endif

使用案例

debug.c:

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>

#define DEBUG_A
#ifdef DEBUG_A
#define DEBUG(fmt, args...) printk( KERN_DEBUG "DEBUG_A: " fmt, ## args)
#endif

static int __init hello_init(void)
{
    DEBUG("hello this is debug! \n");
    return 0;
}

static void __exit hello_exit(void)
{
    DEBUG("exit! \n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");

Makefile:

ifneq ($(KERNELRELEASE),)
obj-m:=debug.o
else

CURRENT_PATH:=$(shell pwd)
LINUX_KERNEL_PATH:=/lib/modules/$(shell uname -r)/build
 
default:
	make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules
clean:
	make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean
endif

运行结果:

Linux内核printk宏开关

当不想要打印信息的时候把#define信息注释掉即可,以后再进行调试再将#define信息取消注释。

Linux内核printk宏开关

相关标签: printk宏开关