内核日志系统设计
简单日志系统设计
在高通或者MTK的源码中,以camera系统为例,多个子模块,我们可以通过向debug系统中通过打开关闭相关模块对应的bit位来开启或关闭模块日志
在内核中实现其实并不复杂,使用module_param来创建一个sys节点来进行日志控制:
如下:
static int debug = 0x3; // init print err & info log module_param(debug, int, 0644); MODULE_PARM_DESC(debug, "timer test debug level 0-4:\n" "\t\t BIT0 err log print\n" "\t\t BIT1 info log print\n" "\t\t BIT2 debug log print\n" "\t\t BIT3 reg info print\n");
再通过debug数值,进行数值与,就可以选择打印什么模块的log了。
如下:
#define cam_debug(fmt, ...) \ do {\ if (debug & BIT(2)) { \ printk("CAM_DEBUG [%s:%s:%d]: " fmt, __FILE__, __func__, __LINE__, ##__VA_ARGS__); \ } \ } while (0) #define cam_err(fmt, ...) \ do {\ if (debug & BIT(0)) { \ printk("CAM_ERR [%s:%s:%d]: " fmt, __FILE__, __func__, __LINE__, ##__VA_ARGS__); \ } \ } while (0) #define cam_info(fmt, ...) \ do {\ if (debug & BIT(1)) { \ printk("CAM_INFO [%s:%s:%d]: " fmt, __FILE__, __func__, __LINE__, ##__VA_ARGS__); \ } \ } while (0)
这样,就可以在下面的节点
/sys/module/[driver name]/parameters/debug
进行模块的打印log控制了