在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處理程...