微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

【Linux内核】Ubuntu下printk函数无法在终端显示

在Ubuntu下使用insmod安装模块的时候,发现预设的调试信息并没有输出,但是使用dmesg命令可以看到在日志中确实有调试信息,下面分析一下可能的情况。

printk信息的输出去向

这是在内核的命令行参数console=ttyXXX里指定死了,比如console=tty1表示printk的信息输出到终端1。如果是这种情况,你需要使用Ctrl+Alt+(F1-F6)来切换终端。

日志输出级别过低

用printk,内核会根据日志级别,可能把消息打印到当前控制台上,这个控制台通常是一个字符模式的终端、一个串口打印机或是一个并口打印机。这些消息正常输出的前提是──日志输出级别高于console_loglevel(在内核中数字越小优先级越高)。

日志级别一共有8个级别,printk的日志级别定义如下(在include/linux/kernel.h中):

0 #define KERN_EMERG
1 #define KERN_ALERT
2 #define KERN_CRIT
3 #define KERN_ERR
4 #define KERN_WARNING
5 #define KERN_NOTICE
6 #define KERN_INFO
7 #define KERN_DEBUG

查看当前控制台的打印级别

cat /proc/sys/kernel/printk 6 4 1 7

上面显示的4个数据分别对应控制台日志级别认的消息日志级别最低的控制台日志级别认的控制台日志级别

修改printk当前控制台日志级别(三个方法): 1. dmesg -n 8 2. echo 8 > /proc/sys/kernel/printk 3. 修改kernel/printk.c,把MINIMUM_CONSOLE_LOGLEVEL定义为7

原文地址:https://www.jb51.cc/ubuntu/352436.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐