内核日志系统设计

简单日志系统设计
在高通或者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控制了
 
posted @ 2024-03-05 22:17  lethe1203  阅读(14)  评论(0编辑  收藏  举报