我正在调试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]
任何解释?
答案 0 :(得分:25)
很多时候KERN_DEBUG
级别的消息被过滤,您需要明确提高日志记录级别。您可以通过检查/proc/sys/kernel/printk
来查看系统默认值。例如,在我的系统上:
# cat /proc/sys/kernel/printk
4 4 1 7
第一个数字显示控制台日志级别为KERN_WARNING
(有关详细信息,请参阅proc(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 添加到内核引导参数,其中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中