【问题标题】:Where does output of print in kernel go?内核中的打印输出到哪里去了?
【发布时间】:2011-05-29 22:32:30
【问题描述】:

我正在调试一个linux的驱动(特别是ubuntu server 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] 

有什么解释吗?

【问题讨论】:

    标签: linux ubuntu linux-kernel printk


    【解决方案1】:

    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 以将所有内核消息打印到控制台。

    【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      您将使用命令dmesg 获得输出

      【讨论】:

      • 找不到我要找的东西,但我会再试一次。
      • 它们真的是“printf”语句吗?它们真的应该是“printk”,我认为内核中没有定义 printf(如果我错了,请纠正我)。
      • 我的理解是 chris 是正确的。 printk() 将输出到 dmesg 或 /var/log/messages
      【解决方案4】:

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

      printk("test: hello world")
      
      dmesg | grep test
      

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

            在 centos 中(至少在 centos 6.6 中)输出将在 /var/log/messages 中

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-07-03
              • 2014-01-04
              • 2013-09-17
              • 2011-06-26
              相关资源
              最近更新 更多