【发布时间】:2012-02-03 01:37:38
【问题描述】:
每个人都知道中断处理程序应该尽可能短。在中断处理程序中添加像printk 这样的函数来调试是不应该做的事情。
其实我之前在为我写的一个中断驱动的char设备调试linux内核的时候就试过了,结果破坏了驱动的时序。
我的问题是,为什么会这样?
printk 函数被缓冲!这意味着,据我了解,数据被插入到队列中,并且稍后会处理它,很可能是在中断处理程序完成之后。
那么为什么它不起作用呢?
【问题讨论】:
-
请考虑您的打印调用可能会填满缓冲区,迫使它刷新。在中断处理程序中执行 I/O 会发生什么?
-
是的,这真的很糟糕。谢谢,晚安。
-
它确实工作。
printk旨在从中断或进程上下文中调用。如果不是,它对调试没有多大用处。不过,您显然不会在生产驱动程序的中断上下文中调用它。
标签: c linux-kernel interrupt-handling printk