内核中的bug,引用空指针可能产生oops,可以通过oops打印来判断错误原因。
通过打印来调试
printk(),函数几乎和printf()几乎相同。printk()是内核打印函数,有一些特殊功能。
任何时候都能调用printk();
1中断上下文。
2任何持有锁时候。
3多核处理器。
printk()中断没有初始化之前不能使用。例如 setup_arch()函数中(注明:负责执行硬件体系结构相关的初始化),
此时有个函数叫 early_printk()具备启动过程初期在终端打印能力。但是有些硬件体系结构上没有实现。
PrintK函数区分日志级别
级别有
KERN_EMERG 紧急情况
KERN_ALERT 需要立即被注意的错误
KERN_CRIT 临界情况
KERN_ERR 一个错误
KERN_WARNING 一个警告
KERN_NOTICE 普通的,不过有可能需要注意的情况
KERN_INFO 非正式消息
KERN_DEBUG 调试信息-一半是冗余的