字元裝置驅動程式 非同步通知

2021-12-30 00:29:11 字數 1059 閱讀 1546

1.各種讀取按鍵值的方式比較

查詢:耗cpu資源

中斷:在應用程式中的read函式一直會休眠,直到有中斷發生。

poll:在一段時間內跟中斷相同,但是超時之後read函式會返回。

三種共同點:應用程式主動去讀取按鍵的狀態。

2.驅動程式主動去提醒應用的方式:非同步通知

實現方式:signal

舉例:# kill -9 pid

kill傳送9訊號到pid

在ubuntu上測試的簡單例子:

#include

#include

void my_signal_fun(int signum)

int main(int argc, char **ar**)

return 0;

}編譯之後執行(在後台):

# kill -usr1 pid

注:具體的pid號碼通過ps命令檢視。

需要完成四步功能:

(1)應用程式中:註冊訊號處理函式

(2)驅動程式中:將出現的事件通過訊號傳送給應用程式

(3)應用程式需要事先告訴驅動程式自己的pid號

(4)傳送的辦法:驅動程式呼叫kill_fasync函式

3.為了使裝置支援非同步通訊機制,驅動程式中需要涉及以下3項工作

(1)支援f_setown命令,能在這個控制命令處理中設定file->f_owner為對應的程序id。不過此項工作一般由核心來完成,裝置驅動無需處理。

(2)支援f_setfl命令的處理,每當fasync標誌改變時,驅動程式中的fasync()函式將得以執行。驅動中應該事先fasync()函式。

(3)在裝置資源可獲得時,呼叫kill_fasync()函式激發相應的訊號。

補充:應用程式

fcntl(fd, f_setown, getpid());//告訴核心,發給誰

oflags = fcntl(fd, f_getfl);

fcntl(fd, f_setfl, oflags | fasync);//改變fasync標記,最終會呼叫到驅動的faync>fasync_helper:初始化/釋放fasync_struct

按鍵驅動程式(非同步通知)

此驅動程式之前的按鍵驅動程式 中斷方式 上加以優化。用到非同步通知。對於核心來講,既然使用者想得到的是按鍵後的狀態,那麼自然不必時時都要 狀態。當它檢測到中斷發生變主動通知使用者,使用者再來讀。這樣,使用者空間 核心就可以著手幹點其它的事情,而不必忙等按鍵按下或釋放。那麼就先從應用程式上面看。怎麼設...

linux裝置驅動程式 字元裝置驅動程式

先留個 有一起學習驅動程式的加qq295699450 字元裝置驅動 這篇比較惱火。載入成功,但是讀不出來資料,有知道怎麼回事的,留個言,一起討論下 資料結構 struct scull mem struct scull dev dev 整個驅動程式 如下 include include include...

Linux裝置驅動程式 字元裝置驅動程式

1.檢視主裝置號,次裝置號 進入 dev目錄執行ls l,第四,五列分別為主次裝置號,10,180,1,5,這些是主裝置號,而60,63這些就是次裝置號 130 shell android dev ls l crw rw r system radio 10,60 1969 12 31 21 00 a...