linux2 6 32中斷處理流程

2021-06-06 16:51:54 字數 1031 閱讀 8741

1、當發生中斷時,pc指標通過異常向量表跳轉到中斷入口函式asm_do_irq

asm_do_irq是中斷的c語言總入口函式,它在/arch/arm/kernel/irq.c中定義,宣告如下:

asmlinkage void __exception asm_do_irq(unsigned int irq, struct pt_regs *regs)

此函式中呼叫了generic_handle_irq(irq);而後呼叫到了desc->handle_irq(irq, desc);函式。

desc->hand_irq函式直接呼叫desc結構中的hand_irq成員函式,它就是irq_desc[irq].handle.irq

2、irq_desc[irq].handle.irq在中斷初始化函式(arch/arm/kernel/irq.c 的init_irq( ))中已經通過s3c24xx_init_irq進行了初始化。

以eint4-eint23為例:

void __init s3c24xx_init_irq(void)

for (irqno = irq_eint4; irqno <= irq_eint23; irqno++)

irq_desc[irq].handle.irq函式指向了handle_edge_irq函式

3、handle_edge_irq函式宣告如下:

void handle_edge_irq(unsigned int irq, struct irq_desc *desc)

此函式進行了如下的操作:

(1)清除中斷

desc->chip->ack(irq);

此函式在init_irq( )中被指向static void s3c_irqext_ack(unsigned int irqno)函式

(2)處理中斷

action_ret = handle_irq_event(irq, action);

取出action鍊錶中的成員執行action->handle

ret = action->handler(irq, action->dev_id);

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

linux2.6 中斷處理函式和申請中斷函式的變化 2009 07 29 08 46 今天練習了中斷。linux裝置驅動開發技術及應用 作者使用的是2.6.4,現在看來也很古老了,按照書上的例子,免不了很多錯。例如 裡 自己定義的中斷處理函式 irqreturn t int interrupt in...

DA9034中斷處理

clear the irq pdata ack irq schedule work pdata work return irq handled static void micco worker struct work struct work if val micco eb otgcp iover r...

ARMv8 中斷處理介面

不考慮el2和el3,irq處理分兩種情況 使用者態發生的中斷和核心態發生的中斷,相應的中斷處理介面分別為 el1 irq el0 irq 以核心態el1發生的irq為例 358 align 6 359 el1 irq 360 kernel entry 1 壓棧,儲存上下文 361 enable d...