使用三个组件的可能解决方法:一个可以生成具有特定日志级别的调试函数的宏,使用所需的日志级别创建此函数,另一个宏调用具有可变数量参数的创建函数。
调用 LOGPRINTK(buf, "WORLD") 可以完成这项工作。
#include "stdarg.h"
// a macro which can generate a loglevelfunction based on the loglevel
// in kzalloc, do not forget the + 1 for the trailing zero
#define GENERATE_LOGLEVEL_FUNCTION(loglevelstring) void loglevelfunc(char *fmt, ...) { \
char *modifiedfmt = NULL; \
va_list input; \
modifiedfmt = kzalloc((strlen(loglevelstring) + strlen(fmt) + 1 )*sizeof(char), GFP_KERNEL) ; \
if (modifiedfmt) { \
strcpy(modifiedfmt, loglevelstring); \
va_start(input, fmt); \
strcat(modifiedfmt, fmt); \
vprintk(modifiedfmt, input) ; \
va_end(input); \
kfree(modifiedfmt); \
modifiedfmt = NULL; \
} \
}
// this line generates the log level function, with loglevel KERN_INFO
GENERATE_LOGLEVEL_FUNCTION(KERN_INFO)
// finally, the function we want
#define LOGPRINTK(...) loglevelfunc(__VA_ARGS__)