嵌入式培訓(xùn)教程-linux驅(qū)動(dòng)開(kāi)發(fā)_第1頁(yè)
嵌入式培訓(xùn)教程-linux驅(qū)動(dòng)開(kāi)發(fā)_第2頁(yè)
嵌入式培訓(xùn)教程-linux驅(qū)動(dòng)開(kāi)發(fā)_第3頁(yè)
嵌入式培訓(xùn)教程-linux驅(qū)動(dòng)開(kāi)發(fā)_第4頁(yè)
嵌入式培訓(xùn)教程-linux驅(qū)動(dòng)開(kāi)發(fā)_第5頁(yè)
已閱讀5頁(yè),還剩69頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

AnEmbeddedLinuxTech.ProviderinMainland基于ARM的嵌入式linux驅(qū)嵌入式linux系統(tǒng)下驅(qū)動(dòng)簡(jiǎn)述異常處理機(jī)制設(shè)計(jì) AnEmbeddedLinuxTech.ProviderinMainland嵌入式linux驅(qū)動(dòng)簡(jiǎn) 區(qū)分系統(tǒng)調(diào)用和設(shè)備驅(qū)動(dòng) 序 程這樣在應(yīng)用程序看來(lái),硬件設(shè)備只是一個(gè)設(shè)備文件,序 AnEmbeddedLinuxTech.ProviderinMainland 設(shè)備驅(qū)動(dòng)程序是內(nèi)核的一部分,它主要完成以下功能把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬 數(shù)據(jù)檢測(cè)和處理設(shè)備出現(xiàn)的錯(cuò)誤 AnEmbeddedLinuxTech.ProviderinMainland字符設(shè)備,塊設(shè)備和網(wǎng)絡(luò)設(shè)備的主要區(qū)別 AnEmbeddedLinuxTech.ProviderinMainland網(wǎng)絡(luò)設(shè)備是linux下特殊設(shè)備的典型,此類設(shè)備在dev下主次設(shè)備號(hào),態(tài),搶先式 AnEmbeddedLinuxTech.ProviderinMainland NO_VERSION

charkernel_version[]=可少.最好,驅(qū)動(dòng)程序的開(kāi)頭能包含<linux/config.h>; AnEmbeddedLinuxTech.ProviderinMainland,如,close....,注意,不是fopen,fread,但是如何把系統(tǒng)調(diào)用和驅(qū)動(dòng)程序關(guān)聯(lián)起來(lái)呢structfile_operations AnEmbeddedLinuxTech.ProviderinMainlandstructfile_operations

*,

*,

*,

*,

}

AnEmbeddedLinuxTech.ProviderinMainland這個(gè)結(jié)構(gòu)的每一個(gè)成員的名字都對(duì)應(yīng)著一個(gè)系統(tǒng)調(diào)程序,然后這個(gè)數(shù)據(jù)結(jié)構(gòu)相應(yīng)的函數(shù)指針,接著把控制權(quán)這是linux下設(shè)備驅(qū)動(dòng)程序工作的基本原相當(dāng)簡(jiǎn)單,不是嗎 AnEmbeddedLinuxTech.ProviderinMainland一些常見(jiàn)的問(wèn)題 AnEmbeddedLinuxTech.ProviderinMainland異?;蛑袛嘈螒B(tài)異常處理函數(shù)設(shè)計(jì)可重入中斷設(shè)計(jì) AnEmbeddedLinuxTech.ProviderinMainland異?;蛑袛嗍怯脩舫绦蛑凶罨镜囊环N執(zhí)行流程或DataAbortPrefetchUndefined

。 AnEmbeddedLinuxTech.ProviderinMainland跳轉(zhuǎn)范圍硬件處理軟件處理 AnEmbeddedLinuxTech.ProviderinMainland AnEmbeddedLinuxTech.ProviderinMainland其中FIQ_Handler()可以直接從地址0x1C處開(kāi)始,省下一條跳ARM的跳轉(zhuǎn)指令(B)是有范圍限制的(±32MB),但很多況下不能保證所有的異常處理函數(shù)都定位在向量表的32MB圍內(nèi),需要大于32MB長(zhǎng)跳轉(zhuǎn),而且因?yàn)橄蛄勘砜臻g的限制 AnEmbeddedLinuxTech.ProviderinMainland2.把目標(biāo)地址直接賦給PC寄存器MOVPC,MOVPC, 是合法的,因?yàn)?可以過(guò)0x03循環(huán)右移4位而得到而MOVPC, 就 指令 AnEmbeddedLinuxTech.ProviderinMainland 器單元上的32位數(shù)據(jù)傳送給PC來(lái)實(shí)現(xiàn)跳轉(zhuǎn)。LDRPC, 器單元必須在當(dāng)前指令的±4KB空間范圍內(nèi) 水線中指令預(yù)取對(duì)PC值的影響,以圖-2的情況為例:offset=addresslocation–vectoraddress–pipelineeffect=0xFFC–0x4–= AnEmbeddedLinuxTech.ProviderinMainland AnEmbeddedLinuxTech.ProviderinMainland異常分支問(wèn)題的提出ARM內(nèi)核只有二個(gè)外部中斷輸入信號(hào)nFIQ和但對(duì)于一個(gè)系統(tǒng)來(lái)說(shuō),中斷源可能多達(dá)幾十個(gè) AnEmbeddedLinuxTech.ProviderinMainland AnEmbeddedLinuxTech.ProviderinMainland AnEmbeddedLinuxTech.ProviderinMainland AnEmbeddedLinuxTech.ProviderinMainland異常發(fā)生時(shí)處理器的動(dòng)作異常返回ARM編譯器對(duì)異常處理函數(shù)實(shí)現(xiàn)的擴(kuò)展軟中斷處理 AnEmbeddedLinuxTech.ProviderinMainland任何一個(gè)異常發(fā)生并得到響應(yīng)時(shí),ARM核自動(dòng)完注意當(dāng)響應(yīng)異常后,不管異常發(fā)生在ARMThumb進(jìn)入ARM拷貝CPSRSPSR_<mode>設(shè)置適當(dāng)?shù)腃PSR位:改變處理器狀態(tài)進(jìn)入ARM AnEmbeddedLinuxTech.ProviderinMainland進(jìn)入異常處理程序以后,用戶可以完全按照自己的意愿來(lái)進(jìn)行程序設(shè)計(jì),包括調(diào)用Thumb狀態(tài)的函數(shù),等等。特別注意,清中斷 AnEmbeddedLinuxTech.ProviderinMainland 寄存器的恢復(fù)、狀態(tài)寄存器的恢復(fù)以及PC指針的恢復(fù)。的恢復(fù)可以通過(guò)一條指令來(lái)實(shí)現(xiàn),下面是3個(gè)例子:MOVSpclr或SUBSpclr4或LDMFDsp!這幾條指令都是普通的數(shù)據(jù)處理指令,特殊之處就是把PC寄 CPSR的拷貝,達(dá)到恢復(fù)狀態(tài)寄存器的目的。 AnEmbeddedLinuxTech.ProviderinMainland定是正確的中斷返回地址下面,透過(guò)一個(gè)簡(jiǎn)單指令的流水作業(yè)來(lái)詳細(xì)說(shuō) AnEmbeddedLinuxTech.ProviderinMainland3.在ARM架構(gòu)里,PC值指向當(dāng)前執(zhí)行指令的地址加8處。也就是說(shuō),當(dāng)執(zhí)行指令A(yù)(地址0x8000)時(shí),PC等于指令C的地址(0x8008)。假如指令A(yù)是BL指令,則當(dāng)執(zhí)行時(shí),會(huì)把PC(=0x8008)保存到LR寄存器里面,但是接下去處理器會(huì)馬上對(duì)LR進(jìn)行一個(gè)自動(dòng)的調(diào)整動(dòng)作:LR=LR-0x4。這樣,最終保存在LR里面的是B指令的地址,所以當(dāng)從BL返回時(shí),LR里面正同樣的調(diào)整機(jī)制在所有LR自動(dòng)保存操作中都存在 AnEmbeddedLinuxTech.ProviderinMainland4.對(duì)不同異常類型的返回地址比較存的地址,所以只要直接把LR恢復(fù)給PC。如果發(fā)生的是IRQ或FIQ等指因?yàn)橥獠恐袛嗾?qǐng)求中斷了B令的執(zhí)行,當(dāng)中斷返回后,需要需要把LR減4。。 AnEmbeddedLinuxTech.ProviderinMainlandARM編譯器的函數(shù)擴(kuò)IRQ_HandlerSTMFDSP!,{R0-R12,LR}BLIrqHandlerLDMFDSP!,{R0-R12,LR}SUBSPC,LR,#4

進(jìn)入普通處理函數(shù),C或 AnEmbeddedLinuxTech.ProviderinMainlandARM編譯器的函數(shù)擴(kuò) 且自動(dòng)加入對(duì)LR進(jìn)行減4的處理,符合IRQ和FIQ中斷處理的 irqvoidIRQ_Handler AnEmbeddedLinuxTech.ProviderinMainland AnEmbeddedLinuxTech.ProviderinMainland2.在C程序中調(diào)用軟件中斷需要用到編譯器的擴(kuò)展功能,使用關(guān)鍵字swi來(lái)中斷函數(shù)。注意軟中斷號(hào)碼同時(shí)在函數(shù) swi(0x24)voidmy_swi這樣當(dāng)調(diào)用函數(shù)my_swi的時(shí)候,就會(huì)用SWI0x24來(lái)代替普通的函數(shù)調(diào)用BLmy_swi。 AnEmbeddedLinuxTech.ProviderinMainland3.軟中斷指令的編碼格式 AnEmbeddedLinuxTech.ProviderinMainland4.需要注意的一點(diǎn)是當(dāng)SWI指令的執(zhí)行狀態(tài)不同時(shí),其指令地址間隔不一樣,如果進(jìn)入SWI執(zhí)行前是在ARM狀態(tài)下,需要通過(guò)LR-4來(lái)獲得SWI指令地址,如果是在Thumb狀態(tài)下進(jìn)入 AnEmbeddedLinuxTech.ProviderinMainland1.缺省情況下ARM中斷是不可重入的,因?yàn)橐坏┻M(jìn)入異常響應(yīng)狀態(tài),ARM自動(dòng)關(guān)閉中斷使能。套,顯然新的異常處理將破壞原來(lái)的中斷現(xiàn)場(chǎng)而導(dǎo)致關(guān)鍵問(wèn)題如LR_irq和SPSR_irq等,這一點(diǎn)容易想到也容易做到;.中斷處理過(guò)程中對(duì)BL的保護(hù) AnEmbeddedLinuxTech.ProviderinMainlandSTMFDSTMFDSP!,{R0-R3,…LDMFDSP!,{R0-R3,ADD……

AnEmbeddedLinuxTech.ProviderinMainland3.程序Foo()無(wú)法正確返回中斷是在指令流BLFooSTMFDSP{R0-R3LR}執(zhí)行過(guò)程中插入的,完成跳轉(zhuǎn)操作后,進(jìn)行流水線刷新,最后LR_irq保存的是STMFD后面一條指令的地址;這樣當(dāng)新中斷利用(PC=LR-4)操作返回時(shí),正好可以繼續(xù)原來(lái)的流程執(zhí)行STMFD指令。這二次對(duì)LR_irq的操作發(fā)生了,當(dāng)新中斷返回后往下執(zhí)行STMFD指令,這時(shí)候壓棧的LR已不是原來(lái)需要的ADD指令的地址,從而使子程序Foo()無(wú)法正確返回。 AnEmbeddedLinuxTech.ProviderinMainland4.這個(gè)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論