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