c - Linux 内核在驱动程序读取功能中休眠

标签 c linux-kernel

我正在开发 Linux 内核字符驱动程序,在读取函数中,我在一个循环中休眠,直到我从硬件中获取数据。如果我在读取系统调用中被阻止时终止用户应用程序,则在我从读取系统调用返回之前该应用程序仍在运行。是否有可能在驱动程序中确定应用程序已终止,以便我可以从循环中返回?

最佳答案

当您等待数据时,您应该将进程添加到等待队列 (add_wait_queue()),然后使用 set_current_state(TASK_INTERRUPTIBLE) 并调用 schedule()。当数据进来时 - 它应该以某种方式被识别 - 例如使用一些中断然后唤醒 sleep 任务(wake_up())。内核源代码中有很多示例。

换句话说 - 在读取函数中,当没有数据时您需要进入休眠状态,而在其他路径(中断)中您需要唤醒此读取函数。最好不要执行忙等待读取功能。

关于c - Linux 内核在驱动程序读取功能中休眠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51168780/

相关文章:

c - scanf 没有在结构中存储正确的信息

c - 奇怪的 C 语句作为结构中的字段

C 字符串搜索获取字符串的一部分

linux - 我如何启用/禁用内核 kaslr、smep 和 smap

linux-kernel - 如果copy_to_user()失败,将返回值传递给setsockopts()调用者吗?

c - 在 C 中访问进程的 PCB

c - C代码中的syslog命令

java - 如何解决这个难题?

c - 运行在普通内核上、使用普通调度程序的普通进程进入一个事件周期的平均时间是多少?

linux-kernel - Linux 内核引导方法 预构建的 rootfs