linux2.6 中斷處理函式和申請中斷函式的變化
2009-07-29 08:46
今天練習了中斷。
linux裝置驅動開發技術及應用 ,作者使用的是2.6.4,現在看來也很古老了,
按照書上的例子,免不了很多錯。
例如**裡
自己定義的中斷處理函式
irqreturn_t int_interrupt(int irq,void * dev_id,struct pt_regs *regs);
註冊中斷函式
request_irq(print_irq,int_interrupt,sa_interrupt,int_dev_name,null);
編譯提示
警告:『deprecated_irq_flag』 已過時(於 include/linux/interrupt.h:64 宣告)
警告:傳遞引數 2 (屬於 『request_irq』)時在不相容的指標型別間轉換
既然如此,那就到頭檔案裡看看request_irq,
extern int __must_check request_irq(unsigned int, irq_handler_t handler,
unsigned long, const char *, void *);
沒發現什麼,再看看
typedef irqreturn_t (*irq_handler_t)(int, void *);
原來中斷處理函式現在只有2個引數了,第三個引數struct pt_regs *regs儲存的是中斷發生時暫存器的值,
但是通常沒有用,最後還是被取消了。
修改irqreturn_t int_interrupt(int irq,void * dev_id,struct pt_regs *regs);
為irqreturn_t int_interrupt(int irq,void * dev_id);
之後還是警告
原來標頭檔案裡沒有sa_interrupt了,一般使用irqf_shared 了。
request_irq(print_irq,int_interrupt,irqf_shared,int_dev_name,null);
這樣就可以了。網上看到很多人編譯驅動也是這個問題,我想以後我做驅動移植的時候就可以直接改**解決問題。
linux核心給源**,每個版本之間的變化,就像你寫的**,進行了修改,就需要修改其他的相關**來配合變化。
既是折磨又是享受。
關於Linux2 6中斷的一些記錄
1.中斷向量和中斷號 中斷線 中斷向量是從cpu角度規定的中斷訊號劃分 中斷號是pic引腳號 2.幾種異常 故障,陷阱,中止 3.中斷描述符表idt 異常與中斷發生時,都需要到idt中查詢相關資訊,以找到對應的處理程式以及其他動作。需要注意的是,保護模式下發生許可權提公升時,中斷穿越的是中斷門,而異...
Linux 2 6 核心閱讀筆記 中斷和異常
2014年7月24日 中斷門 陷阱門及中斷門 中斷是可以禁止的,可以通過告訴pic停止對某個中斷的發布。被禁止的中斷是不會丟失的,在解除禁止後又會傳送到cpu上。禁止中斷和遮蔽 mask 中斷的不同之處是遮蔽是忽略掉某個中斷,而禁止相當於延遲傳送。intel提供了三種型別的中斷描述符 任務門 中斷門...
linux2 6 32中斷處理流程
1 當發生中斷時,pc指標通過異常向量表跳轉到中斷入口函式asm do irq asm do irq是中斷的c語言總入口函式,它在 arch arm kernel irq.c中定義,宣告如下 asmlinkage void exception asm do irq unsigned int irq,...