内核打印杂谈
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=ymkdir 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信息都从编译阶段自动移除;
相关文章推荐
- Linux 自检和 SystemTap
- LKRG:用于运行时完整性检查的可加载内核模块
- Python 七步捉虫法
- 一张图看尽 Linux 内核运行原理
- Greg Kroah-Hartman 解释内核社区是如何使 Linux 安全的
- 路由器的配置与调试
- 对于技术人员的出现了运行时间错误,是否要进行调试的解决方法
- 在ASP.NET 2.0中操作数据之七十二:调试存储过程
- 讲解WordPress开发中一些常用的debug技巧
- 必备的JS调试技巧汇总
- JavaScript程序设计之JS调试
- 可以用来调试JavaScript错误的解决方案
- 如何调试异步加载页面里包含的js文件
- Linux内核链表实现过程
- jQuery下的Ajax调试步骤
- 调试一段PHP程序时遇到的三个问题
- JavaScript高级程序设计 错误处理与调试学习笔记
- Javascript调试脚本的经验之谈第1/2页
- 在IE,Firefox,Safari,Chrome,Opera浏览器上调试javascript