- 论坛徽章:
- 0
|
__log_buf是个静态数组,在bss段,大小固定,可以通过config配置;
static char __log_buf[__LOG_BUF_LEN];
static char *log_buf = __log_buf;
log_buf默认指向__log_buf数组,原理上来说是可以动态调整的;
可以通过bl传递的命令行参数调整log_bug_len大小:
/* save requested log_buf_len since it's too early to process it */
static int __init log_buf_len_setup(char *str)
{
unsigned size = memparse(str, &str);
log_buf_len_update(size);
return 0;
}
early_param("log_buf_len", log_buf_len_setup);
在启动阶段重新为log_buf分配空间:
void __init setup_log_buf(int early)
{
... ...
new_log_buf = memblock_virt_alloc_nopanic(new_log_buf_len, LOG_ALIGN);
... ...
log_buf_len = new_log_buf_len;
log_buf = new_log_buf;
free = __LOG_BUF_LEN - log_next_idx;
memcpy(log_buf, __log_buf, __LOG_BUF_LEN);
... ...
}
关于log_buf_len,可以通过增加sys属性或者模块参数的方式访问;
也可以在系统运行一段时间,形成环路后,使用"dmesg > dmesg.log",查看文件大小;
static u32 log_buf_len = __LOG_BUF_LEN; |
|