您的位置:首页 > 其它

内核打印杂谈

2016-07-22 23:42 141 查看

内核打印基本规则

dev_info(): 启动过程、或者模块加载过程等“通知类的”信息等,一般只会通知一次,例如probe函数;

dev_dbg(): 一般使用在普通错误,如-EINVAL、-ENOMEM等errno发生处,用于调试;

dev_err(): 一般使用在严重错误,尤其是用户无法得到errno的地方,或者程序员不容易猜测系统哪里出了问题的地方;

打印dev_dbg

A) dynamic_debug

CONFIG_DYNAMIC_DEBUG=y & CONFIG_DEBUG_FS=y

mkdir debugfs

mount -t debugfs none */debugfs

cat /mnt/dbg/dynamic_debug/control
[ping]ping_rcv =_ "no socket, dropping\012" 不会打印
[ping]ping_rcv =p "rcv on socket %p\012" 则会打印

函数dynamic debug
echo -n 'func xxx +p' > */debugfs/dynamic_debug/control
echo -n 'func xxx -p' > */debugfs/dynamic_debug/control

文件dynamic debug
echo -n 'file alicert.c +p' > */debugfs/dynamic_debug/control
echo -n 'file alicert.c -p' > */debugfs/dynamic_debug/control

模块dynamic debug
echo -n 'module alicert +p' > */debugfs/dynamic_debug/control
echo -n 'module alicert -p' > */debugfs/dynamic_debug/control

echo 8 > /proc/sys/kernel/printk 或 dmesg 查看相应dev_dbg()的输出信息


B) Makefile 添加编译选项

在drivers/*/Makefile中定义了编译选项

ccflags-y := -DDEBUG

开发版本,打开CONFIG_DYNAMIC_DEBUG和CONFIG_DEBUG_FS,配合dbgfs动态观测和调试内核代码;

正式版本,关闭CONFIG_DYNAMIC_DEBUG和CONFIG_DEBUG_FS,所有dbgfs以及dev_dbg信息都从编译阶段自动移除;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  调试 内核