<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于嵌入式Linux 系統的高速設備驅動(dòng)程序實(shí)現

基于嵌入式Linux 系統的高速設備驅動(dòng)程序實(shí)現

作者: 時(shí)間:2012-03-24 來(lái)源:網(wǎng)絡(luò ) 收藏

1 Linux的研究現狀

嵌入式系統已越來(lái)越廣泛應用于通信領(lǐng)域。而Linux操作系統因為其內核小、開(kāi)源以及可靈活裁剪等優(yōu)點(diǎn),在嵌人式設備中得到了廣泛的應用。下面首先介紹嵌入式linux系統的一般結構。

1.1 傳統的結構簡(jiǎn)介

Linux操作系統最基本的組成部分包括資源管理器、調度程序、介于硬件和應用軟件之間的接口、網(wǎng)絡(luò )管理器和文檔系統管理器。本文主要闡述介于硬件和應用軟件之間的接口——設備驅動(dòng)程序的實(shí)現。

對于多數字符設備而言,其功能主要是數據的傳輸。驅動(dòng)程序操作的一般流程是:當read()函數被系統調用時(shí),首先對中斷寄存器進(jìn)行配置,并開(kāi)中斷,并進(jìn)入中斷等待函數。此時(shí)系統會(huì )調用schedule()函數,進(jìn)行其他進(jìn)程的執行。一旦有中斷的產(chǎn)生,則根據中斷寄存器判斷是否為設備的讀寄存器中斷,即是否有數據到達。若是,則將該數據從寄存器所在的地址讀入,并送至相應的內存。

1.2 傳統驅動(dòng)程序結構存在的問(wèn)題

當設備的數據量足夠大時(shí),中斷將會(huì )十分的頻繁,而中斷服務(wù)程序將會(huì )被反復的調用,這會(huì )使得系統長(cháng)時(shí)間的處于核心態(tài)中,而無(wú)法相應其他進(jìn)程的請求,且極大地增加了CPU 的負擔。這在高速率、大吞吐量數據傳輸的應用中,是無(wú)法容忍的。

因此,我們不得不考慮針對現有的驅動(dòng)程序的數據傳輸程序結構進(jìn)行改進(jìn),以適應高速率的數據傳輸的需要。

2 Linux驅動(dòng)的實(shí)現

2.1 采用DMA方式的驅動(dòng)程序

首先使用DMA 的數據傳輸方式對原有的結構進(jìn)行改進(jìn)。

DMA(direct memory access)是直接存儲器訪(fǎng)問(wèn)的意思,它可以讓I/O設備上的數據直接與系統的內存進(jìn)行通信訪(fǎng)問(wèn),而不需要處理器的參與,大大降低了CPU的負荷,對于需要進(jìn)行除數據傳輸外其他一些數據處理的嵌入式處理器是很有幫助的。程序執行步驟如下:

1. 配置寄存器,指示硬件開(kāi)始傳輸數據;開(kāi)中斷,進(jìn)程進(jìn)入睡眠等待;

2. 硬件將數據寫(xiě)入DMA存儲器,完成后產(chǎn)生中斷;

3. 喚醒進(jìn)程,中斷服務(wù)程序進(jìn)行中斷的處理(如將數據傳輸到用戶(hù)態(tài)內存)。

操作流程如圖1所示。這一結構的驅動(dòng)程序,相對于不使用DMA方式而言,能夠很大降低CPU的占用率。但是,該驅動(dòng)程序結構也有個(gè)明顯的缺陷:當硬件進(jìn)行DMA傳輸時(shí),該進(jìn)程進(jìn)入了睡眠等待,只有等到中斷之后,才能喚醒進(jìn)程,這也意味著(zhù)在DMA 的過(guò)程中,我們無(wú)法對該進(jìn)程的其他線(xiàn)程做任何操作。換句話(huà)說(shuō),其他的線(xiàn)程也會(huì )被阻塞住。當數據量很大且對這些讀取的數據處理復雜度很高時(shí),很可能會(huì )造成以下的問(wèn)題:在長(cháng)時(shí)間的用戶(hù)態(tài)上數據處理期間,有新的數據到達硬件,而核心態(tài)無(wú)法及時(shí)進(jìn)行下一次的DMA讀取操作,數據因此而丟失。這將是很?chē)乐氐?。特別,如果我們使用wait_for_interrupt ()函數進(jìn)行中斷的等待,甚至會(huì )使整個(gè)系統被阻塞,這對于多線(xiàn)程編程是不可接受的。

圖1 DMA操作的驅動(dòng)流程圖


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>