裸機中斷: 1、有統一的入口,去中斷向量表找對應中斷
2、事先要註冊中斷處理程式
3、根據中斷源的編號呼叫中斷處理程式
linux系統中:1、也同樣有統一入口,在irq_svc中 :①拿到產生中斷源的編號
②根據中斷號找到相應的irq_desc
③根據irp_desc找到事先註冊好的中斷處理程式去執行
與裸機不同就是linux系統更複雜一些,套入比裸機多的結構去查詢處理程式。
linux中斷處理程式設計: 1、註冊中斷:
使用request_irq函式用於註冊中斷
int request_irq(unsigned int irq,void (*handler)(int,void*,struct pt_regs *),
unsigned long flags,
const char *devname,
void *dev_id)
返回0表示成功,或者返回乙個錯誤碼
unsigned int irq:中斷號
void (*handler)(int,void*,struct pt_regs *)中斷處理函式
unsigned long flags:中斷管理有關的選項
const char *devname:裝置名
void *dev_id:共享中斷時使用
2、中斷處理
第一:檢查裝置是否產生了中斷
第二:清除中斷產生標誌
第三:相應的硬體操作
注意:①中斷處理中不可以使用引起阻塞的函式
②中斷處理中不可以使用引起排程的函式
3、註冊處理
Linux中斷處理
裝置管理過程中,中斷號的申請是乙個非常重要的操作。當裝置發出中斷之後,硬體裝置根據intel cpu的通用處理過程,跳轉到了該中斷號對應的中斷相應函式處。在linux作業系統中,必定要跳到do irq函式處。在do irq 函式中,進行了一部分公共的中斷響應處理之後,根據已經入棧了的中斷號查詢裝置中...
Linux中斷和中斷處理
眾所周知,處理器的速度跟外圍的硬體裝置的速度往往不在乙個數量級上,因此,如果核心採取讓處理器傳送乙個請求,然後專門等待回應的辦法,顯然差強人意。既然硬體處理的這麼慢,那麼核心就應該在這期間去處理其他事務,等待硬體真正完成了請求的操作後,再回過頭來對它進行處理。輪詢 polling 可能會是一種解決辦...
Linux中斷處理之共享中斷處理初探
在看lkd 第二版 第六章 中斷和中斷處理程式 的時候,剛開始接觸到中斷線號和共享中斷線的時候半天愣是沒有想明白,原來理解的中斷和中斷和中斷處理程式就是通過中斷線號來進行關聯,硬體發生中斷,然後通過中斷線號查詢對應的中斷處理程式,最後中斷處理程式返回,此次中斷則處理完畢,沒想到冒出來個共享中斷線,呵...