主要的调试有3种:打印调试(printk),查询调试(/proc),监视调试(strace)。
即使采取了以上三种调试技术有时候驱动程序依然会出错,这样驱动程序在执行时候就会产生系统故障,这些错误通常会产生一个oops消息。
最后就是使用相关的调试器(gdb和kdb)跟踪代码,查看变量和计算机寄存器的值。
综上所述总共有5种调试技术:打印,查询,监视,系统故障,调试器。
这里我测试了打印调试和调试器gdb调试。
1.打印调试
printk是内核级别的打印命令,通过不同日志级别(loglevel),或者说“消息优先级”,可以让printk根据这些级别所表示的严重程度对消息进行分类。
在linux2.6内核头文件<linux/kernel.h>中定义了8种可用的日志级别字符串,消息优先级由高到低依次为:
#define KERN_EMERG "<0>" 紧急事件,一般在系统崩溃之前
#define KERN_ALERT "<1>" 立即采取行动
#define KERN_CRIT "<2>" 临界状态,严重的硬件或软件操作失败
#define KERN_ERR "<3>" 报告错误状态,一般用于硬件错误
#define KERN_WARNING