繁体   English   中英

如何使字符设备驱动程序内核模块的写调用者进入睡眠状态

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM