arm_linux中斷處理

arm_linux中斷處理

ID:14099687

大?。?3.00 KB

頁(yè)數(shù):16頁(yè)

時(shí)間:2018-07-26

arm_linux中斷處理_第1頁(yè)
arm_linux中斷處理_第2頁(yè)
arm_linux中斷處理_第3頁(yè)
arm_linux中斷處理_第4頁(yè)
arm_linux中斷處理_第5頁(yè)
資源描述:

《arm_linux中斷處理》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。

1、arm_linux中斷處理一、中斷注冊(cè)方法在linux內(nèi)核中用于申請(qǐng)中斷的函數(shù)是request_irq(),函數(shù)原型在Kernel/irq/manage.c中定義:intrequest_irq(unsignedintirq,irq_handler_thandler,unsignedlongirqflags,constchar*devname,void*dev_id)irq是要申請(qǐng)的硬件中斷號(hào)。handler是向系統(tǒng)注冊(cè)的中斷處理函數(shù),是一個(gè)回調(diào)函數(shù),中斷發(fā)生時(shí),系統(tǒng)調(diào)用這個(gè)函數(shù),dev_id參數(shù)將被傳遞給它

2、。irqflags是中斷處理的屬性,若設(shè)置了IRQF_DISABLED(老版本中的SA_INTERRUPT,本版zhon已經(jīng)不支持了),則表示中斷處理程序是快速處理程序,快速處理程序被調(diào)用時(shí)屏蔽所有中斷,慢速處理程序不屏蔽;若設(shè)置了IRQF_SHARED(老版本中的SA_SHIRQ),則表示多個(gè)設(shè)備共享中斷,若設(shè)置了IRQF_SAMPLE_RANDOM(老版本中的SA_SAMPLE_RANDOM),表示對(duì)系統(tǒng)熵有貢獻(xiàn),對(duì)系統(tǒng)獲取隨機(jī)數(shù)有好處。(這幾個(gè)flag是可以通過(guò)或的方式同時(shí)使用的)dev_id在中斷共

3、享時(shí)會(huì)用到,一般設(shè)置為這個(gè)設(shè)備的設(shè)備結(jié)構(gòu)體或者NULL。devname設(shè)置中斷名稱(chēng),在cat/proc/interrupts中可以看到此名稱(chēng)。request_irq()返回0表示成功,返回-INVAL表示中斷號(hào)無(wú)效或處理函數(shù)指針為NULL,返回-EBUSY表示中斷已經(jīng)被占用且不能共享。關(guān)于中斷注冊(cè)的例子,大家可在內(nèi)核中搜索下request_irq。在編寫(xiě)驅(qū)動(dòng)的過(guò)程中,比較容易產(chǎn)生疑惑的地方是:1、中斷向量表在什么位置?是如何建立的?2、從中斷開(kāi)始,系統(tǒng)是怎樣執(zhí)行到我自己注冊(cè)的函數(shù)的?3、中斷號(hào)是如何確定的?

4、對(duì)于硬件上有子中斷的中斷號(hào)如何確定?4、中斷共享是怎么回事,dev_id的作用是?本文以2.6.26內(nèi)核和S3C2410處理器為例,為大家講解這幾個(gè)問(wèn)題。二、異常向量表的建立在ARMV4及V4T以后的大部分處理器中,中斷向量表的位置可以有兩個(gè)位置:一個(gè)是0,另一個(gè)是0xffff0000??梢酝ㄟ^(guò)CP15協(xié)處理器c1寄存器中V位(bit[13])控制。V和中斷向量表的對(duì)應(yīng)關(guān)系如下:V=0~0x00000000~0x0000001CV=1~0xffff0000~0xffff001Carch/arm/mm/pro

5、c-arm920.S中.section".text.init",#alloc,#execinstr__arm920_setup:……orrr0,r0,#0x2100@..1....1..11...1//bit13=1中斷向量表基址為0xFFFF0000。R0的值將被付給CP15的C1.在linux中,向量表建立的函數(shù)為:init/main.c->start_kernel()->trap_init()void__inittrap_init(void){unsignedlongvectors=CONFIG_VE

6、CTORS_BASE;……memcpy((void*)vectors,__vectors_start,__vectors_end-__vectors_start);memcpy((void*)vectors+0x200,__stubs_start,__stubs_end-__stubs_start);....}在2.6.26內(nèi)核中CONFIG_VECTORS_BASE最初是在各個(gè)平臺(tái)的配置文件中設(shè)定的,如:arch/arm/configs/s3c2410_defconfig中CONFIG_VECTORS_B

7、ASE=0xffff0000__vectors_end至__vectors_start之間為異常向量表。位于arch/arm/kernel/entry-armv.S.globl__vectors_start__vectors_start:swiSYS_ERROR0:bvector_und+stubs_offset//復(fù)位異常:ldrpc,.LCvswi+stubs_offset//未定義指令異常:bvector_pabt+stubs_offset//軟件中斷異常:bvector_dabt+stubs_off

8、set//數(shù)據(jù)異常:bvector_addrexcptn+stubs_offset//保留:bvector_irq+stubs_offset//普通中斷異常:bvector_fiq+stubs_offset//快速中斷異常:.globl__vectors_end:__vectors_end:__stubs_end至__stubs_start之間是異常處理的位置。也位于文件arch/arm/kernel/entry

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

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

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