kernel打印杂谈

内核打印基本规则#

  • dev_info()
    启动过程、或者模块加载过程等“通知类的”信息等,一般只会通知一次,例如probe函数
  • dev_dbg()
    一般使用在普通错误,如-EINVAL、-ENOMEM等errno发生处,用于调试
  • dev_err()
    一般使用在严重错误,尤其是用户无法得到errno的地方,或者程序员不容易猜测系统哪里出了问题的地方

打印dev_dbg#

A dynamic_debug##

a. 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

b. 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信息都从编译阶段自动移除

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容