2016-11-22 45 views
2

我正在寫一個Linux misc_device驅動程序,並且遇到讀取問題。目前內核認爲驅動程序是一個快速設備:驅動程序讀取被緩衝,直到用戶空間調用程序所需的數據(例如從磁盤讀取文件時)爲止。這意味着讀取系統調用不會返回,直到緩衝區已滿。我想改變這種行爲,並告訴內核在有數據可用時立即返回系統調用(就像在套接字上讀取數據一樣)。無緩衝misc_device讀取-linux內核驅動程序

可能嗎?怎麼樣?我完全錯了嗎?

謝謝!

+0

不知道,如果你仍然有興趣在這個問題的9條周以後,但:你確定阻塞在內核中發生的事情?我的回憶是,驅動程序的工作是檢查結構文件f_flags中的O_NONBLOCK,並在必要時阻止等待輸入。否則,如果沒有設置O_NONBLOCK,它應該在每次讀取調用時讀取儘可能多的數據並立即返回,並且當讀取調用最終發生時,根本沒有數據要讀取時,返回0字節來告訴調用者停止。設置O_NONBLOCK或不是用戶空間的工作。 – michaeljt

回答

0

因爲你沒有回答我的評論:通常任何等待,直到有足夠的數據可用由驅動程序完成(即你必須在你的代碼中完成),而不是通用內核代碼,儘管你的驅動程序將使用通用內核代碼來做它[1]。你應該檢查結構文件f_flags成員中的O_NONBLOCK,以瞭解是否應該等待。但是,用戶空間可能會繼續在循環中調用read(),直到read()返回並讀取零字節爲止。因此,如果您打電話進行讀取並且自上次調用以來沒有新數據到達,那麼將字節讀數設置爲零非常重要。希望有所幫助。

[1] http://www.makelinux.net/ldd3/chp-6-sect-2