lk中中斷的處理flow

2021-07-22 05:17:39 字數 993 閱讀 9456

在li的crt0.s 中會定義中斷的入口。例如如果是irq中斷會呼叫arm_irq

_start:

breset

barm_undefined

barm_syscall

barm_prefetch_abort

barm_data_abort

barm_reserved

barm_irq

barm_fiq

在exception.s 中可見會呼叫platform_irq

function(arm_irq)

/* *** only deals with interrupting supervisor mode */

/* call into higher level code */

movr0, sp /* iframe */

blplatform_irq

cmp     r0, #0

blne    thread_preempt

在interrupts.c 中可以看platform_irq的實現

enum handler_return platform_irq(struct arm_iframe *frame)

首先讀取暫存器得到當前的irq number vector

然後看看init_handler_table中這個vector 中是否有對應的callbac

如果有的話,就呼叫這個callback

當platform_irq 返回是會根據當前的返回值來決定是否要進行

thread 切換

而handler中的callback 是呼叫register_int_handler 來新增的

void register_int_handler(unsigned int vector, int_handler handler, void *arg)

例如timer的中斷處理函式就是platform_tick

void platform_init_timer(void)

WinCE OAL中的中斷處理

這張圖想必很多人都見過,主要這張圖太經典了,所以還是貼出來嘮叨幾句,硬體中斷產生以後,會導致核心isr的執行,然後由oal中的isr來處理相應的中斷,最後導致相對應的ist執行完成真正的中斷處理。所以在wince中,中斷處理由isr和ist共同完成。isr主要完成中斷源的確定,遮蔽該中斷並返回給核心...

lk中的dprintf實現

在lk中我們一般通過dprintf來列印log,如下所示 dprintf info,0x x t tls i 其中info表示log的級別,lk中總共有三種級別 debug levels define critical 0 define always 0 define info 1 define s...

linux kernel中的中斷處理流程

2 linux kernel arm64的中斷函式處理流程 1 linux kernel arm32的中斷函式處理流程 我們從irq handler巨集函式看起 1 irq handler巨集 注意config multi irq handler巨集表示 允許每台機器在執行時指定它自己的irq處理程...