Linux裝置驅動中的非同步操作

2021-04-15 15:06:18 字數 681 閱讀 3967

首先,開啟目標裝置。

第二,設定好目標裝置的sigio訊號處理程式。

第三,需要通過fcntl系統呼叫,使當前程序變成檔案的主人。(這樣才能使檔案中的訊號

發到當前程序)

第四,通過ioctl系統呼叫,將目標通道設定成非同步操作模式。

在驅動程式的fops中,有乙個函式

int (*fasync)(int fd, struct file * file, int on);

在系統呼叫sys_ioctl的時候,會呼叫上面的fasync函式。

例如,滑鼠器的

int fasync_aux(int fd, struct file * filp, int on)

這裡的queue類似於(struct mydev *)filp->private_data,fasync則是裡面的乙個fasyn

c佇列。

fasync_helper的作用是為當前程序建立乙個fasync_struct資料結構,然後掛入目標裝置

的fasync佇列。

然後,在目標裝置的常規驅動處理程式中,向該佇列傳送訊號。

例如,滑鼠驅動器的

void handle_mouse_event(unsigned char scancode)(這類似於usb驅動中的int urb,一

個**函式)

即向每乙個登記的程序傳送sigio訊號。

Linux裝置驅動中的非同步通知和非同步IO

前面兩章分別提到io模型中的阻塞與非阻塞linux驅動 六 裝置驅動中的阻塞與非阻塞io,io多路復用驅動中輪詢操作實現,這一章我們再來看看非同步io,這樣,io模型就可以都搞定了。回顧一下在應用程式中使用非同步io的步驟 1,應用程式 1 設定非同步標誌位 int flags fcntl fd,f...

linux裝置驅動中的非同步通知機制

非同步通知的意思是 一旦裝置就緒,則主動通知應用程式,這樣應用程式根本就不需要查詢裝置狀態,這一點非常類似於硬體上 中斷 的概念,比較準確的稱謂是 訊號驅動的非同步i o 訊號是在軟體層次上對中斷機制的一種模擬,在原理上,乙個程序收到乙個訊號與處理器收到乙個中斷請求可以說是一樣的.訊號是非同步的,乙...

Linux 驅動框架 驅動中的非同步

非同步io是對阻塞和輪詢io的機制補充,所謂非同步io就是在裝置資料就緒時主動通知所屬程序進行處理的機制。之所以說是非同步是相對與被通知程序的,因為程序不知道也無法知道什麼時候會被通知 這一機制非常類似於硬體上的中斷。非同步io的實現也依賴於linux核心程序的訊號機制,因為非同步io就是通過sig...