我是内核编程的新手,我正在Linux驱动程序中进行更改。我想在一个关键部分阻止/等待用户输入(驱动程序和用户空间应用程序工作之间的通信)。问题是,当我使用wait_event_timeout()时,系统正在崩溃,而我正在获得BUG: scheduling while atomic: swapper
。有谁知道如何解决这个问题,可以给我一些建议从哪里开始?
正如in other questions所解释的那样,当你已经获得了一些锁(在一个关键部分内)时,你在上下文中调用wait_event_timeout。在这一点上,您的进程可能会与其他进程发生死锁,并且调度程序会抱怨它。请查看您调用wait_event_timeout的位置,并检查I / O是否在正确的位置执行,以及在将进程发送到睡眠状态之前是否已解锁所有同步原语。