C Linux内核-打印到文件

C Linux内核-打印到文件,c,linux,linux-kernel,C,Linux,Linux Kernel,我正在调试我的系统调用,我发现dmesg打印了太多的行,这使我无法看到我所有的printk 是否可以将printk写入文件?printk()和printf()之间的主要区别在于前者能够指定日志级别。内核使用日志级别决定是否将消息打印到控制台。内核在控制台上显示所有日志级别低于指定值的消息 在标准Linux系统上,来自日志缓冲区的消息通过syslogd发送到/var/log/messages。 否则,您可以检查syslogd配置以查看它们的去向 如果您根本没有syslogd和systemd,那么您

我正在调试我的系统调用,我发现dmesg打印了太多的行,这使我无法看到我所有的
printk


是否可以将printk写入文件?

printk()和printf()之间的主要区别在于前者能够指定日志级别。内核使用日志级别决定是否将消息打印到控制台。内核在控制台上显示所有日志级别低于指定值的消息

在标准Linux系统上,来自日志缓冲区的消息通过syslogd发送到/var/log/messages。

否则,您可以检查syslogd配置以查看它们的去向

如果您根本没有syslogd和systemd,那么您可以使用
journalctl-k-f

使用
trace\u printk()
而不是
printk()

你的指纹应该在ftrace缓冲区中

      $ cd /sys/kernel/debug/tracing
      $ cat trace

请参阅“使用trace_printk()”

的确,
dmesg | grep>out.txt
可以作为解决方案,因为我可以在那里grep我的特定关键字并打印到文件中。但是,如果我只需要当前进程的printk,并且它还打印所有旧进程日志
printk
打印到可通过
/proc/kmsg
访问的环形缓冲区,这将是一个问题。如果丢失消息,请使用更大的缓冲区(
CONFIG\u LOG\u BUF\u SHIFT
)重新编译内核。如果看到太多消息,请学习过滤(即
grep
)。此外,还要考虑其他调试技术(StaseTAP,fTrack)。在开始调试<代码> SysCurry>代码>执行<代码> $SUDO DMEG--C/> >以清除缓冲区,以便它可以存储来自Prttk的更多消息。设置SysLog/SysLogd/RSySaldd/任意。这是
/proc/kmesg
,可以说服它进行适当的解析。开始考虑跟踪框架,否则这里的所有注释和您的问题都是错误的。没有“标准Linux系统”这样的东西,所以您应该检查Debian衍生品上的
/var/log/syslog