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