<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于嵌入式Linux 系統(tǒng)的高速設(shè)備驅(qū)動(dòng)程序?qū)崿F(xiàn)

          基于嵌入式Linux 系統(tǒng)的高速設(shè)備驅(qū)動(dòng)程序?qū)崿F(xiàn)

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

          1 Linux的研究現(xiàn)狀

          嵌入式系統(tǒng)已越來越廣泛應(yīng)用于通信領(lǐng)域。而Linux操作系統(tǒng)因?yàn)槠鋬?nèi)核小、開源以及可靈活裁剪等優(yōu)點(diǎn),在嵌人式設(shè)備中得到了廣泛的應(yīng)用。下面首先介紹嵌入式linux系統(tǒng)的一般結(jié)構(gòu)。

          1.1 傳統(tǒng)的結(jié)構(gòu)簡(jiǎn)介

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

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

          1.2 傳統(tǒng)驅(qū)動(dòng)程序結(jié)構(gòu)存在的問題

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

          因此,我們不得不考慮針對(duì)現(xiàn)有的驅(qū)動(dòng)程序的數(shù)據(jù)傳輸程序結(jié)構(gòu)進(jìn)行改進(jìn),以適應(yīng)高速率的數(shù)據(jù)傳輸?shù)男枰?/P>

          2 Linux驅(qū)動(dòng)的實(shí)現(xiàn)

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

          首先使用DMA 的數(shù)據(jù)傳輸方式對(duì)原有的結(jié)構(gòu)進(jìn)行改進(jìn)。

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

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

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

          3. 喚醒進(jìn)程,中斷服務(wù)程序進(jìn)行中斷的處理(如將數(shù)據(jù)傳輸?shù)接脩魬B(tài)內(nèi)存)。

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

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


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

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();