在 Linux 内核模块(驱动程序)关键部分等待用户-space 输入

Waiting in Linux Kernel Module(Driver) Critical Section for user-space input

我是内核编程的新手,我正在对 Linux 驱动程序进行更改。我想 block/wait 在用户输入的关键部分(驱动程序和用户之间的通信 - space 应用程序工作)。问题是,当我使用 wait_event_timeout() 时,系统崩溃了,我得到了 BUG: scheduling while atomic: swapper。 有没有人知道如何解决这个问题并且可以给我一些建议从哪里开始?

in other questions 所述,您在已经获取了一些锁(在临界区内)的上下文中调用了 wait_event_timeout。在这一点上,您的进程可能会与其他进程发生死锁,并且调度程序会对此进行抱怨。请检查您调用 wait_event_timeout 的位置,并检查 I/O 是否在正确的位置执行,以及您是否在将进程发送到睡眠状态之前解锁了所有同步原语。