1.本章知识点
- 内核中和调试相关的选项
- CONFIG_DEBUG_KERNEL
- CONFIG_DEBUG_SLAB
- CONFIG_DEBUG_PAGEALLOC
- CONFIG_DEBUG_SPINLOCK
- CONFIG_DEBUG_SPINLOCK_SLEEP
- CONFIG_INIT_DEBUG
- CONFIG_DEBUG_INFO
- CONFIG_MAGIC_SYSRQ
- CONFIG_DEBUG_STACKOVERFLOW
- CONFIG_DEBUG_STACK_USAGE
- CONFIG_KALLSYMS
- CONFIG_IKCONFIG
- CONFIG_IKCONFIG_PROC
- CONFIG_ACPI_DEBUG
- CONFIG_DEBUG_DRIVER
- CONFIG_SCSI_CONSTANTS
- CONFIG_INPUT_EVBUG
- CONFIG_PROFILING
- 通过打印调试
- printk
- 通过附加不同日志级别,可让printk对消息进行分类
- <linux/kernel.h>
- KERN_EMERG
- KERN_ALERT
- KERN_CRIT
- KERN_ERR
- KERN_WARNING
- KERN_NOTICE
- KERN_INFO
- KERN_DEBUG
- 默认级别是DEFAULT_MESSAGE_LOGLEVEL
- 2.6.10内核中,默认级别是KERN_WARNING
- /proc/sys/kernel/printk
- 4个整数值
- 当前的日志级别、未明确指定日志级别时的默认消息级别、最小允许的日志级别以及引导时的默认日志级别
- 重定向控制台消息
- 消息如何被记录
- printk函数将消息写到一个长度为__LOG_BUF_LEN字节的循环缓冲区中
- 唤醒正在等待消息的进程,或者正在读取/proc/kmsg的进程
- 可以在任何地方调用printk,甚至在中断处理函数里也可以调用,而且对数据量的大小没有限制
- klogd
- syslogd
- /etc/syslog.conf
- 开启及关闭消息
- 定义一个宏,在需要时,这个宏展开为一个printk(printf)调用
- 定义一个宏,在需要时,这个宏展开为一个printk(printf)调用
- printk

本文介绍了Linux内核调试的各种技术,包括内核配置选项如CONFIG_DEBUG_SLAB,使用printk进行日志打印,通过/proc文件系统进行查询,利用syslogd记录信息,以及strace、gdb等工具进行系统跟踪和调试。还提到了内核Oops消息、SysRq魔法键以及kgdb等高级调试方法。
最低0.47元/天 解锁文章
1335

被折叠的 条评论
为什么被折叠?



