内核编程六:kernel log buffer

Linux 内核日志缓冲区(Kernel Log Buffer)用于存储内核日志消息,包括启动过程、驱动程序信息、错误报告和调试信息。内核日志缓冲区的主要特点如下:

1. 工作机制

  • Linux 内核中的 printk() 函数用于向日志缓冲区写入日志信息。
  • 内核日志缓冲区是 环形缓冲区(ring buffer),当缓冲区满时,新日志会覆盖最旧的日志。
  • 用户态程序可以通过 dmesg/proc/kmsg 读取日志。

2. 日志级别

printk() 支持 8 个日志级别(优先级从高到低):

级别数值说明
KERN_EMERG0紧急,系统不可用
KERN_ALERT1必须立即采取措施
KERN_CRIT2严重错误
KERN_ERR3普通错误
KERN_WARNING4警告
KERN_NOTICE5正常但需要注意
KERN_INFO6一般信息
KERN_DEBUG7调试信息

示例:

printk(KERN_INFO "Hello, Kernel Log!\n"); 

3. 日志存储

  • /var/log/dmesg:系统启动时的内核日志(部分发行版可能不同)。
  • /proc/kmsg:内核日志缓冲区的接口,用户态程序 dmesg 通过它获取日志。

4. 如何查看内核日志

  • dmesg:获取内核日志
    dmesg | less 
  • journalctl(systemd 系统)
    journalctl -k 
  • /proc/kmsg(需要 root 权限)
    cat /proc/kmsg 

5. 调整日志缓冲区大小

可以在内核启动参数中使用 log_buf_len 来调整日志缓冲区大小,例如:

log_buf_len=8M 

在 GRUB 配置中添加:

GRUB_CMDLINE_LINUX="log_buf_len=8M" 

然后更新 GRUB:

sudo update-grub 

6. 相关内核源码

  • kernel/printk/printk.c:实现 printk 及日志缓冲区管理
  • kernel/printk/printk_ringbuffer.c:实现环形缓冲区

如果想深入研究,可以查看 kernel/printk/printk.c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值