【问题标题】:How can I safely print something to kmsg in interrupt context如何在中断上下文中安全地将某些内容打印到 kmsg
【发布时间】:2017-11-17 00:41:24
【问题描述】:

我需要在 Irq 服务例程中向内核日志打印一条消息,因此它位于“中断上下文”中。我知道在这种情况下不建议使用 printk,那么这里最好的选择是什么? 感谢您的任何建议。

我听说有一个关于 printk_deferred 的选项,我注意到这是在调度程序中使用的,但还没有找到它在 irq isr 中的使用位置。谁能解释一下 printk_deferred 和 printk 有什么区别?

【问题讨论】:

  • 让我们从您希望记录的中断开始?如果该中断在一秒钟内产生几千次怎么办?你真的想记录每一个动作吗?嗯...恕我直言,我会按照实际推荐的那样使用 tasklet、softirq 或 workqueue 创建一个推迟的操作。看看任何有 request_irq 例程的驱动程序,应该有一个 IRQ 处理程序,因为它不直接调用服务函数。
  • 感谢您的评论,@0xDen 中断每 20 毫秒产生一次,有一定的条件检查来打印消息,假设打印消息大约每 10 分钟发生一次。

标签: linux-kernel linux-device-driver


【解决方案1】:

一个常见的想法是,我们可以从中断处理程序更新要打印的变量或信息,然后从内核线程将该值打印到内核日志缓冲区。这样处理程序将保持不变,我们的目标也将实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-29
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    • 2012-05-27
    • 2021-12-06
    相关资源
    最近更新 更多