嵌入式Linux热门培训内容之Linux动态打印kernel日志

时间:2018-12-13 17:36:23

下面讲正题,我们在开发的时候,需要把一些日志设置默认关闭,在需要打印时才让他打印,这时候就需要用到动态打印功能,这个功能还是比较酷的。

参考文件:

dynamic-debug-howto.txt

1、内核配置

CONFIG_DEBUG_FS=y

CONFIG_DYNAMIC_DEBUG=y

把这两个宏打开

打开这个宏后就会编译

./lib/dynamic_debug.c  

动态打印的所有功能都是在这个.c文件里面实现的

2、代码修改

--- a/kernel/drivers/gosodrv/touchscreen/ft5x06_ts.c

+++ b/kernel/drivers/gosodrv/touchscreen/ft5x06_ts.c

@@ -402,6 +402,7 @@ static void ft5x0x_ts_pen_irq_work(struct work_struct *work)

        struct ft5x06_ts_data *data = container_of(work, struct ft5x06_ts_data,

                                          pen_event_work);

        //printk("ft5x0x_ts_pen_irq_work\n");

+       pr_debug("%s: dev_dbg test owen.wei ==============\n", __func__);

        ret = ft5x06_handle_touchdata(data);

        if (ret)

        pr_err("%s: handling touchdata failed\n", __func__);

 3、   打开Log打印

adb shell "echo -n "file ft5x06_ts.c +p" > /sys/kernel/debug/dynamic_debug/contr

4、   示例

Examples ========

// enable the message at line 1603 of file svcsock.c

nullarbor:~ # echo -n 'file svcsock.c line 1603 +p' > <debugfs>/dynamic_debug/control

打开某个文件某一行的日志

// enable all the messages in file svcsock.c  打开某个文件的所有日志

nullarbor:~ # echo -n 'file svcsock.c +p' > <debugfs>/dynamic_debug/control

// enable all the messages in the NFS server module 打开某个模块的所有日志

nullarbor:~ # echo -n 'module nfsd +p' > <debugfs>/dynamic_debug/control

// enable all 12 messages in the function svc_process() 打开某个函数的所有日志

nullarbor:~ # echo -n 'func svc_process +p' > <debugfs>/dynamic_debug/control

// disable all 12 messages in the function svc_process() 关闭某个文件的所有日志

nullarbor:~ # echo -n 'func svc_process -p' > <debugfs>/dynamic_debug/control

// enable messages for NFS calls READ, READLINK, READDIR and READDIR+.