新聞中心

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

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

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

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

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

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

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

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

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

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

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

2 Linux驅(qū)動的實現(xiàn)

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

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

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

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

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

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

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

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


上一頁 1 2 下一頁

評論


相關(guān)推薦

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

關(guān)閉