内核中 print 的输出去了哪里?
-
12-10-2019 - |
题
我正在调试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/消息中