版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
AnEmbeddedLinuxTech.ProviderinMainland基于ARM的嵌入式linux驅(qū)嵌入式linux系統(tǒng)下驅(qū)動簡述異常處理機制設計 AnEmbeddedLinuxTech.ProviderinMainland嵌入式linux驅(qū)動簡 區(qū)分系統(tǒng)調(diào)用和設備驅(qū)動 序 程這樣在應用程序看來,硬件設備只是一個設備文件,序 AnEmbeddedLinuxTech.ProviderinMainland 設備驅(qū)動程序是內(nèi)核的一部分,它主要完成以下功能把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬 數(shù)據(jù)檢測和處理設備出現(xiàn)的錯誤 AnEmbeddedLinuxTech.ProviderinMainland字符設備,塊設備和網(wǎng)絡設備的主要區(qū)別 AnEmbeddedLinuxTech.ProviderinMainland網(wǎng)絡設備是linux下特殊設備的典型,此類設備在dev下主次設備號,態(tài),搶先式 AnEmbeddedLinuxTech.ProviderinMainland NO_VERSION
charkernel_version[]=可少.最好,驅(qū)動程序的開頭能包含<linux/config.h>; AnEmbeddedLinuxTech.ProviderinMainland,如,close....,注意,不是fopen,fread,但是如何把系統(tǒng)調(diào)用和驅(qū)動程序關聯(lián)起來呢structfile_operations AnEmbeddedLinuxTech.ProviderinMainlandstructfile_operations
*,
*,
*,
*,
}
AnEmbeddedLinuxTech.ProviderinMainland這個結(jié)構(gòu)的每一個成員的名字都對應著一個系統(tǒng)調(diào)程序,然后這個數(shù)據(jù)結(jié)構(gòu)相應的函數(shù)指針,接著把控制權(quán)這是linux下設備驅(qū)動程序工作的基本原相當簡單,不是嗎 AnEmbeddedLinuxTech.ProviderinMainland一些常見的問題 AnEmbeddedLinuxTech.ProviderinMainland異常或中斷形態(tài)異常處理函數(shù)設計可重入中斷設計 AnEmbeddedLinuxTech.ProviderinMainland異?;蛑袛嗍怯脩舫绦蛑凶罨镜囊环N執(zhí)行流程或DataAbortPrefetchUndefined
。 AnEmbeddedLinuxTech.ProviderinMainland跳轉(zhuǎn)范圍硬件處理軟件處理 AnEmbeddedLinuxTech.ProviderinMainland AnEmbeddedLinuxTech.ProviderinMainland其中FIQ_Handler()可以直接從地址0x1C處開始,省下一條跳ARM的跳轉(zhuǎn)指令(B)是有范圍限制的(±32MB),但很多況下不能保證所有的異常處理函數(shù)都定位在向量表的32MB圍內(nèi),需要大于32MB長跳轉(zhuǎn),而且因為向量表空間的限制 AnEmbeddedLinuxTech.ProviderinMainland2.把目標地址直接賦給PC寄存器MOVPC,MOVPC, 是合法的,因為 可以過0x03循環(huán)右移4位而得到而MOVPC, 就 指令 AnEmbeddedLinuxTech.ProviderinMainland 器單元上的32位數(shù)據(jù)傳送給PC來實現(xiàn)跳轉(zhuǎn)。LDRPC, 器單元必須在當前指令的±4KB空間范圍內(nèi) 水線中指令預取對PC值的影響,以圖-2的情況為例:offset=addresslocation–vectoraddress–pipelineeffect=0xFFC–0x4–= AnEmbeddedLinuxTech.ProviderinMainland AnEmbeddedLinuxTech.ProviderinMainland異常分支問題的提出ARM內(nèi)核只有二個外部中斷輸入信號nFIQ和但對于一個系統(tǒng)來說,中斷源可能多達幾十個 AnEmbeddedLinuxTech.ProviderinMainland AnEmbeddedLinuxTech.ProviderinMainland AnEmbeddedLinuxTech.ProviderinMainland AnEmbeddedLinuxTech.ProviderinMainland異常發(fā)生時處理器的動作異常返回ARM編譯器對異常處理函數(shù)實現(xiàn)的擴展軟中斷處理 AnEmbeddedLinuxTech.ProviderinMainland任何一個異常發(fā)生并得到響應時,ARM核自動完注意當響應異常后,不管異常發(fā)生在ARMThumb進入ARM拷貝CPSRSPSR_<mode>設置適當?shù)腃PSR位:改變處理器狀態(tài)進入ARM AnEmbeddedLinuxTech.ProviderinMainland進入異常處理程序以后,用戶可以完全按照自己的意愿來進行程序設計,包括調(diào)用Thumb狀態(tài)的函數(shù),等等。特別注意,清中斷 AnEmbeddedLinuxTech.ProviderinMainland 寄存器的恢復、狀態(tài)寄存器的恢復以及PC指針的恢復。的恢復可以通過一條指令來實現(xiàn),下面是3個例子:MOVSpclr或SUBSpclr4或LDMFDsp!這幾條指令都是普通的數(shù)據(jù)處理指令,特殊之處就是把PC寄 CPSR的拷貝,達到恢復狀態(tài)寄存器的目的。 AnEmbeddedLinuxTech.ProviderinMainland定是正確的中斷返回地址下面,透過一個簡單指令的流水作業(yè)來詳細說 AnEmbeddedLinuxTech.ProviderinMainland3.在ARM架構(gòu)里,PC值指向當前執(zhí)行指令的地址加8處。也就是說,當執(zhí)行指令A(地址0x8000)時,PC等于指令C的地址(0x8008)。假如指令A是BL指令,則當執(zhí)行時,會把PC(=0x8008)保存到LR寄存器里面,但是接下去處理器會馬上對LR進行一個自動的調(diào)整動作:LR=LR-0x4。這樣,最終保存在LR里面的是B指令的地址,所以當從BL返回時,LR里面正同樣的調(diào)整機制在所有LR自動保存操作中都存在 AnEmbeddedLinuxTech.ProviderinMainland4.對不同異常類型的返回地址比較存的地址,所以只要直接把LR恢復給PC。如果發(fā)生的是IRQ或FIQ等指因為外部中斷請求中斷了B令的執(zhí)行,當中斷返回后,需要需要把LR減4。。 AnEmbeddedLinuxTech.ProviderinMainlandARM編譯器的函數(shù)擴IRQ_HandlerSTMFDSP!,{R0-R12,LR}BLIrqHandlerLDMFDSP!,{R0-R12,LR}SUBSPC,LR,#4
進入普通處理函數(shù),C或 AnEmbeddedLinuxTech.ProviderinMainlandARM編譯器的函數(shù)擴 且自動加入對LR進行減4的處理,符合IRQ和FIQ中斷處理的 irqvoidIRQ_Handler AnEmbeddedLinuxTech.ProviderinMainland AnEmbeddedLinuxTech.ProviderinMainland2.在C程序中調(diào)用軟件中斷需要用到編譯器的擴展功能,使用關鍵字swi來中斷函數(shù)。注意軟中斷號碼同時在函數(shù) swi(0x24)voidmy_swi這樣當調(diào)用函數(shù)my_swi的時候,就會用SWI0x24來代替普通的函數(shù)調(diào)用BLmy_swi。 AnEmbeddedLinuxTech.ProviderinMainland3.軟中斷指令的編碼格式 AnEmbeddedLinuxTech.ProviderinMainland4.需要注意的一點是當SWI指令的執(zhí)行狀態(tài)不同時,其指令地址間隔不一樣,如果進入SWI執(zhí)行前是在ARM狀態(tài)下,需要通過LR-4來獲得SWI指令地址,如果是在Thumb狀態(tài)下進入 AnEmbeddedLinuxTech.ProviderinMainland1.缺省情況下ARM中斷是不可重入的,因為一旦進入異常響應狀態(tài),ARM自動關閉中斷使能。套,顯然新的異常處理將破壞原來的中斷現(xiàn)場而導致關鍵問題如LR_irq和SPSR_irq等,這一點容易想到也容易做到;.中斷處理過程中對BL的保護 AnEmbeddedLinuxTech.ProviderinMainlandSTMFDSTMFDSP!,{R0-R3,…LDMFDSP!,{R0-R3,ADD……
AnEmbeddedLinuxTech.ProviderinMainland3.程序Foo()無法正確返回中斷是在指令流BLFooSTMFDSP{R0-R3LR}執(zhí)行過程中插入的,完成跳轉(zhuǎn)操作后,進行流水線刷新,最后LR_irq保存的是STMFD后面一條指令的地址;這樣當新中斷利用(PC=LR-4)操作返回時,正好可以繼續(xù)原來的流程執(zhí)行STMFD指令。這二次對LR_irq的操作發(fā)生了,當新中斷返回后往下執(zhí)行STMFD指令,這時候壓棧的LR已不是原來需要的ADD指令的地址,從而使子程序Foo()無法正確返回。 AnEmbeddedLinuxTech.ProviderinMainland4.這個
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度智能交通系統(tǒng)純勞務分包合同模板4篇
- 2025版高端牧場直供生鮮乳品質(zhì)保障銷售合同4篇
- 2025年度個人房屋抵押貸款信用保險合同
- 二零二五年度電梯設備安裝與質(zhì)量監(jiān)督合同4篇
- 2025年度新能源車輛采購合同風險評估3篇
- 2025年度校園綠化工程承包及維護服務合同3篇
- 2025年度廢棄礦井打井修復及資源回收合同范本3篇
- 二零二四年人力資源智能化辦公系統(tǒng)研發(fā)與推廣合同3篇
- 數(shù)據(jù)中心能效優(yōu)化技術研究-第1篇-深度研究
- 2025年度個人房產(chǎn)租賃抵押借款擔保合同3篇
- 有砟軌道施工工藝課件
- 兩辦意見八硬措施煤礦安全生產(chǎn)條例宣貫學習課件
- 40篇短文搞定高中英語3500單詞
- 人教版高中數(shù)學必修二《第九章 統(tǒng)計》同步練習及答案解析
- 兒科護理安全警示教育課件
- 三年級下冊口算天天100題
- 國家中英文名稱及代碼縮寫(三位)
- 人員密集場所消防安全培訓
- 液晶高壓芯片去保護方法
- 使用AVF血液透析患者的護理查房
- 拜太歲科儀文檔
評論
0/150
提交評論