簡體   English   中英

Linux內核在驅動程序中讀取功能

[英]Linux kernel sleeping in driver read function

我正在開發Linux內核字符驅動程序,在讀取函數中,我在循環中睡眠,直到從硬件獲取數據。 如果我在讀取系統調用中阻止用戶應用程序時,應用程序仍然正常工作,之后我從read syscall返回。 是否有可能在驅動程序中確定應用程序已終止,因此我可以從循環返回?

在等待數據時,應將進程添加到等待隊列(add_wait_queue()),然后使用set_current_state(TASK_INTERRUPTIBLE)並調用schedule()。 當數據進入時 - 它應該以某種方式被識別 - 例如使用一些中斷然后喚醒睡眠任務(wake_up())。 內核源代碼中有很多例子。

換句話說 - 在讀取功能中,您需要在沒有數據時進入休眠狀態,而在某些其他路徑(中斷)中則需要喚醒此讀取功能。 最好不要在讀取功能中忙碌等待。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM