a一级爱做片免费观看欧美,久久国产一区二区,日本一二三区免费,久草视频手机在线观看

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > 基于嵌入式Linux 系統的高速設備驅動程序實現

基于嵌入式Linux 系統的高速設備驅動程序實現

作者: 時間:2012-03-24 來源:網絡 收藏

1 Linux的研究現狀

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

1.1 傳統的結構簡介

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

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

1.2 傳統驅動程序結構存在的問題

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

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

2 Linux驅動的實現

2.1 采用DMA方式的驅動程序

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

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

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

2. 硬件將數據寫入DMA存儲器,完成后產生中斷;

3. 喚醒進程,中斷服務程序進行中斷的處理(如將數據傳輸到用戶態內存)。

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

圖1 DMA操作的驅動流程圖


上一頁 1 2 下一頁

評論


相關推薦

技術專區

關閉