我在this fabulous tutorial中描述了在Linux中创建了一个字符设备驱动程序内核模块。驱动程序运行良好,但我需要扩展内核模块功能
static ssize_t device_write(struct file *filp, const char *buff, size_t len, loff_t *off)
以便在一段固定时间内阻止调用用户进程(调用函数write()
)。
我可以在我的内核模块中的函数linux/delay.h
中包含msleep(1000)
并使用device_write
让CPU等待。但我不知道这是否是阻止write()
在用户空间中调用函数的正确方法。
请不要将此与资源并发访问混淆。这不是我的观点。我只想阻止用户空间程序的write()
调用,直到我将数据写入我的硬件设备需要一些时间。只有在此之后,我才知道操作是否成功,我可以通过device_write
向用户空间程序的write
调用返回适当的状态调用。
答案 0 :(得分:0)
你可以在阻塞函数中使用down_interruptible(struct semaphore),并在其他一些内核线程/事件处理程序中释放信号量,从而释放调用线程。