基于MPC8313E和FPGA的雙口RAM驅(qū)動(dòng)開發(fā)
摘要 以MPC8313E芯片為平臺(tái),介紹了一個(gè)基于嵌入式Linux探作系統(tǒng)的雙口RAM設(shè)備驅(qū)動(dòng)。通過該設(shè)備驅(qū)動(dòng)搭建Linux服務(wù)器,利用緩存技術(shù)實(shí)時(shí)讀取FPGA雙口RAM數(shù)據(jù),最終實(shí)現(xiàn)將海量圖像數(shù)據(jù)高速上傳至PC端。
關(guān)鍵詞 嵌入式系統(tǒng);Linux設(shè)備驅(qū)動(dòng);雙口RAM
在眾多操作系統(tǒng)中,Linux操作系統(tǒng)以其獨(dú)有開放性和靈活性成為重要的系統(tǒng)之一,因而開發(fā)Linux設(shè)備驅(qū)動(dòng)具有重要意義。Linux設(shè)備驅(qū)動(dòng)是在Linux內(nèi)核下硬件設(shè)備和上層應(yīng)用程序的紐帶,使得應(yīng)用程序只需調(diào)用系統(tǒng)軟件的應(yīng)用程序編程接口(API)就可以完成對(duì)硬件設(shè)備的操作。作為一個(gè)橋梁,其在實(shí)現(xiàn)具體功能的過程中發(fā)揮著重要的作用,接口豐富的驅(qū)動(dòng),設(shè)備程序?qū)こ痰拈_發(fā)有著重要的意義。Linux對(duì)所有連接在系統(tǒng)上的設(shè)備都會(huì)使用一個(gè)設(shè)備驅(qū)動(dòng)程序,這個(gè)基本設(shè)備驅(qū)動(dòng)指令成為了內(nèi)核的一部分。通過使用設(shè)備驅(qū)動(dòng)程序文件,設(shè)備對(duì)系統(tǒng)來說變成了一個(gè)可以尋址、重定向并通過管道符導(dǎo)向的普通文件。
1 雙口RAM讀寫設(shè)備驅(qū)動(dòng)的開發(fā)背景
在基于MPC8313E的大容量視頻存儲(chǔ)系統(tǒng)中,系統(tǒng)需要實(shí)現(xiàn)通過千兆以太網(wǎng)接口與上位機(jī)進(jìn)行通信,按上位機(jī)發(fā)送的命令解析后送給FPGA,進(jìn)而通過FPGA發(fā)出的曝光脈沖控制高速相機(jī)MC1362工作。當(dāng)存儲(chǔ)任務(wù)完成后,F(xiàn)PGA將存儲(chǔ)陣列中的數(shù)據(jù)讀入雙口RAM并傳至MPC8313E中,Linux端服務(wù)器利用千兆以太網(wǎng)接口將數(shù)據(jù)上傳到上位機(jī)中,由上位機(jī)完成圖像還原。
在構(gòu)造大容量高速上傳通道的過程中,系統(tǒng)采用飛思卡爾MPC8313E芯片,該芯片有兩個(gè)增強(qiáng)型三速(10/100/1 000 Mbit·s-1)以太網(wǎng)控制器,支持IEEES02.3協(xié)議,同時(shí)該芯片還支持16/32位的DDR SDRAM數(shù)據(jù)接口,最高支持333 MHz的數(shù)據(jù)頻率,512 MB可尋址空間以及4個(gè)直接存儲(chǔ)器訪問(DMA)通道,可以滿足系統(tǒng)設(shè)計(jì)要求。該驅(qū)動(dòng)設(shè)備主要實(shí)現(xiàn)從FPGA雙口RAM中乒乓讀取圖像數(shù)據(jù)信息,利用掛載在MPC8313E總線上的FPGA完成數(shù)據(jù)上傳,同時(shí)也需要解析上位機(jī)命令后傳遞給FPGA。
2 Linux驅(qū)動(dòng)模塊的程序設(shè)計(jì)基礎(chǔ)
在Linux/μClinux的框架結(jié)構(gòu)中,和設(shè)備相關(guān)的處理可以分為兩個(gè)層次:文件系統(tǒng)層和設(shè)備驅(qū)動(dòng)層。設(shè)備驅(qū)動(dòng)層屏蔽具體設(shè)備細(xì)節(jié),文件系統(tǒng)層則向用戶提供一組統(tǒng)一、規(guī)范的用戶接口。這種設(shè)備管理方法可以很好地做到“設(shè)備無關(guān)性”,使Linux可以根據(jù)硬件外設(shè)的發(fā)展進(jìn)行擴(kuò)展。
Linux系統(tǒng)允許內(nèi)核以模塊的方式加載設(shè)備,這大幅提高了Linux設(shè)備結(jié)構(gòu)的多樣性,同時(shí)可以通過裁剪內(nèi)核減少系統(tǒng)不必要的開支,提高工作效率。一般情況下,Linux內(nèi)核的驅(qū)動(dòng)模塊通常只實(shí)現(xiàn)一個(gè)驅(qū)動(dòng)程序,因此它可以分類,在Linux操作系統(tǒng)中有3類主要的設(shè)備文件系統(tǒng):塊設(shè)備、字符設(shè)備和網(wǎng)絡(luò)設(shè)備。
字符設(shè)備:可以像文件一樣訪問字符設(shè)備,這樣的驅(qū)動(dòng)程序通常會(huì)實(shí)現(xiàn)如open、close、read和write系統(tǒng)調(diào)用。
塊設(shè)備:是文件系統(tǒng)的宿主。Linux允許像字符設(shè)備一樣讀取塊設(shè)備,允許一次傳輸任意數(shù)量的字節(jié)。結(jié)果塊設(shè)備與字符設(shè)備只在蔭核內(nèi)部的管理上有所區(qū)別,即在內(nèi)核/驅(qū)動(dòng)的軟件接口上有所區(qū)別。
網(wǎng)絡(luò)設(shè)備:任何網(wǎng)絡(luò)設(shè)備都是通過接口實(shí)現(xiàn)的,既可以和其他宿主交換數(shù)據(jù)設(shè)備。通常情況下,接口是一個(gè)硬件設(shè)備,但也可以像look back(回路)接口一樣是軟件工具。網(wǎng)絡(luò)設(shè)備面向網(wǎng)絡(luò)協(xié)議而不是文件系統(tǒng)層。
fpga相關(guān)文章:fpga是什么
linux相關(guān)文章:linux教程
評(píng)論