驅動中的poll機制分析

2021-07-11 18:03:39 字數 700 閱讀 8749

核心: sys_poll(struct pollfd *ufds, unsigned int nfds, long timeout_mesecs )

do_sys_poll(ufds, nfds, to)

poll_initwait(&table)  /* 初始化乙個poll_wqueues 變數table */

init_poll_funcptr(&pwq->pt, __pollwait);

do_poll(nfds, head, &table, end_time)

for (;;)

}if (!count)

if (count || timed_out)

break;

poll_schedule_timeout()

}1.poll_initwait,函式初始化

poll_wqueues

變數table

,並且將__pollwait函式賦值給table。這裡的__pollwait函式將在驅動的poll方法中通過呼叫poll_wait函式來執性。

2.for迴圈的退出條件:count或者timeout為非零(do_pollfd函式返回的mask為真;timeout定時時間到)。

3.poll_wait完成新增佇列的工作,繼續向下執行

poll_schedule_timeout

()進入休眠,直到被wake_up或者休眠時間到。

按鍵驅動 poll機制

應用程式 open,read,write,poll 驅動程式 open,read,write,poll 所有的系統呼叫,基於都可以在它的名字前加上 sys 字首,這就是它在核心中對應的函式。比如系統呼叫open read write poll,與之對應的核心函式為 sys open sys read...

globalfifo驅動例項(poll機制)

阻塞操作是指在執行裝置操作時若不能獲得資源則掛起程序,直到滿足可操作的條件後在進行操作。非阻塞操作的程序在不能進行裝置操作時並不掛起,它或者被放棄,或者不停的查詢,直到可以進行操作為止 喚醒程序的地方最大可能發生在中斷裡面,因為硬體資源獲得的同時往往伴隨著乙個中斷 在使用者程式中,select 和p...

核心驅動之poll機制

kernel sys poll do sys poll timeout jiffies poll initwait table init poll funcptr pwd pt,pollwait table qproc pollwait do poll nfds,head,table,timeout...