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)调用
- 可以通过在宏名字中删除或增加一个字母来启用或禁用每一条打印语句
- 在编译前修改CFLAGS变量,则可以一次禁用所有
- 定义一个宏,在需要时,这个宏展开为一个printk(printf)调用
- printk