内核中 print 的输出去了哪里?

发布于 2024-10-08 21:57:51 字数 492 浏览 1 评论 0原文

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

有什么解释吗?

I am debugging a driver for linux (specifically ubuntu server 9.04), and there are several printf statements in the code.

Where can I view the output of these statements?

EDIT1: What i'm trying to do is write to kernel using the proc file-system.
The print code is

static int proc_fractel_config_write(struct file *file, const char *argbuf, unsigned long count, void *data)
{
    printk(KERN_DEBUG "writing fractel config\n");
    ...

In kern.log, I see the following message when i try to overwrite the file /proc/net/madwifi/ath1/fractel_config (with varying time of course).

[ 8671.924873] proc write 
[ 8671.924919] 

Any explainations?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

千寻… 2024-10-15 21:57:51

很多时候 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 打印的日志级别发送到控制台的所有内核消息。

Many times KERN_DEBUG level messages are filtered and you need to explicitly increase the logging level. You can see what the system defaults are by examining /proc/sys/kernel/printk. For example, on my system:

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

the first number shows the console log level is KERN_WARNING (see proc(5) man pages for more information). This means KERN_NOTICE, KERN_INFO, and KERN_DEBUG messages will be filtered from the console. To increase the logging level or verbosity, use dmesg

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

Here, setting the level to 7 (KERN_DEBUG) will allow all levels of messages to appear on the console. To automate this, add loglevel=N to the kernel boot parameters where N is the log level you want going to the console or ignore_loglevel to print all kernel messages to the console.

青朷 2024-10-15 21:57:51

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

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

It depends on the distribution, but many use klogd(8) to get the messages from the kernel and will either log them to a file (sometimes /var/log/dmesg or /var/log/kernel) or to the system log via syslog(3). In the latter case, where the log entries end up will depend on the configuration of syslogd(8).

One note about the dmesg command: Kernel messages are stored in a circular buffer, so large amounts of output will be overwritten.

离去的眼神 2024-10-15 21:57:51

您将使用命令 dmesg 获得输出

You'll get the output with the command dmesg

画▽骨i 2024-10-15 21:57:51

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

printk("test: hello world")

dmesg | grep test

dmesg outputs all the messages from the kernel. Finding your desired messages would be difficult. Better use dmesg and grep combination and use a driver specific label in all your printk messages. That will ease in eliminating all the unwanted messages.

printk("test: hello world")

dmesg | grep test
活雷疯 2024-10-15 21:57:51

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

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

I had this problem on Ubuntu 11.10 and 10.04 LTS, on the former I edited /etc/rsyslog.d/50-default.conf, then restarted rsyslog using "sudo service rsyslog restart" to restart rsyslogd. Then it worked.

Note that Ubuntu uses *r*syslogd, not syslogd.

荭秂 2024-10-15 21:57:51

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

You might try a higher level than KERN_DEBUG, for example KERN_INFO. Depending on your configuration the lowest priority messages might not be displayed.

当爱已成负担 2024-10-15 21:57:51

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

In centos (Atleast in centos 6.6) the output will be in /var/log/messages

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文