深入淺出 Linux裝置驅動非同步通知介紹

2021-05-27 21:05:36 字數 504 閱讀 4275

結合阻塞與非阻塞訪問、poll函式可以較好地解決裝置的讀寫,但是如果有了非同步通知就更方便了。非同步通知的意思是:一旦裝置就緒,則主動通知應用程式,這樣應用程式根本就不需要查詢裝置狀態,這一點非常類似於硬體上"中斷"地概念,比較準確的稱謂是"訊號驅動(sigio)的非同步i/o"。

我們先來看乙個使用訊號驅動的例子,它通過signal(sigio, input_handler)對stdin_fileno啟動訊號機制,輸入可獲得時input_handler被呼叫,其源**如下:

#include #include #include #include #include #include #define max_len 100

void input_handler(int num)

main()

為了使裝置支援該機制,我們需要在驅動程式中實現fasync()函式,並在write()函式中當資料被寫入時,呼叫kill_fasync()函式激發乙個訊號,此部分工作留給讀者來完成。

深入淺出Linux裝置驅動之字元裝置驅動程式

linux下的裝置驅動程式被組織為一組完成不同任務的函式的集合,通過這些函式使得windows的裝置操作猶如檔案一般。在應用程式看來,硬體裝置只是乙個裝置檔案,應用程式可以象操作普通檔案一樣對硬體裝置進行操作,如open close read write 等。linux主要將裝置分為二類 字元裝置和...

深入淺出 Linux裝置驅動中斷處理介紹

深入淺出 linux裝置驅動中斷處理介紹 與linux裝置驅動中中斷處理相關的首先是申請與釋放irq的api request irq 和free irq request irq 的原型為 int request irq unsigned int irq,void handler int irq,vo...

深入淺出Linux裝置驅動之併發控制

在驅動程式中,當多個執行緒同時訪問相同的資源時 驅動程式中的全域性變數是一種典型的共享資源 可能會引發 競態 因此我們必須對共享資源進行併發控制。linux核心中解決併發控制的最常用方法是自旋鎖與訊號量 絕大多數時候作為互斥鎖使用 自旋鎖與訊號量 類似而不類 類似說的是它們功能上的相似性,不類 指代...