近幾年,隨著計(jì)算機(jī)技術(shù)和電了技術(shù)的飛躍式發(fā)展,通過不斷的系統(tǒng)功能集成和優(yōu)化,網(wǎng)絡(luò)覆蓋面積和傳輸穩(wěn)定性日益增加,將傳統(tǒng)模擬視頻監(jiān)控系統(tǒng)中的模擬信號(hào)部分已舍棄,完成了全數(shù)字化的視頻監(jiān)控系統(tǒng),并加入了AD轉(zhuǎn)換功能,使整個(gè)視頻數(shù)據(jù)能在網(wǎng)絡(luò)上進(jìn)行傳輸,滿足了各類行業(yè)部門及家庭對(duì)網(wǎng)絡(luò)可視化業(yè)務(wù)的需求。這種全數(shù)字化的視頻監(jiān)控系統(tǒng)存系統(tǒng)設(shè)備規(guī)模和系統(tǒng)功能性上,較之前的模數(shù)混合型系統(tǒng),有了巨大的變化和升級(jí)。一般網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)只需要攝像機(jī)、路由器和計(jì)算機(jī)就能搭建,拓?fù)浣Y(jié)構(gòu)簡(jiǎn)單。利用計(jì)算機(jī)的強(qiáng)大的處理能力,改善了監(jiān)控系統(tǒng)的控制效率、提高了監(jiān)控系統(tǒng)的智能化和采集圖像的質(zhì)量?;诰W(wǎng)絡(luò)技術(shù)搭建的系統(tǒng)結(jié)構(gòu),結(jié)構(gòu)清晰、布線簡(jiǎn)單、系統(tǒng)擴(kuò)展性強(qiáng),并且一臺(tái)主控計(jì)算機(jī)再也不會(huì)像DVR一佯對(duì)于搭載的攝像機(jī)設(shè)備有數(shù)量限制,同時(shí)這種拓?fù)浣Y(jié)構(gòu)也降低了大型監(jiān)控系統(tǒng)的管理難度和維護(hù)維修成本。對(duì)于系統(tǒng)應(yīng)用層而的開發(fā)能在計(jì)算機(jī)這種統(tǒng)一的設(shè)計(jì)平臺(tái)上進(jìn)行,大大簡(jiǎn)化了對(duì)于特殊監(jiān)控系統(tǒng)的開發(fā)難度。
本設(shè)計(jì)決定選用行業(yè)內(nèi)較為成熟的TI公司DaVinci設(shè)計(jì)框架。該設(shè)計(jì)方案集成了ARM和DSP兩個(gè)部分,這種設(shè)計(jì)結(jié)構(gòu)將系統(tǒng)中的圖像處理模塊和攝像機(jī)控制模塊結(jié)合起來。
文中將描述基于TMS320DM365網(wǎng)絡(luò)攝像機(jī)的底層程序,包括了系統(tǒng)的內(nèi)核、驅(qū)動(dòng)、啟動(dòng)程序等,攝像機(jī)系統(tǒng)基于DaVinci框架。整個(gè)硬件基礎(chǔ)可以參考之前發(fā)表的文章《基于TMS320DM365的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)》。
1 DaVinci框架下的網(wǎng)絡(luò)攝像機(jī)結(jié)構(gòu)
1.1 DaVinci框架簡(jiǎn)介
DaVinci(達(dá)芬奇)框架是一套由TI公司提出的集成了DSP處理器、軟件、工具的綜合型解決方案系列,非常適合用于開發(fā)各類數(shù)字視頻終端設(shè)備,包括了數(shù)字音頻、視頻、成像、視覺應(yīng)用等。該技術(shù)的目的是讓開發(fā)廠商能夠更輕松、更快速地開發(fā)各種低成本的創(chuàng)新型數(shù)字視頻產(chǎn)品。Davinci技術(shù)系列組件,其中不僅包括了相應(yīng)的處理器、軟件、工具,還提供一系列的解決方案和技術(shù)支持等。由于基于DaVinci框架下設(shè)計(jì)出的產(chǎn)品之間兼容性和共通性很高,所以很多大型的公司也樂于使用TI的DaVinci解決方案,以增加自身產(chǎn)品在周邊行業(yè)內(nèi)的兼容性。并且DaVinci框架擁有一套全方位的軟件支持,提供了下至一般的操作系統(tǒng)驅(qū)動(dòng),上至應(yīng)用程序接口API,甚至DSP的編碼程序也是作為一個(gè)固有程序包,集成在BIOS和Code Server中。
1.2 DaVinci硬件基礎(chǔ)
作為底層驅(qū)動(dòng)軟件的基礎(chǔ),這里需要詳細(xì)對(duì)DaVinci框架的硬件結(jié)構(gòu)進(jìn)行描述。DaVinci數(shù)字視頻處理芯片是整個(gè)DaVinci技術(shù)框架的的核心,其最大特點(diǎn)為整個(gè)處理芯片集成了ARM和DSP兩種核心,實(shí)現(xiàn)了兩種核心的并行工作和通信機(jī)制。TMS320DM365作為DaVinci技術(shù)框架下的一款新型芯片,也和之前系列芯片擁有相同的系統(tǒng),一個(gè)通用的DaVinci系統(tǒng)結(jié)構(gòu)如圖1所示。
DSP即數(shù)字信號(hào)處理器,其主要特點(diǎn)就是能夠進(jìn)行大量的乘加運(yùn)算,擁有高速計(jì)算能力,并且DSP的數(shù)據(jù)和程序分離存儲(chǔ),這樣充分利用了所有線寬,進(jìn)一步加速了DSP的處理速度,在數(shù)字?jǐn)z像機(jī)中DSP專門用于計(jì)算量龐大的圖像處理算法。DSP其功能包括了VPSS(Video Process ing Subsystem)和VICP(Video Image Collaborative Processer)兩個(gè)部分。視頻處理系統(tǒng)VPSS是DM365的視頻信號(hào)采集模塊,與其他攝像機(jī)控制芯片相比,最顯著的特點(diǎn)是DM365帶有一個(gè)ISIF模塊,可以直接獲取CCD和CMOS的輸出圖像。相較于一般圖像處理芯片需要先一步進(jìn)行A /D處理,DM365能更加快速地獲取圖像信號(hào)。視頻/影像協(xié)處理器(VICP)作為DM365芯片中DSP部分的主體,主要功能是視頻圖像的壓縮算法,一般使用的H.264壓縮方式,其中還包括了運(yùn)動(dòng)補(bǔ)償、對(duì)象識(shí)別等算法,這些圖像處理算法占整個(gè)系統(tǒng)運(yùn)算量的600%~80%。
ARM處理器盡管沒有DSP那么快速的圖像處理速度,但是ARM較大的程序存儲(chǔ)量和迅速的任務(wù)切換能力,使得它適合復(fù)雜的、多線程的任務(wù)調(diào)控,支持實(shí)時(shí)的操作系統(tǒng)。ARM子系統(tǒng)管理和協(xié)調(diào)芯片內(nèi)其他功能模塊的工作,采用流水線的工作方式執(zhí)行系統(tǒng)控制任務(wù),例如系統(tǒng)的初始化、參數(shù)配置、電源管理和用戶功能等。
兩者之間的通訊方式如圖2所示,芯片中ARM可以訪問DSP的片內(nèi)存儲(chǔ)器,包括L2RAM和L1 P/D,DSP也可以訪問ARM的片內(nèi)存儲(chǔ)器,并且ARM和DSP共享DDR2和AEMIF,其中AEMIF是指異步的外接存儲(chǔ)器接口(Asynchronous External MemoryInterface)。因此通常情況下ARM只需要將處理數(shù)據(jù)的地址指針傳遞給DSP,而不需要大量的數(shù)據(jù)傳輸。系統(tǒng)中的DSP和ARM通過2個(gè)內(nèi)核相互中斷實(shí)現(xiàn)通信,ARM使用DSP的4個(gè)通用中斷和1個(gè)不可屏蔽中斷來控制DSP;而DSP通過兩個(gè)中斷來中斷ARM。DSP的電源、時(shí)鐘、復(fù)位都是由ARM進(jìn)行控制。
2 網(wǎng)絡(luò)攝像機(jī)的軟件結(jié)構(gòu)
由于DaVinci系統(tǒng)雙處理核心的硬件結(jié)構(gòu),整個(gè)DaVinci的軟件框架也類似于硬件框架分為ARM核心的軟件和DSP部分的軟件。整個(gè)軟件框架圖如圖3所示,ARM內(nèi)核中的軟件主要為操作系統(tǒng)、驅(qū)動(dòng)和應(yīng)用層面的軟件,DSP內(nèi)核里運(yùn)行音視頻編解碼算法處理,ARM通過TI的Codec Eng ine機(jī)制調(diào)用DSP完成編解碼。
在DSP部分,軟件由最底層的DSP/BIOSTM內(nèi)核,內(nèi)核上層是Codec engine,用于和ARM端的Linux通信,最頂層是圖像處理箅法。針對(duì)圖像處理算法,DaVinci框架提供了數(shù)字信號(hào)處理算法接口標(biāo)準(zhǔn)(XDAIS)和針對(duì)流媒體的XDM。所有符合XDAIS和XDM標(biāo)準(zhǔn)的圖像處理算法包都可以被用于DaVinci的DSP中。并且在XDAIS和XDM中也包括了一套流程完整的基礎(chǔ)的圖像處理算法,用戶可以按照其標(biāo)準(zhǔn)進(jìn)行修改,或者自行重新開發(fā)。再加上由第三方開發(fā)的符合XDM標(biāo)準(zhǔn)的軟件包,地豐富了整個(gè)DSP圖像處理軟件部分的資源。
ARM部分的軟件系統(tǒng)使用基于Linux的嵌入式軟件系統(tǒng),軟件結(jié)構(gòu)如圖4所示。整個(gè)系統(tǒng)基于Linux的實(shí)時(shí)操作系統(tǒng),在Linux上需要加入文件系統(tǒng)、圖形用戶接口和任務(wù)管理,最頂層是應(yīng)用層面的軟件,在應(yīng)用軟件中DaVinci系統(tǒng)只提供常用的API。
Linux實(shí)時(shí)操作系統(tǒng)中,應(yīng)用程序、引導(dǎo)加載程序(Boot Loader)、驅(qū)動(dòng)程序(Driver)和操作系統(tǒng)(Operating System)的內(nèi)核鏡像都是相互獨(dú)立的,可以單獨(dú)編譯修改。只要符合各個(gè)部分特有的接口和程序存放位置,就能被整個(gè)系統(tǒng)識(shí)別并且調(diào)用。引導(dǎo)程序是UBL和u-boot,用于初始化硬件系統(tǒng),引導(dǎo)Linux操作系統(tǒng)的加載,完成內(nèi)核文件加載后,將控制權(quán)交給操作系統(tǒng)。操作系統(tǒng)的內(nèi)核鏡像uImage,是一個(gè)基礎(chǔ)的操作系統(tǒng)平臺(tái),調(diào)用驅(qū)動(dòng)程序和應(yīng)用程序,實(shí)現(xiàn)多線程機(jī)制,完成了系統(tǒng)調(diào)用等工作。驅(qū)動(dòng)程序和應(yīng)用程序是事先存儲(chǔ)在操作系統(tǒng)特定文件夾內(nèi)的,被操作系統(tǒng)Linux按順序調(diào)用,開發(fā)者可以根據(jù)自己的需要自行修改。Linux內(nèi)的文件系統(tǒng)主要提供內(nèi)核中所有文件的存儲(chǔ)、檢索和更新等功能,同樣包括了驅(qū)動(dòng)程序和應(yīng)用程序的文件操作。一般不提供保護(hù)和加密等安全機(jī)制。文件系統(tǒng)通過調(diào)用和命令方式提供文件的各種操作,主要包括設(shè)置、修改對(duì)文件和目錄的用戶權(quán)限;提供針對(duì)目錄的創(chuàng)建、修改和刪除等功能;提供針對(duì)文件的創(chuàng)建、打開、讀寫、關(guān)閉和撤銷等功能。
對(duì)于應(yīng)用層面的開發(fā)而言,并不需要考慮DSP部分的圖像處理實(shí)現(xiàn)算法,直接將DSP部分作為一個(gè)黑箱進(jìn)行處理,通過圖像服務(wù)接口,從ARM部分通過語句進(jìn)行調(diào)用。圖像服務(wù)的接口提供了用戶調(diào)用DSP中的圖像處理程序的接口,整個(gè)服務(wù)接口使用Codec中間框架系統(tǒng)。Linux端的程序通過Codec引擎訪問DSP處理器中的Codec Server。整個(gè)Codec框架包括了多種API和SPI,從軟件角度可以看做是一個(gè)介于應(yīng)用程序和DSP中圖像處理算法之間的接口,如圖5所示。這樣ARM端的應(yīng)用程序開發(fā)者,可以不用去考慮DSP中復(fù)雜的音視頻算法。
這種ARM和DSP分開的軟件結(jié)構(gòu),使得整個(gè)Davinci框架下的系統(tǒng)的軟件開發(fā)被分成了四個(gè)部分:圖像算法開發(fā)、Codec Server集成開發(fā)、CodecEngine集成開發(fā)和應(yīng)用程序開發(fā)?;A(chǔ)的圖像算法可以通過TI提供的CCS開發(fā)工具,圖像的編碼算法被存儲(chǔ)為.lib的庫文件。而Codec Server的開發(fā)是調(diào)用一系列的.lib算法庫,實(shí)現(xiàn)各種庫文件的對(duì)ARM部分的接口。Ciodec Engine是開發(fā)調(diào)用Codec Server的Stuh和Skelet on,完善整個(gè)圖像處理功能的調(diào)用,而面向廠商或是使用者的應(yīng)用程序的開發(fā),只需要針對(duì)不同應(yīng)用情況編譯基于Linux的應(yīng)用程序,其中圖像處理算法等內(nèi)容,作為黑箱供這些使用者調(diào)用。
3 網(wǎng)絡(luò)攝像機(jī)底層軟件
3.1 Linux系統(tǒng)內(nèi)核
Linux系統(tǒng)內(nèi)核使用的linux-2.6.32,相較于之前的版本增添了虛擬化內(nèi)存、改進(jìn)了文件系統(tǒng)、支持低傳輸延遲時(shí)間模式、內(nèi)存控制器支持SOFtlimits、支持S+Core架構(gòu)、支持Intel Moorestown及其新的固件接口、支持運(yùn)行時(shí)電源管理、以及新的驅(qū)動(dòng)。常用的LINUX操作系RADHAT Enterprise 6,ubuntu-10.04.debian 6.穩(wěn)定版本,這些都是使用linux-2.6.32內(nèi)核。Linux-2.632作為ARM部分所使用的基層操作系統(tǒng),在TI上也有提供,不過所提供的是一個(gè)非常寬泛的、適用于多種DaVinci框架內(nèi)核產(chǎn)品的一個(gè)完整內(nèi)核,無論是功能還是驅(qū)動(dòng)都非常完善,但是缺點(diǎn)是啟動(dòng)時(shí)間長、容量大,所以我們必須存原有的TI系統(tǒng)內(nèi)核的基礎(chǔ)上進(jìn)行一定的修改。整個(gè)修改基于Linux操作系統(tǒng)運(yùn)行。
第一步是系統(tǒng)內(nèi)核的精簡(jiǎn)開始。整個(gè)精簡(jiǎn)過程主要是在內(nèi)核文件中刪除自己不需要使用東西,如平臺(tái)信息、芯片信息和驅(qū)動(dòng)等,并且在Kconfig和Makefile里面將刪除信息屏蔽。首先完成在內(nèi)核系統(tǒng)中平臺(tái)信息和芯片信息的文件刪減,然后通過Makefile文件重新修改編譯方法,經(jīng)過重新編譯以后,內(nèi)核的精簡(jiǎn)已經(jīng)完成,在Linux環(huán)境中使用tar jcf或tar zcf壓縮的Linux內(nèi)核,整個(gè)內(nèi)核的大小下降到了51M,相當(dāng)于原來尺寸的二分之一。當(dāng)然可以化簡(jiǎn)的還可以包括了include和driver里面的一些不需要使用的驅(qū)動(dòng),但是由于大小并不是很大,所以這里也就沒有去除。
第二步開始內(nèi)核系統(tǒng)的配置。因?yàn)橹耙呀?jīng)修改了內(nèi)核系統(tǒng)文件的內(nèi)容,選項(xiàng)即使都已經(jīng)按照默認(rèn)的方式配置完畢,但是存細(xì)部還需要一定的修改,使用make linux_config進(jìn)入內(nèi)核配置界面。首先需要修改的是“General setup”內(nèi)的晶振,將原本27000000所表示27MHz時(shí)鐘參數(shù),改為硬件使用的24MHz時(shí)鐘。然后在“Device Drivers”中配置NAND flash的大小、分塊信息;USB的驅(qū)動(dòng)設(shè)置一般設(shè)定為主機(jī)用于,識(shí)別U盤等其他USB設(shè)備;在選擇視頻傳輸?shù)姆绞降臅r(shí)候,需要選擇以太網(wǎng)絡(luò)的“10M or 100M Ethernet MAC support”傳輸方式:并且開啟I2C和串口功能等。
第三步檢測(cè)核對(duì)程序內(nèi)核,確保底層功能程序與硬件設(shè)備的匹配。最重要的machdavinci\dm365.c,內(nèi)部都是管腳定義包括了I/O口的
復(fù)用。sound\soc\codecs有tlv320aicxx.c等音頻芯片驅(qū)動(dòng):soc\davinci里有PCM、I2S等驅(qū)動(dòng)。完成所有檢測(cè)核對(duì)之后,用make指令編輯linux內(nèi)核,生產(chǎn)一個(gè)bin文件,燒錄到DM365處理器中,即可運(yùn)行系統(tǒng)內(nèi)核。
3.2 啟動(dòng)程序
Bootloader是嵌入式系統(tǒng)啟動(dòng)之后加載的第一段程序,也就是俗稱的啟動(dòng)程序,這段代碼一般用于初始化處理芯片,映射內(nèi)存空間,完成系統(tǒng)基本硬件設(shè)置,為之后的操作系統(tǒng)內(nèi)核提供運(yùn)行環(huán)境及。所以這段程序的長度和運(yùn)行時(shí)間都非常短,但對(duì)于整個(gè)系統(tǒng)來說是非常重要的。文中使用u-boot作為Bootloader程序,作為一種通用程序,它支持多種體系結(jié)構(gòu)的處理器。其功能涵蓋了flash燒寫、操作系統(tǒng)內(nèi)核啟動(dòng)等功能。整個(gè)u-boot的軟件流程如圖6所示。
整個(gè)u-boot的啟動(dòng)過程可以分為三個(gè)階段。首先在flash中啟動(dòng)代碼,設(shè)置異常的入口地址和異常處理函數(shù)、配置系統(tǒng)主頻、I/O寄存器初始化、初始化存儲(chǔ)空間,然后將之后的程序加載到RAM中,起始地址設(shè)定,并在RAM中運(yùn)行,設(shè)置硬件系統(tǒng)結(jié)構(gòu)類型、啟動(dòng)參數(shù)地址、打開芯片外圍設(shè)備的使能端、設(shè)置內(nèi)核參數(shù)、復(fù)制鏡像文件和設(shè)置入口函數(shù)。最后運(yùn)行嵌入式系統(tǒng)內(nèi)核鏡像。
將u-boot系列文件導(dǎo)入攝像機(jī)后開啟電源,通過RS232串口,可以讀取系統(tǒng)的啟動(dòng)信息。整個(gè)啟動(dòng)過程可以分為三個(gè)不同階段。第一階段首先u-boot驅(qū)動(dòng)先確定啟動(dòng)的ubl版本和啟動(dòng)方式,檢測(cè)Flash和總線狀態(tài),一般傳統(tǒng)的啟動(dòng)方式為NANDFlash啟動(dòng)。第二階段確認(rèn)RAM等基本傳輸硬件狀態(tài),檢測(cè)時(shí)鐘信號(hào),接下來開始將Flash中的u-boot啟動(dòng)程序轉(zhuǎn)入RAM中。最后一階段檢測(cè)所有的硬件信息,并將這些信息傳給Linux內(nèi)核,然后運(yùn)行Linux內(nèi)核,當(dāng)硬件信息有錯(cuò)誤時(shí),會(huì)跳出錯(cuò)誤報(bào)告。所檢測(cè)的硬件信息主要有:CPU內(nèi)核和狀態(tài)、PLL狀態(tài)、RAM存儲(chǔ)器、TCP網(wǎng)絡(luò)協(xié)議、I/O口等。這一步驟結(jié)束后,系統(tǒng)地控制權(quán)將完全轉(zhuǎn)交給Linux。啟動(dòng)一系列內(nèi)核文件后,會(huì)出現(xiàn)Linux的用戶登錄界面。
完成所有硬件檢測(cè)和驅(qū)動(dòng)安裝以后,高清網(wǎng)絡(luò)攝像機(jī)的所有硬件都開始工作,并且擁有最基本的功能,能夠傳輸模擬視頻信號(hào),并且可以登錄網(wǎng)絡(luò),自動(dòng)獲得IP地址。但是通過游覽器進(jìn)行圖像的獲取,需要進(jìn)一步燒錄應(yīng)用程序。同時(shí),還可以通過串口實(shí)時(shí)地設(shè)置攝像機(jī)內(nèi)Linux內(nèi)核的設(shè)置。
3.3 驅(qū)動(dòng)程序移植
驅(qū)動(dòng)程序是硬件運(yùn)行功能實(shí)現(xiàn)的基礎(chǔ)。由于所設(shè)計(jì)的DM365網(wǎng)絡(luò)攝像機(jī)配有USB等多功能通用硬件接口,所以即使是成品之后,處于擴(kuò)展的原因,新硬件的添加也會(huì)非常頻繁,這里就必須讓設(shè)備驅(qū)動(dòng)也更新。這里我們想使用一個(gè)最簡(jiǎn)便的GPIO驅(qū)動(dòng)程序來作為一個(gè)驅(qū)動(dòng)程序移植的范例。
驅(qū)動(dòng)移植的一個(gè)整體流程,是將針對(duì)某一硬件功能的驅(qū)動(dòng)軟件加入Linux嵌入式調(diào)用的特殊語句,并且存放在內(nèi)核操作系統(tǒng)特定的存放位置,修改內(nèi)核配置文件,使這個(gè)驅(qū)動(dòng)能被調(diào)用。完成這些修改之后,就能在應(yīng)用程序?qū)用媸褂眠@個(gè)硬件設(shè)備了。
首先是對(duì)CPIO驅(qū)動(dòng)源碼的修改和放置,GPIO是嵌入式系統(tǒng)最簡(jiǎn)單、最常用的資源了,比如點(diǎn)亮LED,控制蜂嗚器,輸出高低電平,檢測(cè)按鍵,等等。GPIO分輸入和輸出,在linux-2.6.32內(nèi)核中,本來就有有關(guān)GPIO的最底層的寄存器驅(qū)動(dòng),所以不用另外新建驅(qū)動(dòng)程序,其位置是在\arch\arm\mach-dayrinci目錄下的gpio.c,這個(gè)是寄存器級(jí)的驅(qū)動(dòng),與一般單片機(jī)MCU一樣,GPIO的設(shè)置都是通過特殊寄存器的數(shù)值決定的。據(jù)DM365的芯片DATASHEET,DM365的CPIO分為3組BANK,BANK01組包括GPIO0~GPIO31,BANK23組包括GPIO32~GPIO63,BANK45組包括GPIO64~GPIO70,由于硬件資源的原因,DM365并不是GPIO管腳就是純粹的GPIO腳,GPIO管腳和其他一些標(biāo)準(zhǔn)接口復(fù)用相同的引腳,比如SPI和GPIO復(fù)用,I2C和CPIO復(fù)用等,到底是使用CPIO還是其他接口,在初始化的時(shí)候,都需要對(duì)PINMUX0和PINMUX1兩個(gè)寄存器進(jìn)行設(shè)置,而這兩個(gè)寄存器的設(shè)置則在\arch\arm\mach-davrinci目錄下mux_cfg.c和對(duì)應(yīng)的mux.h里,當(dāng)然如果只是用一些只作為I/O功能的管腳,則不需要對(duì)著兩個(gè)寄存器進(jìn)行設(shè)置相較于單片機(jī)對(duì)于I/O口的設(shè)置,DM365的GPIO驅(qū)動(dòng)多了一些嵌入式系統(tǒng)特有的功能語句。比如:需要定義一個(gè)設(shè)備名稱用于程序內(nèi)部的調(diào)用,#define DEVICE_NAME“dm365_gpios” /*定義設(shè)備驅(qū)動(dòng)的名字,或設(shè)備節(jié)點(diǎn)名稱*/并且定義驅(qū)動(dòng)文件的API,在Linux系統(tǒng)當(dāng)中,所有設(shè)備都可以當(dāng)做文件進(jìn)行操作。
static const struct file_operations
davinci_dm365_gpio_fileops={
.owner=THIS_MODULE,
.open=davinci_dm365_gpio_open,
.ioctl=davinci_dm365_gpio_ioctl,
};
定義內(nèi)核初始化的函數(shù)功能,這一部分是ARM最基礎(chǔ)的IO口這幾方法,這里就不進(jìn)行詳細(xì)介紹。
完整這些內(nèi)容后,這個(gè)GPIO的驅(qū)動(dòng)程序就可以被Linux系統(tǒng)內(nèi)核調(diào)用了。之后修改內(nèi)核文件的設(shè)置,修改Kconfig文件,加入一段GPIO設(shè)置,說明GPIO驅(qū)動(dòng)功能等。存makefile文件的128行,加入語句:ohi-$(DAVINCI_DM365_GPIOS)+=dm365_gpios.o,輸出之前驅(qū)動(dòng)軟件的.o ut文件,這樣整個(gè)內(nèi)核配置完成。之后這個(gè)I/O口的驅(qū)動(dòng)程序就可以在應(yīng)用程序中利用語句:fd=open(“/dev/dm365_gpios”,0);來運(yùn)行。
這里使用了一個(gè)較為簡(jiǎn)單常見的GPIO驅(qū)動(dòng)來舉例,是為了更簡(jiǎn)單地描述整個(gè)Linux嵌入式系統(tǒng)驅(qū)動(dòng)軟件的移植過程。對(duì)于其他更為專業(yè)的硬件驅(qū)動(dòng),如usb設(shè)備、無線網(wǎng)絡(luò)設(shè)備等,一般建議從設(shè)備購買商那邊獲取面向Linux的驅(qū)動(dòng)軟件,然后經(jīng)過部分修改后移植進(jìn)入Linux內(nèi)核中,最后修改設(shè)置文件和makefile文件完成驅(qū)動(dòng)的調(diào)用功能。
4 結(jié)束語
網(wǎng)絡(luò)攝像機(jī),簡(jiǎn)化了傳統(tǒng)的以DVR和NVR作為系統(tǒng)的核心的網(wǎng)絡(luò)監(jiān)控系統(tǒng)。每個(gè)攝像頭都可以作為一個(gè)獨(dú)立的視頻監(jiān)控系統(tǒng),擁有網(wǎng)絡(luò)傳輸功能和IP地址。系統(tǒng)結(jié)構(gòu)上能夠更具有邏輯性和層次性,系統(tǒng)組件也更為便利、有很大的擴(kuò)展能力,方便了跨地域的大型監(jiān)控系統(tǒng)組建和訪問。而這種硬件結(jié)構(gòu)上優(yōu)化的基礎(chǔ)就是一個(gè)功能強(qiáng)大、擴(kuò)展性好的軟件平臺(tái),整個(gè)DM365網(wǎng)絡(luò)攝像機(jī)在軟件方面選用了擁有豐富源代碼和極高穩(wěn)定性的Linux操作系統(tǒng),并在該基礎(chǔ)上實(shí)現(xiàn)了底層軟件和上層應(yīng)用程序的設(shè)計(jì)分離,使得整個(gè)系統(tǒng)的軟件開發(fā)和使用更為方便和高效。本文詳細(xì)描述基于DM365的網(wǎng)絡(luò)攝像機(jī)的底層軟件應(yīng)用,包括了整個(gè)系統(tǒng)的軟件結(jié)構(gòu)、驅(qū)動(dòng)軟件的移植、內(nèi)核系統(tǒng)的優(yōu)化和啟動(dòng)程序加載等應(yīng)用性問題。
評(píng)論
查看更多