我正在调试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] 

有什么解释吗?

有帮助吗?

解决方案

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

关于 dmesg 命令:内核消息存储在圆形缓冲区中,因此大量输出将被覆盖。

其他提示

多次 KERN_DEBUG level 消息被过滤,您需要显式提高日志记录级别。您可以通过检查来了解系统默认值 /proc/sys/kernel/printk. 。例如,在我的系统上:

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

第一个数字显示控制台日志级别是 KERN_WARNING (看 过程(5) 手册页以获取更多信息)。这意味着 KERN_NOTICE, KERN_INFO, , 和 KERN_DEBUG 消息将从控制台过滤。要提高日志记录级别或详细程度,请使用 dmesg

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

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

您将通过命令获得输出 dmesg

DMESG 输出内核的所有消息。找到所需的消息将很困难。更好地使用 DMESG格雷普 在您的所有 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(至少在CentOS 6.6中)中,输出将在/var/log/消息中

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top