Linux2 6 中斷處理函式和申請中斷函式的變化

2021-09-30 08:01:20 字數 1214 閱讀 9685

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,...