每日閱讀11之核心設計與實現 註冊中斷處理程式

2021-06-13 14:39:45 字數 960 閱讀 7141

好久沒有寫部落格了,已經有點迷失自我,忘了自己最重要的事情,罪過罪過。。。

中斷處理程式是管理硬體的驅動程式的組成部分。

每一裝置都有相關的驅動程式,如果裝置使用中斷的方式與cpu通訊,那麼驅動程式就會註冊乙個中斷處理程式.(1個?)

驅動程式通過函式request_irq()註冊乙個中斷處理程式,並啟用相應的中斷線(?什麼東東,從下文看來像是多個中斷處理程式共用的乙個中斷號)。。。定義在

request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,

const char *name, void *dev)

其中第乙個引數irq為要分配的中斷號,對於某些裝置,如傳統pc上的系統時鐘或鍵盤等裝置是提前確定的。。而對於其它裝置要麼事動態探測獲取,要麼是程式設計動態確定。。

第二個引數handler是乙個函式指標,typedef irqreturn_t (*irq_handler_t)(int, void *);接受二個引數,int和void *,並返回irqreturn_t型別引數。

第三個引數可以為0,也可以是一些標誌的位掩碼。

irqf_disabled禁止所有其它中斷,用於希望快速執行的輕量級中斷。。。

irqf_sample_random如果設定了這個標誌,說明這個中斷的中斷間隔時間不是固定的,也就是說是個隨機數,可為核心熵池做貢獻,成為熵源

irqf_shared表示可以在多個中斷服務程式中共享中斷線。。

第四個引數是描述中斷裝置的ascii文字

第五個引數用於區別共享中斷線的眾多裝置驅動程式的具體的那個。。作為乙個標誌。。

如後面的登出中斷處理程式的函式原型是,extern void free_irq(unsigned int, void *dev);

request_irq函式可能會睡眠,因此不允許在中斷上下文或任何不允許阻塞的**中使用。。

這一塊,over!!!

《Linux核心設計與實現》閱讀有感

最近在研究 linux核心設計與實現 這本書,雖然大四時候上linux核心的課用的就是這本教材,但是當時也只是淺嘗輒止,只學得一點皮毛,所以想再回顧一下。在閱讀第二遍的過程中,發現好多有趣的知識點之前都遺漏了,就比如說 核心資料結構 這章,講的是核心中包括鍊錶,棧,佇列,紅黑樹等資料結構。昨天睡前把...

LINUX核心設計與實現之除錯

核心排程主要靠經驗和對整個作業系統的把握.18.1 排程前需要準備什麼 重現bug.18.2 核心中的 bug 引發核心中的bug 的原因如下 同步 定時限制 競爭條件.18.3 printk 在終端沒有初始化之前,printk 函式是不可用的 比如在 setup arch 函式之前 不過可以用 p...

linux核心hook技術之指令覆蓋與注入

說到hook,傳統意義上,大家都會覺得跟注入和劫持掛鉤。在linux核心中,也可以通過指令覆蓋和注入的方式進行hook,來完成自己的業務邏輯,實現自己的功能需求。一部分人喜歡稱這種hook技術為inline hook。具體hook細節在以下編寫的驅動例子程式中給出了,例子中標註了詳細的注釋,大家可對...