Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 控制台日志级别和默认日志级别之间的差异_Linux_Module_Linux Kernel_Kernel_Kernel Module - Fatal编程技术网

Linux 控制台日志级别和默认日志级别之间的差异

Linux 控制台日志级别和默认日志级别之间的差异,linux,module,linux-kernel,kernel,kernel-module,Linux,Module,Linux Kernel,Kernel,Kernel Module,在模块编程中,我读到 如果日志级别为 less than console log level will get displayed and higher than will be mentioned in log files , 如果我没有在printk语句中指定任何日志级别,那么将采用默认日志级别 我刚刚看到了默认和控制台日志级别 借 cat/proc/sys/kernel/printk 结果是 4 4 1 7 在这里,默认和控制台都是相同的 我不明白为什么会创建默认日志级别。我

在模块编程中,我读到

如果日志级别为

  less than console log level will get displayed and 
  higher than will be mentioned in log files , 
如果我没有在printk语句中指定任何日志级别,那么将采用默认日志级别

我刚刚看到了默认和控制台日志级别

cat/proc/sys/kernel/printk

结果是

4 4 1 7

在这里,默认和控制台都是相同的

我不明白为什么会创建默认日志级别。我们将在任何地方使用默认日志级别

控制台日志级别和默认日志级别之间的确切区别是什么


我不熟悉模块编程。

正如我们所知,我们有不同的内核级日志:

#define KERN_EMERG "<0>" /* system is unusable*/
#define KERN_ALERT "<1>" /* action must be taken immediately*/
#define KERN_CRIT "<2>" /* critical conditions*/
#define KERN_ERR "<3>" /* error conditions*/
#define KERN_WARNING "<4>" /* warning conditions*/
#define KERN_NOTICE "<5>" /* normal but significant condition*/
#define KERN_INFO "<6>" /* informational*/
#define KERN_DEBUG "<7>" /* debug-level messages*/
#define KERN_EMERG”“/*系统不可用*/
#定义内核警报“”/*必须立即采取措施*/
#定义KERN_CRIT”“/*临界条件*/
#定义KERN_ERR”“/*错误条件*/
#定义内核警告“/*警告条件*/
#定义KERN_NOTICE“/*正常但重要的条件*/
#定义内核信息“/*信息性*/
#定义内核调试“/*调试级消息*/
好的,让我们分开讨论:

控制台日志级别
用于设置日志级别,可在控制台窗口
上显示日志级别,日志级别(printk)
(考虑到您的情况,请选择4)

i、 例如,它将使用printk打印内核消息,日志级别为0、1、2和3。其余的4到7将记录在内核维护的循环缓冲区中-可以看到发出
“dmesg”

现在,如果我们转到默认日志级别:

无论何时使用printk而没有任何日志级别信息,例如:

printk(“Insmod我的第一个驱动程序”)//此日志级别将设置为“kern_warning”(默认日志级别为4)


因此,区别在于控制台日志用于决定需要在控制台上打印什么,而默认日志级别用于在内核模块编程期间,如果printk未提及,默认情况下将采用什么日志级别。

即使我提到了我之前知道的内容,为什么我们使用两个不同的值,为什么我们不应该使用控制台日志级别而不是默认日志级别您的意思是调整printk行为,我认为这很烦人。为什么一个控制台日志级别与默认日志级别混淆,而两个控制台都有自己明确的角色。控制台日志用于控制希望在控制台窗口-VT上看到的日志,而默认日志级别用于在打印语句中无法定义日志级别时设置日志级别。假设您想在控制台上放置内核级别的日志3,并且使用不同的级别,比如说级别5,作为默认日志级别。然后,您将在控制台上错过它们(未提及loglevel的printk),并在dmesg缓冲区中找到它们。