背景
由於在調試的時候沒有串口,而通過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)