Linux修改dmesg命令 ring buffer大小

https://blog.csdn.net/Wang20122013/article/details/116064435

1 前言

在调试Linux内核的时候经常会用到dmesg命令,常用的用法有:

1. 显示ring buffer内容
dmseg
2. 把ring buffer内容输出到文件
dmesg >log.txt
3. 清除当前ring buffer的内容
dmesg -C
方法3经常用作要调试驱动的时候用,先把以前的ring buffer的内容清空,然后用insmod xxx.ko加载自己的驱动,然后后面打印的就是自己
的驱动的内容。

2 调整ring buffer大小

当调试信息过多的话ring buffer会满导致无法显示以前的信息,如何把ring buffer变大
原理
Linux内核中打印内核消息时用到了一个环形缓冲区。
这个缓冲区的大小由 CONFIG_LOG_BUF_SHIFT 控制,规律为:
size=2CONFIG_LOG_BUF_SHIFT
因此,需要修改 Linux 内核源码中的一个控制 log buffer size 的宏:CONFIG_LOG_BUF_SHIFT。

方法1 编译选项中更改

make menuconfig
General setup
(18)Kernel log buffer size (16 => 64KB,17 => 128KB)
init/Kconfig
config LOG_BUF_SHIFT
int "Kernel log buffer size (16 => 64KB, 17 => 128KB)"
range 12 21
default 17
help
Select kernel log buffer size as a power of 2.
Examples:
17 => 128 KB
16 => 64 KB
15 => 32 KB
14 => 16 KB
13 => 8 KB
12 => 4 KB
可以看到 shift 最大值限制到了 21,也就是:2 M

方法2:源码中修改

路径:kernel/printk.c
#define __LOG_BUF_LEN (1 << CONFIG_LOG_BUF_SHIFT)
static char __log_buf[__LOG_BUF_LEN];
可以看到,是已经在编译时定死的一块静态空间,不能动态调整了。
只需要修改__LOG_BUF_LEN即可。
最大不超过31或者63(CPU位数-1)
posted @   scott_h  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示