基于嵌入式技術(shù)視頻考勤機(jī)設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
基于嵌入式技術(shù)視頻考勤機(jī)設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
基于嵌入式技術(shù)視頻考勤機(jī)設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
基于嵌入式技術(shù)視頻考勤機(jī)設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
基于嵌入式技術(shù)視頻考勤機(jī)設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩70頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

要隨著計(jì)算機(jī)技術(shù)、通信技術(shù)的飛速發(fā)展,微型化和專業(yè)化成為計(jì)算機(jī)發(fā)展的新趨勢(shì)。近年來(lái),人們對(duì)于嵌入式產(chǎn)品需求不斷增長(zhǎng),嵌入式設(shè)備在應(yīng)用上越來(lái)越廣泛,嵌入式技術(shù)在各個(gè)領(lǐng)域的普及程度不斷提高。因此基于源碼開(kāi)放的Linux嵌入式系統(tǒng)的研究與構(gòu)建具有廣泛意義。基于嵌入式技術(shù)的視頻考勤機(jī)成功地杜絕了傳統(tǒng)考勤中的代打卡現(xiàn)象,大大提升了考勤制度的可信性和公平性。視頻考勤機(jī)是基于三星S3C2410微處理芯片開(kāi)發(fā)板,內(nèi)嵌先進(jìn)的Linux嵌入式操作系統(tǒng),實(shí)現(xiàn)員工在刷卡時(shí)自動(dòng)拍攝持卡人照片,并顯示員工名稱、員工編號(hào)、員工工作的部門(mén),注冊(cè)照片等檔案信息。同時(shí)將卡號(hào)、刷卡時(shí)間、刷卡照片等信息保存到NandFlash或SD卡中。本文首先研究了基于Linux嵌入式系統(tǒng)平臺(tái)的構(gòu)建,介紹了交叉編譯環(huán)境的建立,分析了引導(dǎo)程序U-Boot啟動(dòng)過(guò)程,深入研究了如何進(jìn)行Linux內(nèi)核的修改、剪裁,設(shè)備驅(qū)動(dòng)的設(shè)計(jì),讀卡器的串口通信實(shí)現(xiàn)以及文件系統(tǒng)建立過(guò)程。最后實(shí)現(xiàn)了視頻考勤機(jī)的圖形界面應(yīng)用程序。關(guān)鍵詞:嵌入式;Linux;視頻考勤機(jī)AbstractAbstractWiththerapiddevelopmentofcommunicationtechnologyandcomputertechnology,Miniaturizationandprofessionbecomeanewtrendforcomputerdevelpment.AstheprogressiveofembeddedsystemtechnologyanddemandofcustomersforEmbeddedproducts,theyhasbeenwidlyappliedinmanyareas.OpensourceLinuxoperatingsystemhasalotofadvantages.IthasbeenanagreementintheindustrythatLinuxisthetrendinembeddedsystemdesign.SotheresearchanddevelopmentembeddedLinuxsoftwareandhardwaresystemareuseful.TheAttendancevideomachine,whichismentionedinthispaper,successfullyputanendtotheAttendanceFraudphenomenon,andgreatlyenhancedthecredibilityandfairnessatattendancemanagementsystem.Attendancevideomachine,whichbasedonEmbeddedS3C2410System,isuseofadvancedembeddedlinuxoperatingsystemAslongascardholdersswiphiscard,Attendancevideomachinecanautomaticallytakehispicture,displayofhisname,empoyleeID,swipingcardtimeandregisterphoto,whichwillbesavedinNandFlashorSD.UsersareabletodownloaddatabySDcard.ThepapergivesdetailedinformationaboutbuildingEmbeddedSystemPlatformembeddedLinuxandtheU-bootStart-upprocess.ItisanalyzeddeeplyhowtomodifyandtailortheLinuxkernel,modifydevicedriver,realizetheprocessofbuildingandbuildthefilesystemindetail.ThelastitindicatedasolutiontotheImplementationoftheGraphicaluserinterfaceofAttendancevideomachinebasedonEmbeddedS3C2410System.Keywords:Embedded;Linux;Attendancevideomachine沈陽(yáng)理工大學(xué)碩士學(xué)位論文原創(chuàng)性聲明本人鄭重聲明:本論文的所有工作,是在導(dǎo)師的指導(dǎo)下,由作者本人獨(dú)立完成的。有關(guān)觀點(diǎn)、方法、數(shù)據(jù)和文獻(xiàn)的引用已在文中指出,并與參考文獻(xiàn)相對(duì)應(yīng)。除文中已注明引用的內(nèi)容外,本論文不包含任何其他個(gè)人或集體已經(jīng)公開(kāi)發(fā)表的作品成果。對(duì)本文的研究做出重要貢獻(xiàn)的個(gè)人和集體,均己在文中以明確方式標(biāo)明。本人完全意識(shí)到本聲明的法律結(jié)果由本人承擔(dān)。作者(簽字):日

日學(xué)位論文版權(quán)使用授權(quán)書(shū)本學(xué)位論文作者完全了解沈陽(yáng)理工大學(xué)有關(guān)保留、使用學(xué)位論文的規(guī)定,即:沈陽(yáng)理工大學(xué)有權(quán)保留并向國(guó)家有關(guān)部門(mén)或機(jī)構(gòu)送交學(xué)位論文的復(fù)印件和磁盤(pán),允許論文被查閱和借閱。本人授權(quán)沈陽(yáng)理工大學(xué)可以將學(xué)位論文的全部或部分內(nèi)容編入有關(guān)數(shù)據(jù)庫(kù)進(jìn)行檢索,可以采用影印、縮印或其它復(fù)制手段保存、匯編學(xué)位論文。(保密的學(xué)位論文在解密后適用本授權(quán)書(shū))學(xué)位論文作者簽名:

指導(dǎo)教師簽名:日

期:

期:第1章第1章

緒論緒論1.1課題研究的背景當(dāng)今社會(huì),正規(guī)、科學(xué)的現(xiàn)代企業(yè)管理制度是創(chuàng)造一個(gè)高效益、高速發(fā)展的優(yōu)秀企業(yè)的必要條件。眾所周知,人事考勤制度是企事業(yè)單位管理制度的重要組成部分,是企事業(yè)單位正常工作和生產(chǎn)的前提。員工準(zhǔn)時(shí)出勤和公平合理的考勤管理制度不僅影響到公司的形象、員工的士氣,而且也影響公司員工的工作效率、公司的經(jīng)濟(jì)效益。隨著企事業(yè)單位規(guī)模的不斷擴(kuò)大,傳統(tǒng)的手工式記錄考勤方式,工作效率低。隨著越來(lái)越多的電子設(shè)備不斷的進(jìn)入我們的日常生活,20世紀(jì)70年代后期,我國(guó)出現(xiàn)了打卡式的考勤機(jī),它大大提高了考勤機(jī)制的管理效率。但是,實(shí)踐證明,在這種方法中不斷出現(xiàn)代打卡現(xiàn)象。代打卡不僅僅是員工的失職,更重要的是它打亂了企事業(yè)單位的生產(chǎn),工作計(jì)劃,造成不可估量的經(jīng)濟(jì)損失。80年代后,隨著個(gè)人計(jì)算機(jī)和光學(xué)指紋采集器的發(fā)明,指紋識(shí)別技術(shù)開(kāi)始進(jìn)入了一些非司法領(lǐng)域,出現(xiàn)了利用計(jì)算機(jī)來(lái)進(jìn)行指紋識(shí)別的自動(dòng)指紋識(shí)別方法,指紋考勤機(jī)利用指紋具有特征識(shí)別所不可比擬的優(yōu)點(diǎn),應(yīng)用到了企事業(yè)單位,杜絕了代打卡的嚴(yán)重現(xiàn)象。但是,由于指紋考勤機(jī)需預(yù)先存入員工的指紋信息庫(kù),才能進(jìn)行考勤,一旦人員變動(dòng),就要頻繁更新指紋信息庫(kù),這樣對(duì)于考勤管理人員操作非常麻煩。還有,對(duì)于規(guī)模較大的企事業(yè)單位,指紋考勤機(jī)要存儲(chǔ)大量的指紋數(shù)據(jù),不但費(fèi)用增加,而且比對(duì)識(shí)別也較困難。另外,指紋考勤機(jī)對(duì)考勤人員皮膚的要求都很高,當(dāng)出現(xiàn)皮膚臟、蛻皮等情況,它就無(wú)法識(shí)別。眾所周知,對(duì)于指紋考勤機(jī),收集指紋信息的指紋面板是一個(gè)公共媒介,很容易出現(xiàn)交差感染的現(xiàn)象。上述考勤方式在人事管理中帶來(lái)了種種弊端,具有圖像抓拍功能的視頻考勤方式慢慢成為了市場(chǎng)的主流方向。因此,實(shí)現(xiàn)視頻考勤機(jī),有著十分很重要的現(xiàn)實(shí)意義。1.2課題研究的意義隨著彩屏、觸摸屏、USB接口、以太網(wǎng)接口等技術(shù)的廣泛應(yīng)用,51單片機(jī)已經(jīng)難以實(shí)現(xiàn)復(fù)雜應(yīng)用的設(shè)計(jì),而作為32位的RISC架構(gòu)、基于ARM核的微控制芯片正在深入到應(yīng)用的各個(gè)領(lǐng)域。本課題是基于嵌入式開(kāi)發(fā)技術(shù)完成視頻考勤機(jī)的實(shí)現(xiàn),對(duì)此深入1沈陽(yáng)理工大學(xué)碩士學(xué)位論文研究有如下意義:.5.

視頻考勤機(jī)可以實(shí)現(xiàn)員工在用射頻卡打卡的同時(shí),自動(dòng)拍攝員工的圖像信息并記錄在案??记诠芾砣藛T在進(jìn)行考勤管理時(shí),可以根據(jù)抓拍的圖片,分析員工刷卡的有效性。因此,這種考勤方式杜絕了原有考勤系統(tǒng)的代打卡現(xiàn)象,真正體現(xiàn)公平、公正。并且不涉及指紋考勤的弊端。視頻考勤機(jī),采用最小系統(tǒng)核心板加擴(kuò)展板的雙層構(gòu)架,其中核心板采用6層高精度的工藝,使其具有最佳的電氣性能和抗干擾性能,并兼有低功耗、高度集成性等特性。視頻考勤機(jī)環(huán)境適應(yīng)性強(qiáng),它可以采用高像素、帶紅外線廣角的攝像頭,拍照范圍廣,既使在惡劣環(huán)境,也不會(huì)影響拍照效果。視頻考勤機(jī)操作簡(jiǎn)單,考勤人員通過(guò)考勤機(jī)的觸摸屏按鍵輕松實(shí)現(xiàn)系統(tǒng)設(shè)置,信息查詢等功能。視頻考勤機(jī)的數(shù)據(jù)存儲(chǔ)容量靈活,考勤數(shù)據(jù)保存在SD卡中,容量可根據(jù)使用人數(shù)及采集時(shí)間靈活選擇。1.3課題國(guó)內(nèi)外的研究現(xiàn)狀門(mén)禁考勤系統(tǒng)是從七十年代開(kāi)始的。該領(lǐng)域中,美國(guó)處于領(lǐng)先地位。在美國(guó),從事該領(lǐng)域開(kāi)發(fā)研究的主要是美國(guó)凱瑞公司,Keri公司是美國(guó)著名的Indala讀卡器公司(原為摩托羅拉/Indala)的締造者,也是全球最早的感應(yīng)式數(shù)字讀卡器的發(fā)明創(chuàng)始人和市場(chǎng)領(lǐng)導(dǎo)者。它的產(chǎn)品已通過(guò)美國(guó)UL和歐洲CE國(guó)際認(rèn)證。近年來(lái),國(guó)內(nèi)的數(shù)家企業(yè)有了考勤機(jī)的自主研發(fā)產(chǎn)品,早期有一些公司做考勤系統(tǒng)就拿讀寫(xiě)器,接電腦的串口,實(shí)時(shí)尋卡記下員工刷卡時(shí)間,然后進(jìn)行簡(jiǎn)單考勤分析就可以了,這種處理不夠?qū)I(yè)。首例榮獲國(guó)家專利的中卡S-900攝像考勤是智能卡與攝像技術(shù)的完美結(jié)合。但是,這種攝像考勤機(jī)沒(méi)有能把彩屏、USB等技術(shù)應(yīng)用到考勤機(jī)中。另外,市場(chǎng)上出現(xiàn)了,K007系列“黃金眼”考勤機(jī),它將射頻感應(yīng)技術(shù)和數(shù)碼攝像技術(shù)相結(jié)合,由于它的存儲(chǔ)容量的限制,這種產(chǎn)品只適合小規(guī)模的企業(yè)。隨著企事業(yè)、工商業(yè)單位考勤制度的進(jìn)一步深化和完善和原有的考勤制度缺陷日益顯現(xiàn),設(shè)計(jì)一款技術(shù)先進(jìn),功能強(qiáng)大,界面友好,操作簡(jiǎn)單又嚴(yán)防代打卡現(xiàn)象的視頻考勤機(jī)迫在眉捷。2第1章1.4課題研究的主要內(nèi)容課題研究的主要內(nèi)容有以下幾個(gè)方面:

緒論.

基于Linux嵌入式系統(tǒng)平臺(tái)構(gòu)建和完成嵌入式軟件系統(tǒng)移植。其中包括:?jiǎn)?dòng)系統(tǒng)(U-Boot-1.1.4)、操作系統(tǒng)(Linux-2.6-13.4)、根文件系統(tǒng)(Busybox制作只讀CRAMFS根文件系統(tǒng))、圖形界面系統(tǒng)(MiniGUI編寫(xiě)用戶界面及圖形顯示)。根據(jù)所搭建的硬件平臺(tái),研究攝像頭,讀卡器的工作原理。基于Linux下的Vi編輯器,使用C語(yǔ)言實(shí)現(xiàn)驅(qū)動(dòng)程序。依據(jù)硬件平臺(tái),研究Linux的內(nèi)核剪裁。編寫(xiě)讀卡器與嵌入式開(kāi)發(fā)板的串口通信程序,使圖形界面應(yīng)用程序能夠捕獲到刷卡時(shí)讀卡器返回?cái)?shù)據(jù)的參數(shù),實(shí)現(xiàn)信息處理。編寫(xiě)友好的嵌入式圖形界面應(yīng)用程序,增加軟鍵盤(pán)的功能模塊,使考勤機(jī)的操作更加簡(jiǎn)便。1.5論文的組織論文的章節(jié)結(jié)構(gòu)組織如下:第1章第2章第3章第4章第5章

緒論。介紹基于嵌入式技術(shù)的視頻考勤機(jī)的課題研究背景、意義以及主要內(nèi)容?;贚inux嵌入式系統(tǒng)平臺(tái)構(gòu)建。介紹了視頻考勤機(jī)的嵌入式開(kāi)發(fā)軟硬件平臺(tái)。闡述了目標(biāo)板的U-boot啟動(dòng)系統(tǒng)的移植,Linux內(nèi)核移植,根文件系統(tǒng)的建立過(guò)程。設(shè)備驅(qū)動(dòng)程序的研究與實(shí)現(xiàn)。概述了設(shè)備驅(qū)動(dòng)程序,以帶USB接口的攝像頭為例,介紹了Linux的USB驅(qū)動(dòng)程序的開(kāi)發(fā)流程和USB的框架程序,以及攝像頭驅(qū)動(dòng)程序的設(shè)計(jì)和實(shí)現(xiàn)過(guò)程。串口通信技術(shù)在嵌入式開(kāi)發(fā)中的應(yīng)用。簡(jiǎn)單介紹了串口通信技術(shù)和接口標(biāo)準(zhǔn),重點(diǎn)闡述了讀卡器與嵌入式開(kāi)發(fā)板的串口通信機(jī)制,介紹讀卡器的串口通信程序?;贛iniGUI圖形界面應(yīng)用程序的設(shè)計(jì)。分析需求,設(shè)計(jì)友好的圖形界面,并著重介紹了考勤機(jī)圖形界面的各部分功能模塊程序?qū)崿F(xiàn)過(guò)程。3沈陽(yáng)理工大學(xué)碩士學(xué)位論文第2章

基于Linux嵌入式系統(tǒng)平臺(tái)構(gòu)建嵌入式系統(tǒng)是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),并且軟硬件可裁剪,適用于應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗有嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。包括硬件和軟件兩部分。硬件包括處理器/微處理器、存儲(chǔ)器及外設(shè)器件和I/O端口、圖形控制器等。軟件部分包括操作系統(tǒng)軟件(OS)(要求實(shí)時(shí)和多任務(wù)操作)和應(yīng)用程序。應(yīng)用程序控制著系統(tǒng)的運(yùn)作和行為,操作系統(tǒng)起控制應(yīng)用程序編程與硬件交互的作用[1]。嵌入式系統(tǒng)技術(shù)優(yōu)勢(shì)如下:1.

嵌入式計(jì)算機(jī)系統(tǒng)同通用型計(jì)算機(jī)系統(tǒng)相比具有的特點(diǎn)[2]嵌入式系統(tǒng)通常是面向特定應(yīng)用的嵌入式CPU與通用型的最大不同就是嵌入式CPU大多工作在為特定用戶群設(shè)計(jì)的系統(tǒng)中,它通常都具有低功耗、體積小、集成度高等特點(diǎn),能夠把通用CPU中許多由板卡完成的任務(wù)集成在芯片內(nèi)部,從而有利于嵌入式系統(tǒng)設(shè)計(jì)趨于小型化,移動(dòng)能力大大增強(qiáng),與網(wǎng)絡(luò)的耦合也越來(lái)越緊密。另外,嵌入式系統(tǒng)和具體應(yīng)用有機(jī)地結(jié)合在一起,它的升級(jí)換代也是和具體產(chǎn)品同步進(jìn)行,因此嵌入式系統(tǒng)產(chǎn)品一旦進(jìn)入市場(chǎng),具有較長(zhǎng)的生命周期。2.

嵌入式系統(tǒng)的核心嵌入式微處理器具備的特點(diǎn)1).對(duì)實(shí)時(shí)多任務(wù)有很強(qiáng)的支持能力。能完成多任務(wù)并且有較短的中斷響應(yīng)時(shí)間,從而使內(nèi)部代碼和實(shí)時(shí)內(nèi)核的執(zhí)行時(shí)間減少到最低限度。2).具有功能很強(qiáng)的存儲(chǔ)區(qū)保護(hù)功能。這是由于嵌入式系統(tǒng)的軟件結(jié)構(gòu)已模塊化,而為了避免在軟件模塊之間出現(xiàn)錯(cuò)誤的交叉作用,需要設(shè)計(jì)強(qiáng)大的存儲(chǔ)區(qū)保護(hù)功能,同時(shí)也有利于軟件診斷。3).可擴(kuò)展的處理器結(jié)構(gòu),能最迅速地開(kāi)展出滿足應(yīng)用的最高性能的嵌入式微處理器。4).嵌入式微處理器必須功耗很低,尤其是用于便攜式的無(wú)線及移動(dòng)的計(jì)算和通信設(shè)備中靠電池供電的嵌入式系統(tǒng)更是如此,如需要功耗只有mW甚至μW級(jí)[3]。4第2章

基于Linux嵌入式系統(tǒng)平臺(tái)構(gòu)建2.1嵌入式系統(tǒng)平臺(tái)組成2.1.1硬件平臺(tái)分別從ARM處理器體系,S3C2410微處理器和目標(biāo)板結(jié)構(gòu)三個(gè)角度,研究本課題的嵌入式系統(tǒng)硬件平臺(tái)。ARM處理器體系結(jié)構(gòu)目前,ARM體系結(jié)構(gòu)一共定義了6個(gè)版本,版本號(hào)為1~6。同時(shí)各版本中還有一些變種。ARM處理器包括了ARM7、A?RM9、ARM9E、ARM10E、SecurCore、Xscale和StrongARM等系列的處理器產(chǎn)品,這些處理器最高主頻達(dá)到了800MIPS,功耗數(shù)量級(jí)為Mw/MHz。1.ARM處理器共有7種運(yùn)行模式,分別為:1)用戶模式(usr):ARM處理器正常的程序執(zhí)行狀態(tài)。2)快速中斷模式(fiq):用于高速數(shù)據(jù)傳輸或通道處理。3)外部中斷模式(irq):用于通用的中斷處理。4)管理模式(svc):操作系統(tǒng)使用的保護(hù)模式。5)數(shù)據(jù)訪問(wèn)終止模式(abt):當(dāng)數(shù)據(jù)或指令預(yù)取終止時(shí)進(jìn)入該模式,可用于虛擬存儲(chǔ)及存儲(chǔ)保護(hù)。6)系統(tǒng)模式(sys):運(yùn)行具有特權(quán)的操作系統(tǒng)任務(wù)。7)定義指令中止模式(und):當(dāng)未定義的指令執(zhí)行時(shí)進(jìn)入該模式,可用于支持硬件協(xié)處理器的軟件仿真。除用戶模式以外,其余的所有6種模式稱之為非用戶模式,或特權(quán)模式;其中除去用戶模式和系統(tǒng)模式以外的5種又稱為異常模式,常用于處理中斷或異常,以及需要訪問(wèn)受保護(hù)的系統(tǒng)資源等情況。另外,ARM中有如下幾種異常中斷的類(lèi)型:復(fù)位(RESET),未定義的指令,軟件中斷,指令預(yù)取終止(PrefechAbort),數(shù)據(jù)訪問(wèn)終止(DATAABORT),外部中斷請(qǐng)求(IRQ),快速中斷請(qǐng)求(FIQ)。2.ARM9處理器寄存器ARM處理器共有37個(gè)寄存器。其中包括:1)31個(gè)通用寄存器,包括程序計(jì)數(shù)器在內(nèi)。這些寄存器都是32位寄器。2)6個(gè)狀態(tài)寄存器。這些寄存器都是32位寄存器。5沈陽(yáng)理工大學(xué)碩士學(xué)位論文可見(jiàn)的寄存器包括15個(gè)通用寄存器(R0-R14),一個(gè)或兩個(gè)狀寄存器及程序計(jì)數(shù)器(PC)。在所有的寄存器中,有些是各模式公用一個(gè)物理存器,有一些寄存器各模式擁有自己獨(dú)立的物理寄存器。通用寄存器分為3類(lèi):備份寄存器、未備份寄存器和程序計(jì)數(shù)器PC。未備份寄存器未備份寄存器包括R0-R7。對(duì)于每一個(gè)未備份寄存器來(lái)說(shuō),所有處理器模式都是使用同一個(gè)物理寄存器。備份寄存器對(duì)于R8-R12備份寄存器來(lái)說(shuō),每個(gè)寄存器對(duì)應(yīng)兩個(gè)不同的物理寄存器。程序計(jì)數(shù)器PC可以作為一般的通用寄存器使用,但有一些指令在使用R15時(shí)有一些限制。指向當(dāng)前指令的下兩條指令的地址,并且由于ARM指令是字對(duì)齊的,PC值第0位和第一位總為0。S3C2410處理器目標(biāo)板基于三星S3C2410微處理器,CPU采用S3C2410ARM920T。采用272腳FBGA封裝,內(nèi)含一個(gè)ARM920核和片內(nèi)外圍:16KB一體化的Cache/MMU、LCD控制器、4路DMA、3路UART、1路I2C和一路I2S、2路v1.1USB(HOST/DEVICE)4路PWM和1個(gè)內(nèi)部時(shí)鐘控制器、看門(mén)狗、117位通用I/O,24路外部中斷。8路ADCRTC片內(nèi)鎖相環(huán),內(nèi)部時(shí)鐘可達(dá)200M。如圖2.1所示:UART

S3C2410

POWERRS232

SDRAM圖2.1硬件框圖6

USBJTAGFlashJTAGFlash第2章

基于Linux嵌入式系統(tǒng)平臺(tái)構(gòu)建目標(biāo)板基本結(jié)構(gòu)目標(biāo)板集成有串口、SD卡控制器、USBHost和USBdevice控制器,同時(shí)還有以太網(wǎng)接口、音頻接口、鼠標(biāo)和鍵盤(pán)接口等。目標(biāo)板采用最小系統(tǒng)核心板加擴(kuò)展板的雙層構(gòu)架,其中核心板采用6層高精度的工藝,使其具有最佳的電氣性能和抗干擾性能,并兼有低功耗、高度集成性等特性。目標(biāo)板上的硬件組成如下:1.2.

液晶屏:夏普3.5英寸真彩TFT、分辨率320×240射頻讀卡器:支持讀寫(xiě)M1卡或只讀EM卡3.SD卡:保存至少3萬(wàn)條考勤記錄(卡號(hào)、刷卡時(shí)間、圖像),容量可根據(jù)使用人數(shù)及采集時(shí)間靈活選擇。4.5.

攝像頭:中星微301芯片130萬(wàn)像素USB攝像頭。音頻接口:語(yǔ)音提示,報(bào)警功能。2.1.2軟件平臺(tái)軟件平臺(tái)由以下幾個(gè)部分組成:交叉編譯器、系統(tǒng)引導(dǎo)程序Bootloader、嵌入式Linux操作系統(tǒng)內(nèi)核、文件系統(tǒng)。本課題具體使用的版本如下:1.交叉編譯:cross-2.95.3,cross-3.3.22.嵌入式系統(tǒng)引導(dǎo)程序:U-Boot-1.1.43.嵌入式系統(tǒng)操作系統(tǒng):linux-內(nèi)核4.嵌入式系統(tǒng)的文件系統(tǒng):CRAMFS1.12.2交叉編譯環(huán)境的建立交叉編譯是嵌入式開(kāi)發(fā)過(guò)程中的一項(xiàng)重要技術(shù),它的主要特征是某機(jī)器中執(zhí)行的程序代碼不是在本機(jī)編譯生成,而是由另一臺(tái)機(jī)器編譯生成,一般前者稱為目標(biāo)機(jī),后者稱為宿主機(jī)。嵌入式系統(tǒng)開(kāi)發(fā)環(huán)境一般分成主機(jī)端(HOST)和目標(biāo)板(ATGRTE)兩部分。目前一般采用的解決辦法是首先在通用計(jì)算機(jī)上編寫(xiě)程序,通過(guò)交叉編譯生成目標(biāo)平臺(tái)上可運(yùn)行的二進(jìn)制代碼,再下載到目標(biāo)平臺(tái)上的特定位置上運(yùn)行。在主機(jī)端和目標(biāo)板之間需要通過(guò)某種方式進(jìn)行通信,如使用RS232串口。這種通信目的在于發(fā)送控制指令和傳輸數(shù)據(jù),同時(shí)獲得反饋信息。采用交叉編譯的主要原因在于,多數(shù)嵌入式目標(biāo)系統(tǒng)不能提供足夠的資源供編譯過(guò)程使用,因而只好將編譯工程轉(zhuǎn)移到高性能的主機(jī)中進(jìn)行[4]。7沈陽(yáng)理工大學(xué)碩士學(xué)位論文基于ARM平臺(tái)交叉編譯工具分別為arm-linux-as、arm-linux-gcc、arm-linux-g++、arm-linux-ld。本課題使用的交叉編譯工具是arm-linux-gcc。它安裝基本安裝步驟如下:1.下載交叉工具下載cross-2.95.3,cross-3.3.2。2.編譯交叉工具[5][root@localhost~]mkdir/usr/local/arm[root@localhost~]cd/usr/local/arm把cross-2.95.2.tar.bz2,cross-3.3.2.tar.gz拷貝到/usr/local/arm目錄中并解壓[root@localhost~]tar-xjvfcross-2.95.2.tar.bz2[root@localhost~]tar-xzvfcross-3.3.2tar.gz3.指定交差編譯環(huán)境的路徑exportPATH=/usr/local/arm/3.3.2/bin:$PATH2.3引導(dǎo)程序U-Boot啟動(dòng)過(guò)程分析與移植2.3.1引導(dǎo)程序U-Boot概述對(duì)于計(jì)算機(jī)系統(tǒng)來(lái)說(shuō),從開(kāi)機(jī)上電到操作系統(tǒng)啟動(dòng)需要一個(gè)引導(dǎo)過(guò)程。嵌入式Linux系統(tǒng)同樣離不開(kāi)引導(dǎo)程序,這個(gè)引導(dǎo)程序就叫作Bootloader。Bootloader是在操作系統(tǒng)運(yùn)行之前執(zhí)行的一段小程序。通過(guò)這段小程序,可以初始化硬件設(shè)備、建立內(nèi)存空間的映射表,從而建立適當(dāng)?shù)南到y(tǒng)軟硬件環(huán)境,為最終調(diào)用操作系統(tǒng)內(nèi)核做好準(zhǔn)備。圖2.1是Bootloader和內(nèi)核映像以及文件系統(tǒng)的分區(qū)表[6]。圖2.1Flash存儲(chǔ)示意圖本課題采用了NORFlash做為Bootloader的存儲(chǔ)介質(zhì)。根據(jù)處理器的復(fù)位向量設(shè)置,要使Bootloader的入口位于處理器上電執(zhí)行第一條指令的位置。分配參數(shù)區(qū),這里可以作為Bootloader的參數(shù)保存區(qū)域。內(nèi)核映像區(qū),Bootloader引導(dǎo)Linux內(nèi)核,從這個(gè)地8第2章

基于Linux嵌入式系統(tǒng)平臺(tái)構(gòu)建方把內(nèi)核映像解壓到RAM中去,然后跳轉(zhuǎn)到內(nèi)核映像入口執(zhí)行。文件系統(tǒng)區(qū)。如果使用Ramdisk文件系統(tǒng),則需要Bootloader把它解壓到RAM中[7]。嵌入式系統(tǒng)世界已經(jīng)有各種各樣的Bootloader,種類(lèi)劃分有多種方式。其中,U-Boot是用于多種嵌入式CPU的Bootloader程序,U-Boot不僅支持嵌入式Linux系統(tǒng)的引導(dǎo),它還支持NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS嵌入式操作系統(tǒng)。另外,U-Boot除了支持ARM系列的處理器外,還能支持MIPS、x86、PowerPC、NIOS、XScale等諸多常用系列的處理器?,F(xiàn)在,U-Boot已經(jīng)成為功能最多、靈活性最強(qiáng)并且開(kāi)發(fā)最積極的開(kāi)放源碼Bootloader。它的源代碼包含對(duì)幾十種處理器、數(shù)百種開(kāi)發(fā)板的支持。對(duì)于特定的開(kāi)發(fā)板,配置編譯過(guò)程只需要其中部分程序。本課題選用了Bootloader引導(dǎo)程序——U-Boot。在U-Boot的體系結(jié)構(gòu)中,頂層目錄下有26個(gè)子目錄,分別存放和管理不同的源程序。與本課題相關(guān)的主要目錄結(jié)構(gòu)如下:..9.

/board存放電路板相關(guān)的目錄文件,如:smdk2410(arm920t)目錄。/cpu存放CPU相關(guān)的目錄文件,例如:arm720t、arm920t、i386等目錄。/lib_ppc存放對(duì)PowerPC體系結(jié)構(gòu)通用的文件,主要用于實(shí)現(xiàn)PowerPC平臺(tái)通用的函數(shù)。/lib_arm存放對(duì)ARM體系結(jié)構(gòu)通用的文件,主要用于實(shí)現(xiàn)ARM平臺(tái)通用的函數(shù)。/lib_i386存放對(duì)X86體系結(jié)構(gòu)通用的文件,用于實(shí)現(xiàn)X86平臺(tái)通用的函數(shù)。/include頭文件和開(kāi)發(fā)板配置文件,所有開(kāi)發(fā)板的配置文件都在configs目錄下。/common通用的多功能函數(shù)實(shí)現(xiàn)。/lib_generic通用庫(kù)函數(shù)的實(shí)現(xiàn)。/net存放網(wǎng)絡(luò)的程序。10./fs存放文件系統(tǒng)的程序。11./post存放上電自檢程序。12./drivers通用的設(shè)備驅(qū)動(dòng)程序,主要有以太網(wǎng)接口的驅(qū)動(dòng)。13./rtcRTC的驅(qū)動(dòng)程序。14./dtt數(shù)字溫度測(cè)量器或者傳感器的驅(qū)動(dòng)。15./examples一些獨(dú)立運(yùn)行的應(yīng)用程序的例子,例如helloworld。9沈陽(yáng)理工大學(xué)碩士學(xué)位論文16./tools存放制作S-Record或者U-Boot格式的映像等工具17./doc開(kāi)發(fā)使用文檔。2.3.2U-Boot的啟動(dòng)過(guò)程分析盡管各種Bootloader間的實(shí)現(xiàn)細(xì)節(jié)有很大差異,但其啟動(dòng)流程卻具有很多共性。Bootloader的啟動(dòng)流程一般分為兩個(gè)階段:階段一和階段二。U-Boot階段一.

初始化基本的硬件設(shè)備,包括屏蔽中斷、設(shè)置CPU的時(shí)鐘頻率等。/*屏蔽中斷*/movr1,#0xffffffffldrr0,=INTMSKstrr1,[r0]#ifdefined(CONFIG_S3C2410)ldrr1,=0x3ffldrr0,=INTSUBMSKstrr1,[r0]/*設(shè)置CPU的頻率*/ldrr0,=CLKDIVNmovr1,#3strr1,[r0]為加載stage2準(zhǔn)備RAM空間配置內(nèi)存區(qū)控制寄存器,在U-Boot中的設(shè)置文件是board/crane2410/lowlevel_init.Smovip,lrbllowlevel_initmovlr,ip拷貝stage2到RAM中stack_setup:ldrr0,_TEXT_BASE/*代碼段的起始地址*/subr0,r0,#CFG_MALLOC_LEN/*分配的動(dòng)態(tài)內(nèi)存區(qū)*/subr0,r0,#CFG_GBL_DATA_SIZE/*U-Boot開(kāi)發(fā)板全局?jǐn)?shù)據(jù)存放*/設(shè)置堆棧指針10第2章

基于Linux嵌入式系統(tǒng)平臺(tái)構(gòu)建5.

跳轉(zhuǎn)到stage2的入口處。ldrpc,_start_armboot_start_armboot:.wordstart_armbootU-Boot階段二.

初始化本階段要使用的硬件設(shè)備,包括初始化串口、定時(shí)器等。init_fnc_t*init_sequence[]={cpu_init,/*cpu的基本設(shè)置*/board_init,/*開(kāi)發(fā)板的基本初始化*/interrupt_init,/*初始化中斷*/env_init,/*初始化環(huán)境變量*/init_baudrate,/*初始化波特率*/serial_init,/*串口通訊初始化*/console_init_f,/*控制臺(tái)初始化第一階段*/display_banner,/*通知代碼已經(jīng)運(yùn)行到該處*/dram_init,/*配制可用的內(nèi)存區(qū)*/display_dram_config,};初始化網(wǎng)絡(luò)設(shè)備,填寫(xiě)IP、MAC地址等。gd->bd->bi_ip_addr=getenv_IPaddr("ipaddr");進(jìn)入主U-BOOT命令行進(jìn)入命令循環(huán),接受用戶從串口輸入的命令,然后進(jìn)行相應(yīng)的工作。for(;;){main_loop();/*在common/main.c*/}拷NANDflash中的內(nèi)容到SDRAM2.3.3U-Boot的移植與編譯移植U-Boot到開(kāi)發(fā)板上需要修改和硬件相關(guān)的代碼。主要修改的文件有:Makefile文件、include目錄下的目標(biāo)板.h頭文件(smdk2410.h),board目錄下的目標(biāo)板.e文件11沈陽(yáng)理工大學(xué)碩士學(xué)位論文(smdk2410.e),flash.c文件,U-Boot.lds鏈接文件,以及cpu目錄下的串口驅(qū)動(dòng)文件。1.

獲取u-boot源代碼,并解壓到合適的位置。mv

./u-boot-1.1.4.tar.bz2/usr/local/arm-project/u-boot2.

從NandFlash啟動(dòng)U-Boot。本課題的S3C2410配置成從NANDFlash啟動(dòng)(SW300:1=OFF4=ON;SW500:1=ON2=ON3=ON4=OFF)。在HDCS3C2410上電后,NandFlash控制器會(huì)自動(dòng)的把NandFlash上的4K數(shù)據(jù)搬移到4K內(nèi)部RAM中,并把0xO0000000設(shè)置為內(nèi)部RAM的起始地址,CPU從內(nèi)部RAM的0x00000000位置開(kāi)始啟動(dòng)。由于NandFlash控制器從NandFlash中搬移到內(nèi)部RAM的代碼是有限的,所以,在啟動(dòng)代碼的前4K里,必須完成S3C2410的核心配置以及把啟動(dòng)代碼剩余部分搬到RAM中。由于U-Boot源碼不支持從NandFlash啟動(dòng),但S3C2410支持從NandFlash啟動(dòng),使U-Boot在得到執(zhí)行權(quán)后能夠?qū)⑵渥陨砜截惖介_(kāi)發(fā)板上SDRAM中,由cpu/arm920t/start.S的copy_myself程序段完成,實(shí)現(xiàn)如下:#ifdefCONFIG_S3C2410_NAND_BOOTbl

copy_myself@jumptoramldradd

r1,=on_the_rampc,r1,#0on_the_ram:#endif3.

網(wǎng)絡(luò)資源修改由于本課題使用RTL8019網(wǎng)卡控制器,因此要添加有關(guān)RTL8019的相關(guān)定義。在./include/configs/smdk2410.h//#defineCONFIG_DRIVER_CS89001/*屏蔽CS8900相關(guān)的宏定義*///#defineCS8900_BASE//#defineCS8900_BUS16

0x190003001添加:#defineCONFIG_DRIVER_RTL80191#defineRTL8019_BASE修改宏:#defineCONFIG_IPADDR

0x180000004//目標(biāo)板IP12第2章#defineCONFIG_SERVERIP

基于Linux嵌入式系統(tǒng)平臺(tái)構(gòu)建9//宿主機(jī)IP./lib_arm/board.c添加RTL8019物理地址初始化:#ifdefined(CONFIG_DRIVER_RTL8019)gd->bd->bi_enetaddr[0]=0x08;gd->bd->bi_enetaddr[1]=0x00;gd->bd->bi_enetaddr[2]=0xaa;gd->bd->bi_enetaddr[3]=0x09;gd->bd->bi_enetaddr[4]=0x5b;gd->bd->bi_enetaddr[5]=0x1f;#endif./net/eth.c添加RTL8019初始化:#ifdefCONFIG_DRIVER_RTL8019eth_init(bis);#endif在./board/smdk2410/lowlevel_init.S中修改:#defineB3_BWSCON(DW8+WAIT+UBLB)通過(guò)上述操作,完成對(duì)RTL8019的板級(jí)支持。4.

Norflash支持修改1)./board/smdk2410/flash.c添加:#elifdefined(CONFIG_AMD_LV160)(AMD_MANUFACT&FLASH_VENDMASK)|(FLASH_AM160LV&FLASH_TYPEMASK);……case(FLASH_AM160LV&FLASH_TYPEMASK):printf("1xAM29LV169DB(16Mbit)\n");break;2)./include/configs/smdk2410.h添加:#defineCONFIG_AMD_LV1601//解決正確的NorFlash型號(hào)#ifdefCONFIG_AMD_LV160#definePHYS_FLASH_SIZE0x00200000//NorFlash的大小為2M#defineCFG_MAX_FLASH_SECT(35)#defineCFG_ENV_ADDR

(CFG_FLASH_BASE+0x001F0000)#endif13沈陽(yáng)理工大學(xué)碩士學(xué)位論文5.Nandflash支持修改./include/linux/mtd/nand_ids.h{"SamsungK9F1208U0M64MB",NAND_MFR_SAMSUNG,0x79,26,0,3,0x4000,0},6.U-Boot命令參數(shù)修改./include/configs/smdk2410.h#define

CONFIG_BOOTARGS

"noinitrd

root=/dev/mtdblock/2

init=/linuxrcconsole=ttySAC0,115200"本課題的內(nèi)核映象是"zImage"#defineCONFIG_BOOTCOMMAND"nandread0x300080000x1000000x150000;go0x30008000"7.U-Boot的編譯[root@localhostuboot]#makesmdk2410_config[root@localhostuboot]#makeCROSS_COMPILE=arm-linux-生成u-boot.bin8.通過(guò)NorFlash啟動(dòng)下載u-boot過(guò)程1)關(guān)閉電源。將系統(tǒng)設(shè)置成從NorFlash啟動(dòng)的模式(SW300:1=OFF4=ON;SW500:1=OFF2=ON3=ON4=OFF)。將串口0(CN1000)和PC機(jī)的串口相連,將USB從口CN802(SW800:1=OFF2=OFF3=ON4=ON)和PC機(jī)的USB2)在WINDOWS下運(yùn)行DNW軟件。3)點(diǎn)擊菜單欄中的configuration/option選項(xiàng),選擇PC串口,以及波特率。PC串口根據(jù)實(shí)際的使用情況選擇,波特率選用115200。4)點(diǎn)擊菜單欄中的serialport/connect命令,程序執(zhí)行串口準(zhǔn)備連接通訊命令。5)打開(kāi)系統(tǒng)電源,DNW輸出系統(tǒng)的信息,包括串口和USB狀態(tài)信息。6)按任意鍵進(jìn)入系統(tǒng)硬件測(cè)試菜單選項(xiàng)。7)選擇主菜單第1項(xiàng)DownloadOnly,該選項(xiàng)把PC機(jī)中的文件下載到SDRAM的指定位置,默認(rèn)地址0X30800000。顯示USBhostisconnected.Waitingadownload。點(diǎn)擊USB菜單中的Transimit選項(xiàng),開(kāi)始下載文件。8)選擇主菜單第2項(xiàng)TestNandFlash中第3項(xiàng)WriteNandFlash,輸入燒寫(xiě)文件的塊地址0。14口連接口連接。第2章

基于Linux嵌入式系統(tǒng)平臺(tái)構(gòu)建2.4Linux內(nèi)核剪裁與移植Linux是一套免費(fèi)使用和自由傳播的類(lèi)Unix操作系統(tǒng),它主要用于基于Intelx86系列CPU的計(jì)算機(jī)上。這個(gè)系統(tǒng)是由世界各地的成千上萬(wàn)的程序員設(shè)計(jì)和實(shí)現(xiàn)的。其目的是建立不受任何商品化軟件的版權(quán)制約的、全世界都能自由使用的Unix兼容產(chǎn)品。Linux操作系統(tǒng)的優(yōu)點(diǎn)和特點(diǎn)如下:1.開(kāi)放性系統(tǒng)遵循世界標(biāo)準(zhǔn)規(guī)范,特別是遵循開(kāi)放系統(tǒng)互連(OSI)國(guó)際標(biāo)準(zhǔn)。凡遵循國(guó)際準(zhǔn)所開(kāi)發(fā)的硬件和軟件,都能彼此兼容,可方便實(shí)現(xiàn)互連。2.設(shè)備獨(dú)立性Linux操作系統(tǒng)把所有外部設(shè)備看作文件,只要安裝它們的驅(qū)動(dòng)程序,任何用戶都3.動(dòng)態(tài)鏈接共享庫(kù)每個(gè)應(yīng)用程序共享一個(gè)公用的、運(yùn)行時(shí)可以被調(diào)用的子程序庫(kù),而不是保留各自的軟件備份。這可為系統(tǒng)節(jié)省大量空間。4.強(qiáng)大的網(wǎng)絡(luò)功能Linux使用標(biāo)準(zhǔn)的TCP/IP協(xié)議,包括網(wǎng)絡(luò)文件系統(tǒng)(NFS,NetworkFileSystem)網(wǎng)絡(luò)信息服務(wù)(NIS,NetworkInformationService)通過(guò)利用一塊以太網(wǎng)網(wǎng)卡或調(diào)制解調(diào)器把自已的系統(tǒng)同其它系統(tǒng)相連,便可以訪問(wèn)Internet。5.可靠的系統(tǒng)的安全Linux采取了許多安全技術(shù)措施,包括對(duì)讀/寫(xiě)進(jìn)行權(quán)限控制、帶保護(hù)的子系統(tǒng)、審計(jì)跟蹤、核心授權(quán)等,這為網(wǎng)絡(luò)多用戶環(huán)境中的用戶提供了必要的安全保障。隨著Linux2.6內(nèi)核的發(fā)布,Linux向現(xiàn)有主流的RTOS提供商在嵌入系統(tǒng)市場(chǎng)提出了巨大挑戰(zhàn),將成為更優(yōu)秀的嵌入式操作系統(tǒng)。Linux2.6內(nèi)核主體中加入了提高中斷性能和調(diào)度響應(yīng)時(shí)間的改進(jìn),其中有三個(gè)最顯著的改進(jìn):采用可搶占內(nèi)核、更加有效由于Linux是開(kāi)放源代碼的操作系統(tǒng),除了Kernel免費(fèi)以外,它的許多系統(tǒng)程序以及應(yīng)用程序也是自由軟件,所以它的軟件成本非常低廉。還有Linux還具有操作系統(tǒng)小、穩(wěn)定、即時(shí)與多工等特點(diǎn),如今,Linux作為嵌入式操作系統(tǒng)已廣泛應(yīng)用到信息家電,15可以像使用文件一樣操作、使用這些設(shè)備,而不必知道它們的具體存在形式??梢韵袷褂梦募粯硬僮鳌⑹褂眠@些設(shè)備,而不必知道它們的具體存在形式。的調(diào)度算法以及同步性的提高。沈陽(yáng)理工大學(xué)碩士學(xué)位論文HatLinux從4.0版起便同時(shí)支持Intel、Alpha、Sparc硬件平臺(tái)。目前,RedHatLinux發(fā)布版本支持的硬件平臺(tái)有ARM、m68k和SGI等。如今,RedHatLinux獲得了很多商業(yè)的支持,所以它在硬件軟件兼容性上很好。實(shí)際上它已經(jīng)是Linux的工業(yè)標(biāo)準(zhǔn)。本課題基于RedHatLinuxEnterprise4完成嵌入式系統(tǒng)的程序開(kāi)發(fā)。2.4.1Linux內(nèi)核源碼組織結(jié)構(gòu)1.Arch:包括了所有和體系結(jié)構(gòu)相關(guān)的核心代碼。2.Include:包括編譯核心所需要的大部分頭文件。3.Init:包含核心的初始化代碼。4.Mm:包括所有獨(dú)立于CPU體系結(jié)構(gòu)的內(nèi)存管理代碼。5.Kernel:主要的核心代碼,實(shí)現(xiàn)了大多數(shù)linux系統(tǒng)的內(nèi)核函數(shù)。6.Drivers:放置系統(tǒng)所有的設(shè)備驅(qū)動(dòng)程序。其它:如Lib放置核心的庫(kù)代碼;Net,與網(wǎng)絡(luò)相關(guān)的代碼;Ipc,這個(gè)目錄包含核心的進(jìn)程間通訊的代碼;Fs,所有的文件系統(tǒng)代碼和各種類(lèi)型的文件操作代碼。通常,在每個(gè)目錄下,都有一個(gè).depend文件和一個(gè)Makefile文件,這兩個(gè)文件都是編譯時(shí)使用2.4.2Linux內(nèi)核移植過(guò)程1.

下載內(nèi)核從/pub/linux/kernel/v2.6/linux.tar.bz2下載linux并將內(nèi)核至/home/arm/dev_home/kernel.[root@localhost~]#suarm[arm@localhost~]#cd$KERNEL[arm@localhostkernel]#tarxzvf

linux.tar.gz[arm@localhostkernel]#pwd/home/arm/dev_home/kernel[arm@localhostkernel]#cdlinux16汽車(chē)電子等領(lǐng)域。RedHatLinux汽車(chē)電子等領(lǐng)域。RedHatLinux是最成熟也是目前最流行的一種Linux發(fā)布版本。Red本課題是基于Linux內(nèi)核,以下是Linux2.6的基本內(nèi)核結(jié)構(gòu):的輔助文件,描述各個(gè)文件這間的聯(lián)系和依托關(guān)系。第2章

基于Linux嵌入式系統(tǒng)平臺(tái)構(gòu)建1)

修改內(nèi)核目錄樹(shù)根下的的Makefile,指明交叉編譯器[arm@localhostlinux]#viMakefile由于本課題使用Cross3.3.2編譯器,找到ARCH和CROSS_COMPILE修改ARCH?=armCROSS_COMPILE?=arm-linux2)

然后設(shè)置PATH環(huán)境變量,使其可以找到交叉編譯工具鏈如果/usr/local/arm/3.3.2/bin搜索路徑,加入下面語(yǔ)句在~/.bashrc中[arm@localhostlinux2.6.13]#vi~/.bashrcexportPATH=/usr/local/arm/3.3.2/bin:$PATH[arm@localhostlinux2.6.13]source~/.bashrc

//更新~/.bashrc文件3.設(shè)置flash分區(qū)(64M)將其分成四個(gè)分區(qū),分別存放引導(dǎo)程序、操作系統(tǒng)、根文件系統(tǒng)、用戶文件系統(tǒng)[15]。修改./arch/arm/mach-s3c2410/devs.c頭文件添加:#include<linux/mtd/partitions.h>#include<linux/mtd/nand.h>#include<asm/arch/nand.h>/*建立NandFlash分區(qū)表添加內(nèi)容:*/staticstructmtd_partitionpartition_info[]={{/*1MB*/name:"bootloader",size:0x00100000,offset:0x0,},{/*3MB/name:"kernel",size:0x00300000,offset:0x00100000,},{/*40MB*/name:"root",size:0x02800000,172.修改2.修改Makefile沈陽(yáng)理工大學(xué)碩士學(xué)位論文offset:0x00400000,},{/*20MB*/name:"user",size:0x01400000,offset:0x02d00000,}};分區(qū)之后的內(nèi)核啟動(dòng)信息如圖2.2所示。圖2.2內(nèi)核MTD啟動(dòng)信息加入NandFlash分區(qū):structs3c2410_nand_setnandset={nr_partitions:4,partitions:partition_info,};建立NandFlash芯片支持:structs3c2410_platform_nandsuperlpplatform={tacls:0,twrph0:30,twrph1:0,sets:&nandset,nr_sets:1,};加入NandFlash芯片支持到NandFlash驅(qū)動(dòng):structplatform_devices3c_device_nand={.name.id

="s3c2410-nand",=-1,.num_resources

=ARRAY_SIZE(s3c_nand_resource),.resource=s3c_nand_resource,18第2章

基于Linux嵌入式系統(tǒng)平臺(tái)構(gòu)建.dev={.platform_data=&superlpplatform}};kernel啟動(dòng)時(shí)根據(jù)對(duì)分區(qū)的設(shè)置進(jìn)行初始化配置:修改./arch/arm/mach-s3c2410/mach-smdk2410.cstaticstructplatform_device*smdk2410_devices[]__initdata={&s3c_device_usb,&s3c_device_lcd,&s3c_device_wdt,&s3c_device_i2c,&s3c_device_iis,&s3c_device_nand,/*添加*/

};禁止FlashECC校驗(yàn),修改./drivers/mtd/nand/s3c2410.c在s3c2410_nand_init_chip()函數(shù)最后加上一條語(yǔ)句:chip->eccmode=NAND_ECC_NONE;4.內(nèi)核剪裁[16]1)編輯./fs/Kconfig文件menu"Pseudofilesystems",并添加語(yǔ)句:configDEVFS_FSbool"/devfilesystemsupport(OBSOLETE)"defaultyconfigDEVFS_MOUNTbool"Automaticallymountatboot"defaultydependsonDEVFS_FS配置內(nèi)核產(chǎn)生.config文件cp./arch/arm/configs/smdk2410_defconfig.config再執(zhí)行makemenuconfig如圖2.3所示:Loadablemodulesupport>SystemType>[*]S3C2410DMAsupportBootoptions>Defaultkernelcommandstring:19沈陽(yáng)理工大學(xué)碩士學(xué)位論文圖2.3Loadablemodulesupport其中:mtdblock2代表第3個(gè)flash分區(qū),是rootfsconsole=ttySAC0,115200使kernel啟動(dòng)期間的信息輸出到串口0上.2.6內(nèi)核對(duì)于串口的命名改為ttySAC0,用戶空間的串口編程針對(duì)的仍是/dev/ttyS0如圖2.4所示:圖2.4DefaultkernelcommandstringFloatingpointemulation>[*]NWFPEmathemulation對(duì)內(nèi)核MTD子系統(tǒng)的設(shè)置DeviceDrivers>MemoryTechnologyDevices(MTD)>[*]MTDpartitioningsupport[*]Commandlinepartitiontableparsing#支持從命令行設(shè)置flash分區(qū)信息,如圖2.5所示:20第2章

基于Linux嵌入式系統(tǒng)平臺(tái)構(gòu)建圖2.5RAM/ROMFlashchipdriversCharacterdevices>[*]Nonstandard

serialportsupport[*]S3C2410RTCDriver文件系統(tǒng)的設(shè)置如圖2.6所示圖2.6文件系統(tǒng)設(shè)置5.編譯內(nèi)核[root@localhostlinux2.6.14]$makezImage在目錄\linux-\arch\arm\boot\下,將生成內(nèi)核鏡象文件zImage[17]。6.下載zImage到開(kāi)發(fā)板1)先將zImage放到tftp服務(wù)器的默認(rèn)目錄下2)刪除NandFlash中內(nèi)核所在的分區(qū)內(nèi)容21沈陽(yáng)理工大學(xué)碩士學(xué)位論文smdk2410#nanderase0x1000000x3000003)向NandFlash的數(shù)據(jù)區(qū)寫(xiě)入smdk2410#nandwrite0x300080000x1000000x30000其中:0x30008000指寫(xiě)到NandFlash中的數(shù)據(jù)在內(nèi)存的起始地址0x100000指NandFlash的起始地址;0x300000指寫(xiě)入的大小。2.5根文件系統(tǒng)的移植2.5.1建立根文件系統(tǒng)的文件結(jié)構(gòu)1.

本課題的具體根文件系統(tǒng)結(jié)構(gòu)如圖2.7所示:my_rootfsfsbin

set

etc

home

lib

root

sys

proc

tmp

bin

dev圖2.7my_rootfs結(jié)構(gòu)主要目錄說(shuō)明如下:bin:必要的用戶命令(二進(jìn)制文件)dev:設(shè)備文件和其他特殊文件etc:系統(tǒng)配置文件,包括啟動(dòng)文件lib:必要的鏈接庫(kù),例如C鏈接庫(kù),內(nèi)核模塊proc:用來(lái)提供內(nèi)核和進(jìn)程信息的虛擬文件系統(tǒng)統(tǒng)sbin:必要的系統(tǒng)管理員命令(二進(jìn)制文件user:對(duì)大多數(shù)用戶都有用的應(yīng)用程序和文件22第2章

基于Linux嵌入式系統(tǒng)平臺(tái)構(gòu)建2.

根文件系統(tǒng)的啟動(dòng)Linux內(nèi)核的第一個(gè)初始化動(dòng)作就是啟動(dòng)init程序,此程序在終結(jié)系統(tǒng)啟動(dòng)程序之前會(huì)衍生出各種應(yīng)用程序,并且啟動(dòng)若干關(guān)鍵的軟件組件。由于systernvinit程序過(guò)于靈活,嵌入式Linux系統(tǒng)一般不配備標(biāo)準(zhǔn)的init程序。內(nèi)核不在意所執(zhí)行的是否是而init程序,而只要求系統(tǒng)完成初始化動(dòng)作之后,可以啟動(dòng)一個(gè)應(yīng)用程序。在很多的嵌入式Linux系統(tǒng)中,內(nèi)核命令行參數(shù)為:init=/linuxrc,這指示內(nèi)核使用根文件系統(tǒng)根目錄下的linuxrc文件來(lái)作為系統(tǒng)init程序。通常linuxrc為一個(gè)腳本文件,執(zhí)行一些設(shè)置,并調(diào)用根文件系統(tǒng)中真正的init程序。下面是本課題中的部分linuxrc代碼,實(shí)現(xiàn)了嵌入式目標(biāo)板啟動(dòng)后和宿主機(jī)自動(dòng)掛載。#mountnfs/sbin/ifconfigeth04/bin/mount-tnfs9:/nfs/rootfs/mnt/mnt/nfs-onolock2.5.2使用Busybox建立根文件系統(tǒng)大多數(shù)的嵌入式系統(tǒng)需要命令集合。目前,常常采用的是將需要用到的命令集合濃縮實(shí)現(xiàn)成具有必要功能的少數(shù)應(yīng)用程序。BusyBox就是利用一個(gè)極小型的程序來(lái)提供整個(gè)命令集的功能。Busybox就好比是一個(gè)集成電路,把常用的工具和命令集成壓縮在一個(gè)可執(zhí)行文件里,基于ARM的嵌入式Linux系統(tǒng)的研究及應(yīng)用的功能基本不變,而大小卻小很多倍。在嵌入式Linux應(yīng)用中,Busybox得到非常廣的應(yīng)用。1.下載busybox[18]下載busybox1.1.并解壓。2.

配置Busybox[arm@localhostbusybox1.1.3]$makemenuconfigBusyboxSettings>GeneralConfiguration>[*]SupportfordevfsBuildOptions>[*]BuildBusyBoxasastaticbinary(nosharedlibs)/*將busybox編譯為靜態(tài)連接,少了啟動(dòng)時(shí)找動(dòng)態(tài)庫(kù)的麻煩*/[*]DoyouwanttobuildBusyBoxwithaCrossCompiler?23沈陽(yáng)理工大學(xué)碩士學(xué)位論文(/usr/local/arm/3.3.2/bin/armlinux)CrossCompilerprefix/*指定交叉編譯工具路徑*/InitUtilities>[*]init[*]Supportreadinganinittabfile/*支持init讀取/etc/inittab配置文件,一定要選上*/Shells>Chooseyourdefaultshell(ash)>/*(X)ash選中ash,這樣生成的時(shí)候才會(huì)生成bin/sh文件*前面的linuxrc腳本的頭一句:*#!/bin/sh是由bin/sh來(lái)解釋執(zhí)行的*/[*]ashCoreutils>[*]cp[*]cat[*]ls[*]mkdir[*]echo(basicSuSv3versiontakingnooptions)[*]env[*]mv[*]pwd[*]rm[*]touchEditors>[*]viLinuxSystemUtilities>[*]mount[*]umount[*]Supportloopbackmounts[*]Supportfortheold/etc/mtabfileNetworkingUtilities>24第2章

基于Linux嵌入式系統(tǒng)平臺(tái)構(gòu)建[*]inetd/*支持inetd超級(jí)服務(wù)器inetd的配置文件為/etc/inetd.conf文件*/3.編譯并安裝Busybox[arm@localhostbusybox1.1.3]$makeTARGET_ARCH=armCROSS=arm_linux\PREFIX=/home/arm/dev_home/rootfs/my_rootfs/allinstallPREFIX指明安裝路徑:就是根文件系統(tǒng)所在路徑。4.制作cramfs包下載cramfs1.1.tar.gz包,通過(guò)mkcramfs工具執(zhí)行以下命令:[arm@localhosttools]$mkcramfsmy_rootfsmy_rootfs.cramfs5.寫(xiě)cramfs包到NandFlash[root@localhosttools]$cpmy_rootfs.cramfs/tftpboot/smdk2410#nanderase0x4000000x2800000smdk2410#nandwrite0x300080000x4000000x28000002.6本章小結(jié)本章介紹了基于嵌入式系統(tǒng)平臺(tái)的構(gòu)建。主要包括嵌入式系統(tǒng)的引導(dǎo)程序U-Boot的移植,操作系統(tǒng)Linux的內(nèi)核的剪裁與移植過(guò)程。最后介紹了目標(biāo)板的根文件系統(tǒng)的移植。25沈陽(yáng)理工大學(xué)碩士學(xué)位論文第3章

設(shè)備驅(qū)動(dòng)程序的研究與實(shí)現(xiàn)3.1設(shè)備驅(qū)動(dòng)程序概述系統(tǒng)調(diào)用時(shí)操作系統(tǒng)內(nèi)核與應(yīng)用程序之間的接口,設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)內(nèi)核與機(jī)器硬件之間的接口。設(shè)備驅(qū)動(dòng)程序是內(nèi)核的一部分,它完成以下功能:1.對(duì)設(shè)備初始化和釋放2.把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù)3.讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序請(qǐng)求的數(shù)據(jù)4.檢測(cè)和處理設(shè)備出現(xiàn)的錯(cuò)誤3.1.1設(shè)備驅(qū)動(dòng)程序結(jié)構(gòu)Linux的設(shè)備驅(qū)動(dòng)程序可以分為3個(gè)主要組成部分:1.2.3.

自動(dòng)配置和初始化子程序,負(fù)責(zé)監(jiān)測(cè)所要驅(qū)動(dòng)的硬件設(shè)備是否存在和能否正常工作。如果該設(shè)備正常,則對(duì)這個(gè)設(shè)備及其相關(guān)的設(shè)備驅(qū)動(dòng)程序需要的軟件狀態(tài)進(jìn)行初始化。這部分驅(qū)動(dòng)程序僅在初始化時(shí)被調(diào)用一次。服務(wù)于I/O請(qǐng)求的子程序,又稱為驅(qū)動(dòng)程序的上半部分。調(diào)用這部分程序是由于系統(tǒng)調(diào)用的結(jié)果。這部分程序在執(zhí)行時(shí),系統(tǒng)認(rèn)為是與進(jìn)行調(diào)用的進(jìn)程屬于同一個(gè)進(jìn)程,只是由用戶態(tài)變成了核心態(tài),具有進(jìn)行此系統(tǒng)調(diào)用的用戶程序的運(yùn)行環(huán)境,因而可以在其中調(diào)用sleep()等與進(jìn)行運(yùn)行環(huán)境有關(guān)的函數(shù)。中斷服務(wù)子程序,又稱為驅(qū)動(dòng)程序的下半部分。在Linux系統(tǒng)中,并不是直接從中斷向量表中調(diào)用設(shè)備驅(qū)動(dòng)程序的中斷服務(wù)子程序,而是由Linux系統(tǒng)來(lái)接收硬件中斷,再由系統(tǒng)調(diào)用中斷服務(wù)子程序。中斷可以在任何一個(gè)進(jìn)程運(yùn)行時(shí)產(chǎn)生,因而在中斷服務(wù)程序被調(diào)用時(shí),不能依賴于任何進(jìn)程的狀態(tài),也就不能調(diào)用任何與進(jìn)程運(yùn)行環(huán)境有關(guān)的函數(shù)。因?yàn)樵O(shè)備驅(qū)動(dòng)程序一般支持同一類(lèi)型的若干設(shè)備,所以一般在系統(tǒng)調(diào)用中斷服務(wù)子程序時(shí),都帶有一個(gè)或多個(gè)參數(shù),以唯一標(biāo)識(shí)請(qǐng)求服務(wù)的設(shè)備。在系統(tǒng)內(nèi)部,I/O設(shè)備的存/取通過(guò)一組固定的入口點(diǎn)來(lái)進(jìn)行,這組入口點(diǎn)是由每個(gè)設(shè)備的驅(qū)動(dòng)程序提供的。具體到Linux系統(tǒng),設(shè)備驅(qū)動(dòng)程序所提供的這組入口點(diǎn)由一個(gè)文件26第3章

設(shè)備驅(qū)動(dòng)程序的研究與實(shí)現(xiàn)操作結(jié)構(gòu)來(lái)向系統(tǒng)進(jìn)行說(shuō)明。file_operation結(jié)構(gòu)定義于Linux/fs.h文件中。為了更好介紹Linux下的設(shè)備驅(qū)動(dòng)程序,本文詳細(xì)介紹了攝像頭驅(qū)動(dòng)程序的實(shí)現(xiàn)。3.2USB技術(shù)由于本課題采用的是帶USB接口的攝像頭,本文從三個(gè)角度對(duì)USB技術(shù)予以介紹,分別是USB的系統(tǒng)組成,USB設(shè)備類(lèi)協(xié)議,USB設(shè)備結(jié)構(gòu)。3.2.1USB系統(tǒng)組成1.USB主機(jī)USB主機(jī)是整個(gè)通信模式的核心,是整個(gè)USB系統(tǒng)的管理者。USB主機(jī)控制和調(diào)度連接到端口的全部設(shè)備的活動(dòng)。USB主機(jī)是整個(gè)USB系統(tǒng)中唯一需要系統(tǒng)資源(主機(jī)存儲(chǔ)器、I/O地址空間、RIQ等)的部分,而USB設(shè)備不再需要映射到相應(yīng)的主機(jī)存儲(chǔ)器和F0地址空間,也不需要RIQ。USB主機(jī)包含的USB主控制器(HostController)是主計(jì)算機(jī)系統(tǒng)上的USB接口,通過(guò)硬件、固件和軟件來(lái)共同實(shí)現(xiàn),負(fù)責(zé)完成主機(jī)和USB設(shè)備之間的數(shù)據(jù)傳輸。USB主控制器分為兩種類(lèi)型:開(kāi)放型主控制器(OHC)和通用型主控制器(UHC)。這種模式稱為基于主機(jī)的通信模式。USB主機(jī)中還可以含有客戶軟件,包含USB設(shè)備驅(qū)動(dòng)程序和界面應(yīng)用程序。用于和指定的USB設(shè)備進(jìn)行通信,根據(jù)具體設(shè)備和實(shí)現(xiàn)功能的不同而不同。USB協(xié)議中規(guī)定,在任何USB系統(tǒng)中只允許有一個(gè)USB主機(jī)。2.USB設(shè)備USB設(shè)備通常被分為兩類(lèi):集線器和功能設(shè)備。集線器(HUB)為USB系統(tǒng)提供額外的連接點(diǎn),用于擴(kuò)展主機(jī)的USB端口,使一個(gè)USB端口可以連接多個(gè)USB設(shè)備。功能設(shè)備則為系統(tǒng)提供特定的功能。每個(gè)功能設(shè)備都描述其功能和資源。需求的配置信息。因此在它們能被使用前必須由USB主機(jī)識(shí)別并進(jìn)行配置。通常,功能設(shè)備是一個(gè)獨(dú)立的外圍設(shè)備,具有單一的功能。現(xiàn)在,也出現(xiàn)了復(fù)合設(shè)備,集成了前兩者的功能,既可以提供額外的接入點(diǎn),又能完成一個(gè)或多個(gè)不同的功能。3.USB連接USB連接是指USB設(shè)備與主機(jī)之間進(jìn)行連接和通信的操作。USB采用層次星型的拓?fù)溥B接結(jié)構(gòu),這可以防止在USB系統(tǒng)中出現(xiàn)環(huán)形連接的情況。以USB集線器為每個(gè)27沈陽(yáng)理工大學(xué)碩士學(xué)位論文星型的核心,每條線段采用點(diǎn)到點(diǎn)的連接方式,連接主機(jī)和集線器或其功能部件,或者連接集線器和集線器或其功能部件[19]。3.2.2Linux操作系統(tǒng)中USB驅(qū)動(dòng)結(jié)構(gòu)Linux中的USB子系統(tǒng)核心模塊為USBCore模塊,它為USB驅(qū)動(dòng)(device和HC)提供了一個(gè)用于訪問(wèn)和控制USB硬件的統(tǒng)一接口。如圖3.1所示:應(yīng)用程序發(fā)出的USB請(qǐng)求塊(urb)經(jīng)過(guò)USB設(shè)備驅(qū)動(dòng)和USBcore后到達(dá)USB主機(jī)控制器(HC),主機(jī)控制器解析urb后將數(shù)據(jù)發(fā)送到指定的USB設(shè)備上來(lái)。圖3.1USB驅(qū)動(dòng)結(jié)構(gòu)3.3攝像頭的工作原理攝像頭包括:鏡頭、圖像傳感器、預(yù)中放、AGC、A/D、同步信號(hào)發(fā)生器、驅(qū)動(dòng)器、圖像信號(hào)形成電路、D/A轉(zhuǎn)換電路和電源的電路構(gòu)成。如圖3.2所示:鏡頭

A/D

USB接口

顯示器景物

圖象傳感器

數(shù)字信號(hào)處理芯片

電腦

圖象圖3.2攝像頭工作原理流程圖攝像頭的工作原理是:景物通過(guò)鏡頭(LENS)生成的光學(xué)圖像投射到圖像傳感器表面28第3章

設(shè)備驅(qū)動(dòng)程序的研究與實(shí)現(xiàn)上,然后轉(zhuǎn)為電信號(hào),經(jīng)過(guò)A/D(模數(shù)轉(zhuǎn)換)轉(zhuǎn)換后變?yōu)閿?shù)字圖像信號(hào),再送到數(shù)字信號(hào)處理芯片(DSP)中加工處理,再通過(guò)USB接口傳輸?shù)诫娔X中處理,通過(guò)顯示器就可以顯示圖像了。攝像頭的主要組件功能如下:1.圖像傳感器(SENSOR)一種半導(dǎo)體芯片,其表面包含有幾十萬(wàn)到幾百萬(wàn)的光電二極管。光電二極管受到光照射時(shí),就會(huì)產(chǎn)生電荷。ZC301采用CMOS圖像傳感器。2.3.

數(shù)字信號(hào)處理芯片DSP(DIGITALSIGNALPROCESSING)它通過(guò)一系列復(fù)雜的數(shù)學(xué)算法運(yùn)算,對(duì)數(shù)字圖像信號(hào)參數(shù)進(jìn)行優(yōu)化處理,并把處理后的信號(hào)通過(guò)USB等接口傳到PC等設(shè)備上。因此控制芯片的好壞,直接決定畫(huà)面品質(zhì)與流暢度,是否有不斷升級(jí)的驅(qū)動(dòng)程序也比較重要,新驅(qū)動(dòng)可以賦予其更強(qiáng)大的功能和使用效果。中星微(VIMICRO)301擁有影像光源自動(dòng)增益補(bǔ)強(qiáng)技術(shù),自動(dòng)曝光、自動(dòng)白平衡,色彩飽和度、對(duì)比度、邊緣增強(qiáng)以及伽馬矯正等先進(jìn)的影像控制技術(shù)。動(dòng)態(tài)畫(huà)面流暢驅(qū)動(dòng),實(shí)時(shí)還原真實(shí)場(chǎng)景,層次表現(xiàn)力很強(qiáng),圖像變化十分平滑,視覺(jué)效果十分舒適。接口針對(duì)攝像頭的接口,內(nèi)置了USB接口的支持模塊。這使得攝像頭的硬件檢測(cè),安裝變得比較方便,而且USB接口的最高傳輸率可達(dá)12兆/秒,這使高分辨率,真彩色的大容量圖像的實(shí)施傳送成為可能。攝像頭的數(shù)據(jù)傳輸過(guò)程如下:USB總線上信息傳輸類(lèi)型可分成控制、中斷、等時(shí)、成塊四種:其中控制型主要用于設(shè)備的“配置”與控制;中斷型主要用于主機(jī)對(duì)USB設(shè)備的周期性查詢;實(shí)時(shí)性使用與實(shí)時(shí)的音視頻信號(hào)傳輸;成塊型用于信息量大,沒(méi)有很強(qiáng)的時(shí)間要求,但要求可靠傳遞的應(yīng)用。對(duì)攝像頭而言,通常采用的是實(shí)時(shí)傳輸。USB設(shè)備端提供若干通信端口(port),主機(jī)與端口間建立起邏輯上的通信管道,進(jìn)行數(shù)據(jù)傳輸。在攝像頭的設(shè)備初始化階段,主機(jī)與0號(hào)端口通信,驅(qū)動(dòng)程序檢測(cè)攝像頭型號(hào)和所有端口信息;進(jìn)入數(shù)據(jù)傳輸階段,主機(jī)與探測(cè)到的實(shí)時(shí)輸入端口建立通信管道,實(shí)時(shí)回傳攝像頭拍攝到的圖像數(shù)據(jù)。USB主機(jī)控制器把每秒總線時(shí)間分成1024個(gè)固定大小的frame,每個(gè)frame占據(jù)1ms的時(shí)間帶寬并以此為時(shí)間單位遞增,同時(shí)對(duì)應(yīng)一個(gè)等時(shí)交互隊(duì)列。主機(jī)負(fù)責(zé)29沈陽(yáng)理工大學(xué)碩士學(xué)位論文把USB總線上回傳的等時(shí)圖像數(shù)據(jù)流量分配給各frame,USB主機(jī)控制器每一秒鐘掃描一遍所有frame,依次讀入各frame攜帶的等時(shí)數(shù)據(jù)包至內(nèi)核緩沖區(qū)中。應(yīng)用程序通過(guò)內(nèi)存映射,在用戶空間直接讀取內(nèi)核緩沖區(qū)內(nèi)容,存入Linux顯存幀緩沖(framebuffer)中,從而在顯示屏中出現(xiàn)圖像數(shù)據(jù)。3.4攝像頭驅(qū)動(dòng)程序的實(shí)現(xiàn)攝像頭屬于視頻類(lèi)設(shè)備。在目前的Linux核心中,視頻部分的標(biāo)準(zhǔn)是VideoforLinux(簡(jiǎn)稱V4L)。這個(gè)標(biāo)準(zhǔn)其實(shí)定義了一套接口,內(nèi)核、驅(qū)動(dòng)、應(yīng)用程序以這個(gè)接口為標(biāo)準(zhǔn)進(jìn)行交流。目前的V4L涵蓋了視、音頻流捕捉及處理等內(nèi)容,USB攝像頭也屬于它支持的范疇。因此,USB攝像頭的驅(qū)動(dòng)應(yīng)當(dāng)與內(nèi)核提供的視頻驅(qū)動(dòng)掛鉤。1.USB攝像頭驅(qū)動(dòng)基本框架程序首先進(jìn)入設(shè)備入口usb_zc_init函數(shù),在這個(gè)函數(shù)里對(duì)設(shè)備進(jìn)行配置和初始化。模塊的初始化函數(shù)負(fù)責(zé)注冊(cè)模塊所提供的任何設(shè)施,這里的設(shè)施指的是可以被應(yīng)用程序訪問(wèn)的新功能,它可能是一個(gè)完整的驅(qū)動(dòng)程序或者僅僅是一個(gè)新的軟件抽象。初始化函數(shù)如下所示:staticint__initusb_zc_init(void){}module_init(usb_zc_init);module_init的使用是強(qiáng)制性的,這個(gè)宏會(huì)在模塊的目標(biāo)代碼中增加一個(gè)特殊的段,用于說(shuō)明內(nèi)核初始化函數(shù)所在的位置。在驅(qū)動(dòng)程序中還要聲明一個(gè)video_device結(jié)構(gòu),并為其指定文件操作函數(shù)指針數(shù)fops,向系統(tǒng)注冊(cè)。在應(yīng)用程序發(fā)出文件操作的相關(guān)命令時(shí),核心根據(jù)這些指針調(diào)用相應(yīng)函數(shù),并將該結(jié)構(gòu)作為參數(shù)傳遞給它們。這樣,就完成了驅(qū)動(dòng)和核心之間的通信。例如:聲明驅(qū)動(dòng)的文件操作函數(shù)指針staticstructfile_operationszc_fops={……};在video_device結(jié)構(gòu)中,有一個(gè)私有指針priv,可以將它指向一塊保留內(nèi)存。在這塊內(nèi)存中,保存著本驅(qū)動(dòng)、本設(shè)備的相關(guān)初始化信息。這塊內(nèi)存的申請(qǐng)、初始化、指針指向等工作都是在USB驅(qū)動(dòng)的枚舉函數(shù).probe中完成。這樣,在枚舉函數(shù)將控制權(quán)返還給系統(tǒng)后,因?yàn)閮?nèi)核不銷(xiāo)毀保留內(nèi)存.probe函數(shù)具體聲明如下:30第3章

設(shè)備驅(qū)動(dòng)程序的研究與實(shí)現(xiàn)zc_probe(structusb_interface*intf,conststructusb_device_id*id)檢測(cè)硬件設(shè)備是否存在和能否正常工作,驅(qū)動(dòng)程序中的具體說(shuō)明如下:detect_Camera(structvdev*zc301x)還有,Linux系統(tǒng)中,文件操作通常是由read、write等系統(tǒng)調(diào)用來(lái)完成。這些系統(tǒng)調(diào)用在驅(qū)動(dòng)中的解決方法就是用copy_to_user()、copy_from_user()等函數(shù)在核心態(tài)、用戶態(tài)內(nèi)存空間中互相拷貝。但是對(duì)于大批量的圖像數(shù)據(jù),采用拷貝的方法顯然會(huì)增加時(shí)間開(kāi)銷(xiāo),因此用內(nèi)存映射的方法解決。首先使用vmalloc()申請(qǐng)足夠大的核態(tài)內(nèi)存,將其作為圖像數(shù)據(jù)緩沖空間,兩個(gè)URB帶回的圖像數(shù)據(jù)在這里暫存;然后使用remap_page_range()函數(shù)將其逐頁(yè)映射到用戶空間中。用戶態(tài)的圖像處理程序使用mmap()函數(shù),直接讀寫(xiě)核態(tài)圖像緩沖內(nèi)存,大大減少額外開(kāi)銷(xiāo)。2.USB攝像頭傳輸方式在USBl.1總線標(biāo)準(zhǔn)中定義了控制、中斷、批量、等時(shí)等四種管道。對(duì)于時(shí)間性極強(qiáng)但是準(zhǔn)確度要求不高的視頻捕捉應(yīng)用來(lái)說(shuō),攝像頭應(yīng)當(dāng)使用等時(shí)傳輸方式。為了盡可能快地得到圖像數(shù)據(jù),在URB中指定USB_ISO_ASAP標(biāo)志。urb->transfer_flags=USB_ISO_ASAP;Linux系統(tǒng)中任何USB傳輸都通過(guò)URB實(shí)現(xiàn)。為提高速度,可以考慮擴(kuò)大URB的緩沖,這樣可以降低每個(gè)USB事務(wù)中握手信息所占比例,提高有效數(shù)據(jù)的傳輸速度。但是受限于總線帶寬和具體的USB設(shè)備芯片,單純擴(kuò)大URB的緩沖不能無(wú)限制地解決問(wèn)題。具體分析一下USB傳輸在操作系統(tǒng)中的實(shí)現(xiàn):每次傳輸都要包括URB的建立、發(fā)出、回收、數(shù)據(jù)整理等階段,這些時(shí)間不產(chǎn)生有效數(shù)據(jù)。因此可以建立兩個(gè)URB,在等待一個(gè)URB被回收時(shí),也就是圖像正在被傳感器采集時(shí),處理、初始化另一個(gè)URB,并在回收后立刻將其發(fā)出。兩個(gè)URB交替使用,大大減少了額外

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論