字元裝置驅動之筆記 非同步通知(fasync)

2021-07-09 08:49:32 字數 1024 閱讀 6419

發訊號:

1. 誰發

2. 發給誰

3. 發什麼

4. 怎麼發

5. 收到訊號後做什麼

驅動和應用

發訊號:

1. 誰發    按鍵中斷服務程式

2. 發給誰  使用按鍵的應用程式

3. 發什麼  sigio

4. 怎麼發  kill_fasync(誰, sigio)

5. 收到訊號後做什麼: sighandler_t signal(int signum, sighandler_t handler);

怎麼寫驅動?

1. 定義乙個fasync_struct指標:

struct fasync_struct *buttons_async;

2. 設定它:

static int buttons_fasync(int fd, struct file *filp, int on)

static const struct file_operations buttons_fops = ;

3. 使用它:

kill_fasync(&buttons_async, sigio, poll_in);

怎麼寫應用?

1. 註冊訊號處理函式

signal(signo, signal_function);

2. 執行某些函式, 使得驅動裡的fasync被呼叫

flag = fcntl(fd, f_getfl);

flag |= fasync;

fcntl(fd, f_setfl, flag);

3. 把應用程式的pid告訴驅動:

fcntl(fd, f_setown, getpid());

4. kill_fasync(&buttons_async, sigio, poll_in);

__kill_fasync(*fp, sig, band);

fown = &fa->fa_file->f_owner;

send_sigio(fown, fa->fa_fd, band);

字元裝置驅動(3) 非同步通知

include include include include include include include include include include include include include static struct class fifthdrv class static stru...

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

1.各種讀取按鍵值的方式比較 查詢 耗cpu資源 中斷 在應用程式中的read函式一直會休眠,直到有中斷發生。poll 在一段時間內跟中斷相同,但是超時之後read函式會返回。三種共同點 應用程式主動去讀取按鍵的狀態。2.驅動程式主動去提醒應用的方式 非同步通知 實現方式 signal 舉例 kil...

讀 《Linux裝置驅動程式設計之非同步通知》 筆記

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