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
运行结果:
当不想要打印信息的时候把#define信息注释掉即可,以后再进行调试再将#define信息取消注释。