Linux系統(tǒng)處理共享中斷的技巧
發(fā)表時(shí)間:2023-08-08 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]在Linux系統(tǒng)中中斷是可以共享的,這樣就可以有多個(gè)設(shè)備同時(shí)響應(yīng)一個(gè)中斷,從而形成一個(gè)中斷鏈表。甚至沒有產(chǎn)生中斷的程序也會(huì)變執(zhí)行。本文就來(lái)教大家Linux系統(tǒng)處理共享中斷的技巧。共享中斷和沒有共享的...
在Linux系統(tǒng)中中斷是可以共享的,這樣就可以有多個(gè)設(shè)備同時(shí)響應(yīng)一個(gè)中斷,從而形成一個(gè)中斷鏈表。甚至沒有產(chǎn)生中斷的程序也會(huì)變執(zhí)行。本文就來(lái)教大家Linux系統(tǒng)處理共享中斷的技巧。
共享中斷和沒有共享的區(qū)別
1、 request_irq()的參數(shù)flags必須設(shè)置SA_SHIRQ標(biāo)志。
2、對(duì)每個(gè)注冊(cè)的中斷處理程序來(lái)說(shuō),dev_id參數(shù)必須唯一。指向任一設(shè)備結(jié)構(gòu)的指針就可以滿足這一要求;通常會(huì)選擇設(shè)備結(jié)構(gòu),因?yàn)樗俏ㄒ坏,而且中斷處理程序可能?huì)用到它。不能給共享的處理程序傳遞NULL值。
3、中斷處理程序必須能夠區(qū)分它的設(shè)備是否真的產(chǎn)生了中斷。這既需要硬件的支持,也需要處理程序中有相關(guān)的處理邏輯。如果硬件不支持這一功能,那中斷處理程序肯定會(huì)束手無(wú)策,它根本沒法知道到底是與它對(duì)應(yīng)的設(shè)備發(fā)出了這個(gè)中斷,還是共享這條中斷線的其他設(shè)備發(fā)出了這個(gè)中斷。
所有共享中斷線的驅(qū)動(dòng)程序都必須滿足以上要求。只要有任何一個(gè)設(shè)備沒有按規(guī)則進(jìn)行共享,那么中斷線就無(wú)法共享了。指定SA_SHIRQ標(biāo)志以調(diào)用request_irq()時(shí),只有在以下兩種情況下才可能成功:中斷線當(dāng)前未被注冊(cè),或者在該線上的所有已注冊(cè)處理程序都指定了SA_SHIRQ。
注意:在這一點(diǎn)上2.6與以前的內(nèi)核是不同的,共享的處理程序可以混用SA_ INTERRUPT。
以上就是Linux系統(tǒng)處理共享中斷的技巧的分享了,所以一個(gè)中斷發(fā)生后,程序就會(huì)自行判斷是否作出響應(yīng),這對(duì)大部分的硬件來(lái)說(shuō)都是很容易實(shí)現(xiàn)的。
Linux是一套免費(fèi)使用和自由傳播的類Unix操作系統(tǒng)