内核中的打印输出在哪里?

时间:2010-12-23 11:42:03

标签: linux ubuntu linux-kernel printk

我正在调试linux的驱动程序(特别是ubuntu服务器9.04),代码中有几个printf语句。

我在哪里可以查看这些陈述的输出?

EDIT1:我要做的是使用proc文件系统写入内核。 打印代码是

static int proc_fractel_config_write(struct file *file, const char *argbuf, unsigned long count, void *data)
{
    printk(KERN_DEBUG "writing fractel config\n");
    ...

在kern.log中,当我尝试覆盖文件/ proc / net / madwifi / ath1 / fractel_config时(当然会有不同的时间),我看到以下消息。

[ 8671.924873] proc write 
[ 8671.924919] 

任何解释?

7 个答案:

答案 0 :(得分:25)

很多时候KERN_DEBUG级别的消息被过滤,您需要明确提高日志记录级别。您可以通过检查/proc/sys/kernel/printk来查看系统默认值。例如,在我的系统上:

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

第一个数字显示控制台日志级别为KERN_WARNING(有关详细信息,请参阅proc(5)手册页)。这意味着将从控制台中过滤出KERN_NOTICEKERN_INFOKERN_DEBUG条消息。要提高日志记录级别或详细程度,请使用dmesg

$ sudo dmesg -n 7
$ cat /proc/sys/kernel/printk
7       4       1       7

此处,将级别设置为7(KERN_DEBUG)将允许所有级别的消息显示在控制台上。要自动执行此操作,请将loglevel= N 添加到内核引导参数,其中N是要进入控制台的日志级别,或ignore_loglevel将所有内核消息打印到控制台。

答案 1 :(得分:12)

这取决于发行版,但许多人使用klogd(8)从内核获取消息,并将其记录到文件(有时是/var/log/dmesg/var/log/kernel)或系统通过syslog(3)登录。在后一种情况下,日志条目最终将取决于syslogd(8)的配置。

关于dmesg命令的一个注释:内核消息存储在循环缓冲区中,因此将覆盖大量输出。

答案 2 :(得分:5)

您将使用命令dmesg

获取输出

答案 3 :(得分:3)

dmesg 输出内核中的所有消息。找到你想要的信息会很困难。更好地使用 dmesg grep 组合,并在所有printk条消息中使用特定于驱动程序的标签。这样可以轻松消除所有不需要的消息。

printk("test: hello world")

dmesg | grep test

答案 4 :(得分:1)

我在Ubuntu 11.10和10.04 LTS上遇到此问题,前者我编辑了/etc/rsyslog.d/50-default.conf,然后使用“sudo service rsyslog restart”重新启动rsyslog以重新启动rsyslogd。然后它奏效了。

请注意,Ubuntu使用* r * syslogd,而不是syslogd。

答案 5 :(得分:0)

您可以尝试比KERN_DEBUG更高的级别,例如KERN_INFO。根据您的配置,可能不会显示优先级最低的消息。

答案 6 :(得分:0)

在centos(Atleast in centos 6.6)中,输出将在/ var / log / messages中