修改Linux内核的printk缓冲区(log缓冲区)大小


我们可以用printk打印kernel的日志信息(即log信息),根据时间戳可以判断内核新打印的log会覆盖掉以前打印的log。原因是内核用环形缓冲区存放打印的log信息。那么 如何增大缓冲区的大小呢?
我们看kernel/printk.c的代码

  1. #define LOG_ALIGN __alignof__(struct printk_log)  
  2. #define __LOG_BUF_LEN (1 << CONFIG_LOG_BUF_SHIFT)  
  3. static char __log_buf[__LOG_BUF_LEN] __aligned(LOG_ALIGN);  
  4. static char *log_buf = __log_buf;  
  5. static u32 log_buf_len = __LOG_BUF_LEN;  

正是__LOG_BUF_LEN这个宏设置了环形缓冲区的大小,那么__LOG_BUF_LEN的大小是多少呢?是由1 << CONFIG_LOG_BUF_SHIFT(即2的CONFIG_LOG_BUF_SHIFT次幂)来决定的,那么CONFIG_LOG_BUF_SHIFT这个配置项又是在哪里定义呢?

在init/Kconfig里定义

  1. config LOG_BUF_SHIFT  
  2.         int "Kernel log buffer size (16 => 64KB, 17 => 128KB)"  
  3.         range 12 21  
  4.         default 17  
  5.         depends on PRINTK  
  6.         help  
  7.           Select the minimal kernel log buffer size as a power of 2.  
  8.           The final size is affected by LOG_CPU_MAX_BUF_SHIFT config  
  9.           parameter, see below. Any higher size also might be forced  
  10.           by "log_buf_len" boot parameter.  
  11.   
  12.           Examples:  
  13.                      17 => 128 KB  
  14.                      16 => 64 KB  
  15.                      15 => 32 KB  
  16.                      14 => 16 KB  
  17.                      13 =>  8 KB  
  18.                      12 =>  4 KB  


可见CONFIG_LOG_BUF_SHIFT是一个内核配置项。它的大小可以配置为12~21,也就是说环形缓冲区的大小可以配置为4 KB - 2MB。内核(3.18内核)默认是17,即缓冲区的大小为2^17(131072)B。

      所以要想增大或者减小环形缓冲区的大小,只需要在内核的配置文件里(对于arm架构为arch/arm/configs/xxx或者arch/arm64/configs/xxx)添加CONFIG_LOG_BUF_SHIFT=XX 即可修改环形缓冲区的大小。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值