您的位置:首页 > 运维架构 > Linux

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

2017-06-28 09:16 603 查看
在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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息