[英]How to put a caller of write of a character device driver kernel module to sleep
如本神话般的教程所述,我在Linux中创建了字符设备驱动程序内核模块。 驱动程序运行良好,但我需要扩展内核模块功能
static ssize_t device_write(struct file *filp, const char *buff, size_t len, loff_t *off)
因此调用用户进程(调用函数write()
)被阻止了固定的时间。
我可以包括linux/delay.h
并在内核模块的device_write
函数中使用msleep(1000)
来让CPU等待。 但是我不知道这是否是在用户空间中阻止write()
函数调用的正确方法。
请不要将此与并发访问资源混淆。 这不是我的意思。 我只想阻止用户空间程序的write()
调用,直到将数据写入我的硬件设备为止,这需要一些时间。 只有在此之后,我才知道该操作是否成功,并且可以通过device_write
将适当的状态调用device_write
给用户空间程序的write
调用。
您可以在阻塞函数内部使用down_interruptible(struct semaphore),并在其他一些内核线程/事件处理程序中释放该信号灯,从而释放调用线程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.