免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6029 | 回复: 6

printk环形缓冲区限制问题 [复制链接]

论坛徽章:
0
发表于 2011-11-25 09:39 |显示全部楼层
最近想改下printk环形缓冲区的大小,通过修改CONFIG_LOG_BUF_SHIFT编译选项会有最大值的限制,比如我想改到25,但是重新编译内核后又恢复到默认的17,似乎在编译时做了限制。如果我直接在内核代码printk.c中手动定义
#define __LOG_BUF_LEN        (1 << 25)
就是可行的,环形缓冲区可以达到16M。

那么,编译选项CONFIG_LOG_BUF_SHIFT的最大值22的限制(X86-64下)是在哪里做的呢?

论坛徽章:
0
发表于 2011-11-29 09:12 |显示全部楼层
顶起来,有人知道吗?

论坛徽章:
0
发表于 2011-11-29 18:39 |显示全部楼层
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

论坛徽章:
0
发表于 2011-11-29 20:11 |显示全部楼层
回复 3# lli_njupt

感觉Kconfig文件只是在make menuconfig的时候提供选择信息和配置规则,用来生成.config文件,这里的range 12 21只是一个提示信息吧,不知道理解的对不对。

我帖子里提到的不管在.config文件中将LOG_BUF_SHIFT配置为多少,重新编译后该配置项的实际效果都是12到21之间的这个效果到底是在哪里做的,怎么实现的?

论坛徽章:
0
发表于 2011-11-29 22:13 |显示全部楼层
是由script/basic/conf.c 生成文件来解析内核配置的。中间会做一些参数的合法性检查。

论坛徽章:
0
发表于 2011-11-30 14:40 |显示全部楼层
scripts/kconfig 下的代码对参数的范围检查,而检查的依据就是Kconfig中的range,楼主可以尝试改一下这个range参数,然后重新编译,我在2.6.28内核测试是如此!

论坛徽章:
0
发表于 2011-11-30 15:57 |显示全部楼层
看了下scripts/kconfig下的代码,确实有对系统配置做检查,对out of range的值做修正,虽然没有找到做修正所依据的文件就是init/Kconfig的证据,但尝试修改了下init/Kconfig文件中的range值,确实可以实现预期的效果。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP