default_console_loglevel
在Linux中有什么意义?我通常将其描述为 的默认值console_loglevel
。然而,这意味着什么我还没有在任何地方看到解释。
此外,在我以及我检查过的大多数其他系统上,四个日志变量的值是
[root@localhost printk]# cat /proc/sys/kernel/printk
4 4 1 7
由于我没有更改任何内容,console_loglevel
(4) 应该等于default_consolle loglevel
(7),但事实并非如此。那么 的用途/意义到底是什么default_console_loglevel
?
答案1
简短的回答:您要么loglevel=4
在内核命令行中进行了设置(使用 进行检查cat /proc/cmdline
),要么有类似执行的 init 脚本echo 4 > /proc/sys/kernel/printk
(或等效项)之类的东西。
在这两种情况下,default_console_loglevel
都会被覆盖。
长答案:
当您读取 时/proc/sys/kernel/printk
,会返回四个数字。这些是在内核中定义的打印k.hint console_printk[4]
作为数组中的元素已初始化在编译时(在打印k.c),但是这个数组可以在运行时修改。
这些值是:
console_loglevel
(或者console_printk[0]
)。default_message_loglevel
(或者console_printk[1]
)。minimum_console_loglevel
(或者console_printk[2]
)。default_console_loglevel
(或者console_printk[3]
)。
console_loglevel
( console_printk[0]
) 是最重要的:它是当前的控制台消息优先级的值。
这意味着,在任何时间点printk
都会在内核代码中调用(这也适用于pr_warn
,pr_info
, ETC。),在运行时比较相应的优先级,如果它严格低于当前的优先级console_loglevel
,则会将其打印到控制台。例如,如果设置为 5(即KERN_警告),只有值为 4 ( KERN_ERR
) 或更低的优先级才会直接打印到控制台。
这是唯一需要修改的值,因此当您使用 eg 写入时,echo 5 > /proc/sys/kernel/printk
您将设置console_loglevel
为 5。
console_loglevel
编译时初始化为,与(or )CONSOLE_LOGLEVEL_DEFAULT
完全相同。因此是启动时的默认值。这是通过内核编译时配置 (Kconfig) 设置的,它定义了.default_console_loglevel
console_printk[3]
default_console_loglevel
console_loglevel
CONFIG_CONSOLE_LOGLEVEL_DEFAULT
为了使这个运行时可配置(因此不需要重新编译内核),有另一种机制来设置这个启动时默认值:如果(其中是数字)作为内核命令行的一部分传递,则初始化为。请注意,它永远不会被修改,因此,在这种情况下,它只是被默默地忽略和覆盖。loglevel=x
x
console_loglevel
x
default_console_loglevel
为了完整起见,其他两个值是:
default_message_loglevel
(或):这是未指定优先级的命令console_printk[1]
的默认值。printk
这是通过 Kconfig (CONFIG_MESSAGE_LOGLEVEL_DEFAULT
) 设置的。编译后不能修改。minimum_console_loglevel
(或console_printk[2]
):这是最小优先级值。它被硬编码为 1 并且无法修改。
注意:这是对一个四年来无人回答的问题的回答,这可能不再对问题作者有用,但这是我的第一个谷歌搜索结果,所以这希望对其他人有用。