Linux中斷處理過程淺析.doc

Linux中斷處理過程淺析.doc

ID:28099897

大小:125.50 KB

頁數(shù):10頁

時間:2018-12-08

Linux中斷處理過程淺析.doc_第1頁
Linux中斷處理過程淺析.doc_第2頁
Linux中斷處理過程淺析.doc_第3頁
Linux中斷處理過程淺析.doc_第4頁
Linux中斷處理過程淺析.doc_第5頁
資源描述:

《Linux中斷處理過程淺析.doc》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。

1、linux中斷響應(yīng)和處理過程:首先中斷屬于異常的一種。異常,就是可以打斷CPU正常運(yùn)行流程的一些事情,比如說外部中斷,未定義的指定,試圖修改只讀數(shù)據(jù),執(zhí)行SWI指定(software?interrupt?instructin,軟件中斷指令,比如說上層調(diào)用sys_read,sys_write就會產(chǎn)生swi)等。內(nèi)核啟動時在start_kernel函數(shù)(init/main.c)中調(diào)用trap_init?,??init_IRQ兩個函數(shù)來設(shè)置異常的處理函數(shù)。trap_init函數(shù)(arch/arm/kernel/traps.c)void_i

2、nit?trap_init(void){......memcpy((void?*)vectors,?__vectors_start,?__vectors_end?-?__vectors_start);memcpy((void?*)vectors?+?0x200,?__stubs_start,?__stubs_end?-?__stubs_start);.......}上面兩條定義的是異常向量的存放地方,即:__stubs_start~~~~~?__stubs_end之間就是異常向量.接下來?我們看異常向量之間的定義:(arch/arm

3、/kernel/entry-armv.s).equ?stubs_offset,?__vectors_start?+?0x200?-?__stubs_start????.globl?__vectors_start__vectors_start:?ARM(?swi?SYS_ERROR0?)??????//復(fù)位時.CPU交執(zhí)行這條指令?THUMB(?svc?#0?)?THUMB(?nop?)W(b)?vector_und?+?stubs_offset???//未定義異常時,CPU將執(zhí)行這條跳轉(zhuǎn)指令W(ldr)?pc,?.LCvswi?+?

4、stubs_offset???//swi異常W(b)?vector_pabt?+?stubs_offset???//指令預(yù)取止W(b)?vector_dabt?+?stubs_offset???//數(shù)據(jù)訪問中止W(b)?vector_addrexcptn?+?stubs_offset??//沒有用到W(b)?vector_irq?+?stubs_offset?????????//irq中斷W(b)?vector_fiq?+?stubs_offset?????????//fig中斷?(快速中斷).globl?__vectors_end

5、__vectors_end:各種異常的處理函數(shù)可以分為五類,分別分布在下面不同的文件中:1、arch/arm/kernel/traps.c中???處理未定義指令異常,總?cè)肟诤瘮?shù)為do_undefinstr2、arch/arm/mm/fault.c???與內(nèi)存訪問相關(guān)的異常,總?cè)肟诤瘮?shù)為do_DataAbort,?do_PretftchAbort3.?arch/arm/mm/irq.c???中斷處理函數(shù)在這個文件中定義,總?cè)肟诤瘮?shù)為asm_do_IRQ4.?arch/arm/kernel/call.s??swi異常處理??比如說:sy

6、s_read,??sys_open等.5.?沒有使用的異常除了IRQ中斷外(FIG中斷l(xiāng)inux一般不使用),所有的異常內(nèi)核都定義了細(xì)致而完備的處理函數(shù).??所以我們這里關(guān)心的也只是上面紅色部分,即:IRQ中斷.Init_IRQ函數(shù)(arch/arm/kernel/irq.c),被用來初使化中斷的處理框架,設(shè)置各種中斷的默認(rèn)處理函數(shù).Linux內(nèi)核將所有中斷統(tǒng)一編號,使用irq_desc結(jié)構(gòu)來描述中斷:每個數(shù)組項對應(yīng)一個中斷(也可能是一組中斷,它們使用共同的中斷號),里面記錄了中斷的名稱,中斷狀態(tài),中斷標(biāo)記,并提供硬件訪問函數(shù)(清除

7、,屏蔽,使能中斷),提供了這個中斷的處理函數(shù)的入口,通過它可以調(diào)用用戶注冊的中斷處理函數(shù)include/linux/irq.h{.........irq_flow_handler_t?handle_irq;???//當(dāng)前的中斷處理函數(shù)入口struct?irq_chip?*chip;???????//底層的硬件訪問..........struct?irqaction?*action;?//用戶提供的中斷處理函數(shù)鏈表unsigned?int?status;?//IRQ狀態(tài)...........const?char?*name;?????

8、//中斷名稱}?____cacheline_internodealigned_in_smp;Handle_irq是這個或者這組中斷的處理函數(shù)入口.當(dāng)中斷發(fā)生時總中斷入口函數(shù)asm_do_IRQ將根據(jù)中斷號調(diào)用相應(yīng)irq_desc數(shù)組中

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。