Linux修改dmesg 显示大小


背景

由于在调试的时候没有串口,而通过dmesg打印的内容发现其中有截断的现象。

因此为了方便调试。将有关的缓冲区加大。

原理

Linux内核中打印内核消息时用到了一个环形缓冲区。

这个缓冲区的大小由 CONFIG_LOG_BUF_SHIFT 控制,规律为:

\[size = 2^{CONFIG\_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)


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM