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)

posted @ 2021-02-19 17:15  schips  阅读(2377)  评论(1编辑  收藏  举报