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