簡體   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