点击打开链接

我们可以用printk打印kernel的日志信息(即log信息),根据时间戳可以判断内核新打印的log会覆盖掉以前打印的log。原因是内核用环形缓冲区存放打印的log信息。那么如何增大缓冲区的大小呢?
我们看kernel/printk.c的代码
[cpp] view plaincopy
  1. <span style="font-family: Arial, Helvetica, sans-serif;">/* record buffer */</span>
[cpp] view plaincopy
  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里定义

[cpp] view plaincopy
  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. Examples:
  12. 17 => 128 KB
  13. 16 => 64 KB
  14. 15 => 32 KB
  15. 14 => 16 KB
  16. 13 =>  8 KB
  17. 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 即可修改环形缓冲区的大小。

修改Linux内核的printk缓冲区(log缓冲区)大小相关推荐

  1. Linux内核之 printk 打印

    Linux内核之 printk 打印 前言 一.printk 介绍 1. printk 消息级别 2.内核 printk 文件 二.调整打印级别 1.在 menuconfig 中修改 2.在系统中修改 ...

  2. 修改Linux内核启动图片

    原文: http://www.linuxde.net/2013/06/13936.html 保存一下,去试试. 本文讲的是修改Linux内核启动的图片,而不是uboot,这两者是不一样的哦. uboo ...

  3. 修改Linux内核的启动Logo和禁用启动光标

    Linux内核下使用的图片文件类型是pnm和PPm格式的,所以在开始介绍修改linux内核启动LOGO之前, 1,先需要介绍一下怎么样设计自己开始logo的ppm图片,首先选择一张png格式的图片 使 ...

  4. Linux内核启动去掉企鹅,修改linux内核kernel开机logo(小企鹅)

    修改linux内核kernel的开机图片(原为小企鹅图片). 转载请注明出处:http://blog.csdn.net/wang_zheng_kai 导航制导与控制实验室 2014年12月10日 本文 ...

  5. linux内核并发教程,修改Linux内核参数提高Nginx服务器并发性能

    当linux下Nginx达到并发数很高,TCP TIME_WAIT套接字数量经常达到两.三万,这样服务器很容易被拖死.事实上,我们可以简单的通过修改Linux内核参数,可以减少Nginx服务器 的TI ...

  6. 修改linux内核达到隐藏进程目的(2.6.28)

    修改linux内核达到隐藏进程目的(2.6.28) 要求: 高级操作系统与分布式系统作业 ps和top命令列出了unix中当前所有进程的相关信息,作业要求在linux中增加两个系统调用,功能如下: h ...

  7. 修改Linux内核参数提高服务器并发能力

    1.参数设置 查看相关的参数 sysctl -a|grep tcp_keepalive net.ipv4.tcp_keepalive_intvl = 30 net.ipv4.tcp_keepalive ...

  8. 修改linux内核启动动画,Android 开机界面及Linux内核启动界面的修改(tiny6410)

    第一开机界面替换,即内核bootloader启动小企鹅界面更换 1.首先找一个自定义120*120的png图像,这里名称linux.png,但是后面的ppm名称必须是图中所示 在linux下执行下面代 ...

  9. ARMv8架构下修改Linux内核并打开kvm硬件虚拟化支持(平台Firefly-rk3568)

    前言 在做的一个项目需要使用ARMv8的硬件虚拟化支持,而购买的Firefly-3568默认的操作系统内核没有打开kvm虚拟化支持,所以尝试重新编译了一下内核开启虚拟化支持,并将遇到的问题和一些解决方 ...

最新文章

  1. Pycharm问题归纳
  2. 原来程序员在某个圈子还是蛮吃香的嘛~
  3. 强烈推荐Spring Web Flow权威指南
  4. memcached完全剖析–1. memcached的基础
  5. bootstrap mysql分页_bootstrap分页
  6. 基于Wemos D1的感应开盖垃圾桶
  7. openssh-在win7上的搭建
  8. JAVA minaio模型_分布式系统之Java IO模型
  9. fastapi学习(二):路径参数获取与GET、POST参数获取
  10. 开会坐在后面,意思是不感兴趣
  11. LINUX备份,使用再生龙Clonezilla成功,remastersys、systemback都失败
  12. FPN特征金字塔网络
  13. STM32实现Airplay音乐播放器
  14. 内外盘期货分仓系统,仿真模拟考核系统
  15. VBA字典数组转置维度变化
  16. 颜文字风波+选颜文字游戏
  17. 常见电线电缆电阻的检测方法盘点
  18. 网站流量PV是什么意思? UV是什么意思?
  19. 12306 抢票软件已被限制
  20. python毕业设计题目推荐汽车销售系统

热门文章

  1. html如何创建学生信息表,创建学生对象并且能访问网页
  2. navicat 批量修改列数据
  3. 028_SpringBoot整合Redis
  4. python 结构体数组 定义_一篇文章弄懂Python中所有数组数据类型
  5. 性能分析工具 Android TraceView
  6. mysql 1418 错误原因及解决
  7. oracle 按日输出 取整数,Oracle按日周月分組統計,及next_day()函數詳解
  8. 保存数组类型数据_JS基本数据类型和引用数据类型的区别及深浅拷贝
  9. cmake交叉编译android,CMake Android 交叉编译
  10. 大数据:Hive和Hbase的区别于优势