文獻(xiàn)標(biāo)志碼: A
文章編號(hào): 0258-7998(2013)02-0006-03
目前市場(chǎng)上有良好控制功能的處理器很多,,但是這些處理器大多在數(shù)據(jù)處理能力方面略顯不足,。因此,美國(guó)德州儀器(TI)公司于2009推出了一款多核處理器OMAP3530,,它采用了600 MHz ARM Cortex-A8內(nèi)核與420 MHz TMS320C64+TM DSP雙核結(jié)構(gòu)[1-2],。由于ARM在工業(yè)控制方面具有很大的優(yōu)勢(shì)以及DSP具有良好的數(shù)據(jù)處理能力,所以O(shè)MAP3530在嵌入式系統(tǒng)的應(yīng)用開發(fā)方面有著廣泛的應(yīng)用前景和技術(shù)潛力,。
要使OMAP3530發(fā)揮ARM+DSP雙核架構(gòu)的優(yōu)勢(shì),,必須要使ARM和DSP協(xié)同工作。目前關(guān)于如何使ARM和DSP協(xié)同工作的參考資料不多,,因此本文在研究實(shí)踐的基礎(chǔ)上,,就如何搭建協(xié)同開發(fā)環(huán)境以及ARM和DSP協(xié)同開發(fā)方法進(jìn)行了說明。
1 開發(fā)環(huán)境的搭建
1.1 PC端系統(tǒng)的搭建
OMAP3530幾乎支持所有嵌入式操作系統(tǒng)(例如WinCE,、Symbian OS,、EPOC、Linux等),,由于大部分嵌入式操作系統(tǒng)都要收費(fèi),所以這里采用Linux系統(tǒng),,它不僅應(yīng)用廣泛,,而且免費(fèi)和開源,。
為了能夠開發(fā)OMAP3530,首先要搭建開發(fā)環(huán)境,,在PC端,,需要安裝虛擬機(jī)VMware Workstation,配置超級(jí)終端,;然后在虛擬機(jī)上安裝Linux操作系統(tǒng),。除此之外,還需要在Linux系統(tǒng)上安裝交叉編譯器,、NFS服務(wù)器,、FTP服務(wù)器等一些必要的開發(fā)工具。
1.2 OMAP3530系統(tǒng)啟動(dòng)方式及分析
OMAP3530上運(yùn)行的Linux系統(tǒng)的組成結(jié)構(gòu)如圖1所示,。其中,,x-loader是一級(jí)引導(dǎo)程序,主要作用是初始化CPU和拷貝u-boot到內(nèi)存中運(yùn)行[3],,然后把控制權(quán)交給u-boot,。u-boot為二級(jí)引導(dǎo)程序,主要用于與用戶進(jìn)行交互,,以及提供鏡像更新,、引導(dǎo)內(nèi)核等功能。kernel為L(zhǎng)inux內(nèi)核,,是操作系統(tǒng)的核心,,負(fù)責(zé)管理系統(tǒng)的進(jìn)程、內(nèi)存,、設(shè)備驅(qū)動(dòng)程序,、文件和網(wǎng)絡(luò)系統(tǒng),決定著系統(tǒng)的性能和穩(wěn)定性,。rootfs為根文件系統(tǒng),,在嵌入式Linux操作系統(tǒng)中,文件系統(tǒng)作為操作系統(tǒng)的重要組成部分,,用于控制對(duì)數(shù)據(jù)文件及設(shè)備的存取,,并提供對(duì)文件和目錄的分層組織形式、數(shù)據(jù)緩沖以及對(duì)文件存取權(quán)限的控制,。根文件系統(tǒng)是Linux系統(tǒng)不可或缺的組件,,在嵌入式Linux中,內(nèi)核在啟動(dòng)期間,,必須調(diào)用根文件系統(tǒng)才能啟動(dòng),。Linux系統(tǒng)將自身劃分為兩部分,一部分為核心軟件,即kernel(也稱作內(nèi)核空間),;另一部分為普通應(yīng)用程序,,這部分稱為用戶空間(user area)。
可以通過配置及編譯x-loader,、u-boot,、kernel、busybox源碼文件來獲得OMAP3530所需的鏡像文件,,然后把鏡像文件拷貝進(jìn)SD卡,,這樣就可通過SD卡啟動(dòng)Linux系統(tǒng)。
為了便于開發(fā),,通常使用交叉網(wǎng)線連接PC和OMAP3530開發(fā)板,,然后通過由NFS掛載根文件系統(tǒng)的方法來啟動(dòng)Linux系統(tǒng)。該方法的好處是能直接在虛擬機(jī)中修改OMAP3530端Linux的文件系統(tǒng),,就可以直接在PC上開發(fā)OMAP3530端的程序,。
2 搭建ARM與DSP之間的橋梁
2.1 DVSDK簡(jiǎn)介
為了使ARM與DSP建立連接,TI公司推出了DVSDK(Digital Video Software Development Kit)軟件開發(fā)包,,它集成了多種軟件工具,,包括支持獨(dú)立DSP處理器和ARM處理器組件以及雙核系統(tǒng)交互組件,各個(gè)組件之間緊密聯(lián)系,,形成了完整的開發(fā)套件[4-5],。DVSDK部分軟件模塊介紹如下。
(1)DSP/BIOS for Linux:是一個(gè)可擴(kuò)縮的實(shí)時(shí)DSP核,,可以理解為在DSP端獨(dú)立運(yùn)行的實(shí)時(shí)系統(tǒng),。
(2)TI Codegen Tools for Linux:是Linux環(huán)境下DSP程序的編譯器、連接器及相關(guān)工具,,類似于Windows環(huán)境下的CCS軟件(在Windows環(huán)境下的CCS軟件用來編譯和調(diào)試DSP程序),。
(3)Framework Component:負(fù)責(zé)DSP端的Memory和DMA資源管理。
(4)xDAIS:定義了DSP算法接口的標(biāo)準(zhǔn),。
(5)DSP/BIOS Link:是實(shí)現(xiàn)ARM和DSP之間通信的底層軟件,。
(6)Codec Engine:是DVSDK的核心,所有其他軟件模塊基本上都是圍繞Codec Engine來設(shè)計(jì)的,。
2.2 DVSDK的安裝與編譯
首先要在虛擬機(jī)上的Linux系統(tǒng)中安裝DVSDK軟件包,。DVSDK軟件包可以從TI公司的官方網(wǎng)站上獲取,軟件包獲取后執(zhí)行如下命令即可實(shí)現(xiàn)其安裝:
./ dvsdk_setuplinux_3_01_00_10.bin
完成安裝后會(huì)生成一個(gè)文件夾,,里面包含了所有DVSDK軟件模塊,。然后還需要對(duì)DVSDK內(nèi)部的一些文件進(jìn)行配置,主要的配置是指定各個(gè)模塊編譯所需要的編譯工具以及相應(yīng)目錄的相對(duì)位置,,配置好以后就可以對(duì)各個(gè)模塊進(jìn)行編譯,。
編譯成功后,,在DVSDK相應(yīng)的目錄下會(huì)生成cmem.ko(內(nèi)存管理模塊)、dsplink.ko(ARM與DSP連接模塊),、lpm_omap3530.ko(電源管理模塊)等內(nèi)核模塊,。為了使ARM與DSP建立連接,,必須要有DSPLINK模塊的支持,,系統(tǒng)需要通過DSPLINK來完成ARM與DSP端之間底層的數(shù)據(jù)通信。DSPLINK提供了一套通用的API,,從應(yīng)用層抽象出ARM與DSP的物理連接特性,,從而降低用戶開發(fā)程序的難度。
2.3 內(nèi)存的分配
由于ARM端運(yùn)行的是Linux操作系統(tǒng),,DSP端運(yùn)行的是DSP/BIOS操作系統(tǒng),,為了使兩個(gè)系統(tǒng)協(xié)同工作,兩者之間需要開辟一塊ARM端和DSP端共享的內(nèi)存空間,。這部分的工作由CMEM來完成,,所以在加載cmem.ko時(shí),需要對(duì)其進(jìn)行內(nèi)存分配設(shè)置,。CMEM還能夠?qū)?nèi)存的物理地址轉(zhuǎn)化為操作系統(tǒng)能夠識(shí)別的虛擬地址,,避免了操作系統(tǒng)對(duì)物理地址的直接訪問。這樣無論是Linux操作系統(tǒng)還是DSP/BIOS操作系統(tǒng)都是通過CMEM對(duì)內(nèi)存進(jìn)行管理,。
加載完上述各個(gè)功能模塊后就可以開發(fā)可供ARM端調(diào)用的DSP程序,。
3 供ARM端調(diào)用的DSP程序的開發(fā)
為了開發(fā)可供ARM端調(diào)用的DSP程序,必須了解Codec Engine,。Codec Engine是連接ARM和DSP協(xié)處理器的橋梁,,是介于應(yīng)用層(ARM端的應(yīng)用程序)和信號(hào)處理層(DSP端的算法程序)之間的軟件模塊。在編譯DSP端和ARM端程序時(shí),,都需要Codec Engine的支持,。當(dāng)ARM端應(yīng)用程序調(diào)用Codec Engine的VISA(Video,Image,,Speech,,Audio)API,例如圖2中VIDENC_process(a,,b,,c)時(shí),Codec Engine的stub(ARM端)會(huì)把參數(shù)a,、b,、c以及要調(diào)用DSP端的process信息打包,通過消息隊(duì)列(message queue)傳遞到DSP,。Codec Engine的skeleton(DSP端)會(huì)解開這個(gè)參數(shù)包,,把參數(shù)a、b、c轉(zhuǎn)換成DSP端對(duì)應(yīng)的參數(shù)x,、y,、z;DSP端的server會(huì)根據(jù)process這一信息創(chuàng)建一個(gè)DSP端的process(x,,y,,z)任務(wù),最終實(shí)現(xiàn)VIDENC_process(a,,b,,c)的操作。
DSP端的算法程序開發(fā)一般有兩種:
(1)在Windows的CCS下直接開發(fā)DSP端運(yùn)行的程序,,然后打包成固定的格式,,使其能夠被Codec Engine調(diào)用。這種方法的優(yōu)點(diǎn)是能夠通過優(yōu)化程序最大限度地提高DSP的運(yùn)行效率,。目前大多數(shù)DSP雖然都支持C語言編程,,但是在實(shí)際工程應(yīng)用中,具體的算法模塊以及比較耗時(shí)的功能模塊還是采用匯編語言來編寫,。這是因?yàn)镃語言雖然具有易讀性,、可移植性等優(yōu)點(diǎn),但是它不便于對(duì)系統(tǒng)硬件資源的直接控制,,無法發(fā)揮DSP自身的特點(diǎn),,無法充分利用DSP系統(tǒng)結(jié)構(gòu)中有限的資源。特別是在硬實(shí)時(shí)性系統(tǒng)中,,用匯編語言進(jìn)行編程可利用DSP自身硬件結(jié)構(gòu)的特點(diǎn)對(duì)匯編程序進(jìn)行優(yōu)化和精簡(jiǎn),,往往能夠使一些復(fù)雜的算法及功能模塊在實(shí)時(shí)性方面取得非常好的效果。但是這種方法也有其缺點(diǎn),,那就是算法程序的可移植性非常差,,基本上針對(duì)每一個(gè)應(yīng)用都要開發(fā)不同的DSP程序,這是比較致命的問題,。
(2)通過DVSDK開發(fā)套件在宿主機(jī)上直接開發(fā)算法程序,,其開發(fā)方法遵照TI公司制訂的基于eXpressDSP算法互用性標(biāo)準(zhǔn)。這種方法雖然會(huì)使DSP的運(yùn)行效率受到一定影響,,但為系統(tǒng)的整體性能和二次開發(fā)提供了可靠的保證,。下面以示例程序來說明其開發(fā)方法。
①進(jìn)入DVSDK安裝后生成目錄/dvsdk_3_01_00_10/codec_engine_2_25_02_11/examples/ti/sdo/ce/examples/codecs/imgdec_copy,,如圖3所示,。該目錄下的程序是DVSDK提供的示例程序,其中imgdec_copy.c是DSP端的程序,,該程序?qū)崿F(xiàn)了將ARM端讀進(jìn)的in.bmp圖像拷貝成當(dāng)前目錄下的out.bmp圖像的功能,。
③編譯ARM端的程序,。進(jìn)入ARM端應(yīng)用程序目錄/dvsdk_3_01_00_10/codec_engine_2_25_02_11/examples/ti/sdo/ce/examples/apps/image_copy,如圖7所示,。該目錄下app.c是在ARM端運(yùn)行的應(yīng)用程序,,該程序的主要功能就是從當(dāng)前目錄讀取in.bmp文件,然后調(diào)用DSP端的程序,,讓DSP去實(shí)現(xiàn)圖像拷貝,。對(duì)該程序進(jìn)行編譯(執(zhí)行make命令),編譯完成后會(huì)在該目錄的bin子目錄下生成ARM端的應(yīng)用程序app_remote.xv5T,,如圖8所示,。
本文闡述了OMAP3530中兩種ARM和DSP協(xié)同開發(fā)方法,,并對(duì)其進(jìn)行了比較,。一種方法是在CCS下直接開發(fā)DSP端的算法程序,其優(yōu)點(diǎn)是能夠通過優(yōu)化算法程序最大限度地提高DSP端數(shù)字信號(hào)處理的效率,,缺點(diǎn)是算法程序的可移植性差,。另一種方法是利用DVSDK開發(fā)套件開發(fā)算法程序,其優(yōu)點(diǎn)是算法的可移植性好,,能夠有效縮短開發(fā)周期,,但是無法對(duì)DSP端運(yùn)行的算法程序進(jìn)行實(shí)時(shí)在線調(diào)試,而且DSP多流水線處理方式的優(yōu)勢(shì)難以得到充分發(fā)揮,,所以算法程序也并不是最優(yōu)化的,。在實(shí)際開發(fā)中,可以根據(jù)具體的情況選擇一種開發(fā)方法,。
參考文獻(xiàn)
[1] 冼進(jìn),,畢盛.基于OMAP3530雙核的嵌入式系統(tǒng)實(shí)驗(yàn)平臺(tái)設(shè)計(jì)[J].信息系統(tǒng)工程,2010(7):72-73.
[2] 王偉,,劉培德.OMAP3530平臺(tái)移動(dòng)多媒體的視頻解碼方案[J].單片機(jī)與嵌入式系統(tǒng),,2010(6):31-34.
[3] 宋寶華.Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解[M].北京:人民郵電出版社,2010.
[4] 張起貴,,張勝,,張剛.最新DSP技術(shù)[M].北京:國(guó)防工業(yè)出版社,2009.
[5] 紀(jì)震,,曾啟明.OMAP3原理及系統(tǒng)設(shè)計(jì)[M].北京:科學(xué)出版社,,2011.