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

我正在debugging一个驱动程序的Linux(特别是Ubuntu的服务器9.04),并在代码中有几个printf语句。

我在哪里可以查看这些语句的输出?

编辑1:我想要做的是写入内核使用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] 

任何解释?

Solutions Collecting From Web of "内核中的输出输出在哪里?"

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

关于dmesg命令的一个注意事项:内核消息存储在循环缓冲区中,所以大量的输出将被覆盖。

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

你将得到命令dmesg的输出

dmesg输出来自内核的所有消息。 找到你想要的消息将是困难的。 最好使用dmesggrep组合,并在所有printk消息中使用驱动程序特定的标签。 这将消除所有不需要的消息。

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

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

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

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

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