【问题标题】:Limitations on printing to kernel logs打印到内核日志的限制
【发布时间】:2013-03-22 15:59:49
【问题描述】:

我正在开发一个 linux 设备驱动程序(内核版本 2.6.32-37)。我主要通过打印到内核日志(使用 printk)来调试我的代码。一切顺利,直到我的电脑突然停止响应。我一遍又一遍地检查它,我的代码似乎是正确的。 我的问题是:

内核日志打印过多是否可能导致计算机停止响应?

非常感谢!

奥马尔

【问题讨论】:

  • 如果您在中断中使用printk(),则可以执行此操作,具体取决于您所说的停止响应。请看printk_ratelimit()

标签: linux linux-kernel linux-device-driver printk


【解决方案1】:

我怀疑问题是由printk 引起的,当然使用printk 本身会减慢整个代码的速度,但不会导致系统崩溃。

这是来自Ubuntu Kernel Debugging Tricks 的引用: The internal kernel console message buffer can sometimes be too small to capture all of the printk messages, especially when debug code generates a lot of printk messages. If the buffer fills up, it wraps around and one can lose valueable debug messages.

如您所见,当打印太多数据时,您只需开始覆盖一些您想在日志文件中看到的旧数据;这是一个问题,因为一些调试消息会消失,但不会引起整个事情崩溃。

我建议您再次仔细检查您的代码,尝试追踪崩溃的时间/地点,如果您无法解决问题,请在此处或某些内核黑客邮件列表中发布问题。

P.S 还要提一下,您需要小心放置 printk 语句的位置,因为某些代码区域可能无法容忍由它引起的延迟,这可能会导致进一步的问题,导致冻结/崩溃。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 2021-09-01
    • 2012-06-06
    • 2016-08-29
    • 1970-01-01
    • 2023-04-01
    • 2016-12-13
    相关资源
    最近更新 更多