DM6446學習(2 開發包介紹)



TI有幾個文檔:sprued5.pdfsprued6.pdfsprue67.pdfspruec8b.pdf,都是學習Codec Engine的不錯資料。

第一:dvsdk_2_00_00_22介紹

討論TI Codec Engine原理之前,先檢查大家安裝的dvsdk_2_00_00_22,見下圖

 dvsdk_2_00_00_22每個軟件包和工具包內都有文檔介紹說明,見 dm6446_2_00_00_22_release_notes.html的介紹,很重要。

bios_5_33_06TIDSP實時操作系統,本人下載比較新的版本。和C6x Code Generation Tools一樣,這裏的DSP/BIOS也是Linux環境下的版本。DSP系統工程師需要了解這個操作系統。
cg6x_6_0_23:這個是dsp的交叉編譯鏈,即在linux下生成可以在c64系列dsp上運行的程序;
codec_engine_2_23_01:是TI機制的重點所在,實現ARMDSP或協處理器的協同工作,以它爲基礎進行算法等開發。開發codec_engine_2_23_01前,如果你不是公認的牛人,請生成自己的Codec Engine例子的目錄——<CE_EXAMPLES_INSTALL_DIR>e.g. /usr/work/examples,就是把codec_engine_2_23_01/ examplesCOPY到你的工作目錄,備份一下。
dm6446_dvsdk_combos_2_05Codecs for both encoding and decoding H.264 and decoding MPEG2 H264的朋友就應該知道這個文件包的價值。
dmai_1_20_00_06:裏邊有CaptureDisaplayV4L2等內核驅動接口,encodeecodeencodedecode這些例子調用這些驅動接口。
dvsdk_demos_2_00_00_07:裏邊有encodeecodeencodedecode的應用例子;
dvtb_4_00_08:這是一個在ARM端運行,基於腳本語言的測試codec的應用程序。用戶不需要寫任何C代碼就可以處理Linux I/O, codec API以及一些與線程有關的問題;
dsplink-1_61_03-prebuilt是實現ARMDSP之間通信的底層軟件,Codec Engine就是建立在這個底層軟件之上。編譯出來的dsplinkko.koCodec EngineE基本元素之一。
edma3_lld_1_05_00:裏邊包括EDMA3的低層驅動;
framework_components_2_23_01TI提供的一個軟件模塊,負責DSP側的memory DMA資源管理。因此,DSP算法工程師需要了解這個軟件模塊。
linuxutils_2_23_01:裏邊有cmem.ko,這個也是Codec Engine基本元素之一。
local_power_manager_1_23_01:裏邊有lpm_dm6446.koocvc_dm6446.ko,這個ko有些DM6446的例子是沒有用到。但在OMAP的芯片中,DVSDK3.0基本上用到這個元素。
PSP_02_00_00_140:裏邊包括TI提供的FLASH TOOLUBLBIN文件,UBOOT-1.2.0等源代碼,audio,ccdcgpioV4L2的例子源代碼。
xdais_6_23是一個標準,它定義了TI DSP算法接口的標準。這樣大大提高了DSP算法軟件的通用性。DSP算法工程師要寫出能被ARM通過Codec Engine調用的算法,必須保證自己的算法接口符合這個標準。因此,DSP算法工程師也必須瞭解這個軟件模塊。
xdctools_3_10_03XDC Toolsgmake類似,是用來編譯和打包的工具,能夠創建實時軟件組件包RTSC(Real Time Software Component).與其他編譯工具一樣,它能根據源文件和庫文件編譯生成可執行文件。不同的是它能夠自動的進行性能優化和版本控制。XDC還能夠根據所提供的配置腳本語言產生代碼,這一特性在編譯如編解碼器、服務器和引擎等可執行程序時尤爲重要XDC根據用戶定義的一套build指令,通過調用用戶指定的ARM 工具鏈(Tool Chain)和DSP編譯器(C6x Code Generation Tools buildARM側和DSP側的可執行文件。可以先不必細究這個工具,只需通過編Codec Engine的例子,就知道如何設置build指令就可以了。有關XDC的用法,下面這段是參考一個網友的,本人放到這裏,讓大家更好去理解XDC
XDC的調用語法格式: XDC <target files> <XDCPATH> <XDCBUILDCFG>
target files:
指編譯產生的目標文件。可以通過命令腳本來指定要產生哪些目標文件
;
XDCPTH:      
編譯時所要查找的目錄
;
XDCBUILDCFG:
"config.bld"文件指定,包含了與平臺有關的編譯指令。後面細說。

以上命令模式可能在參數過多是很複雜,通常把它寫成shell腳本來運行。
XDC相關的三個配置文件:package.xdc: 主要包含與包package有關的信息:依賴信息、模塊信息、版本信息。由自己提供。package.bld: 主要作用是定義一個包應該如何被編譯。文件內容用Javascript來描述。其中包含目標平臺集的定義[MVArm9,Linux86]、編譯版本的定義[release]、確定源文件集、生成的可執行文件信息等等。這兩個文件都是在server目錄下,可見每個codec都有自己的package信息描述文件,然後XDC根據再依之生成一個package包。config.bld: 這個文件處在codec_engine_##目錄下,爲各個codec所共有,它主要定義了與平臺有關的特性,包含如下幾部分:DSP TargetArm TargetLinux Host TargetBuild TargetsPkg.attrs.ProfilePkg.lib等具體信息。通常都是基於TI提供的模板對這三個配置文件做修改。
   其實說這麼多的xdais XDC,我們先不用一下子就理解很透徹,TI提供的軟件包example和工具包都幫我們設置好的,我們要做的就是修改makefile, Rules.make, xdcpaths.makuser.bld的工作。上面介紹的軟件包工具包是開發Codec Engine必不可少的元素,如果要深入學習,得好好看sprued5.pdfsprued6.pdfsprue67.pdfspruec8b.pdf
二、TI DAVINCI軟件架構原理介紹
軟件架構分爲應用層、信號處理層和I/O層三部分,TI提供的達芬奇參考軟件框架就是基於這樣的結構,如下圖。Davinci的應用工程師 可以在系統的用戶空間在系統功能性上添加和發揮自己的特色。信號處理層通常都運行在DSP一側負責信號處理,包括音視頻編解碼算法、Codec EngineDSP的實時操作系統DSP/BIOS及和ARM通信的模塊。I/O層就是我們通常所說的驅動,是針對Davinci外設模塊的驅動程序。在DAVINCI系統中,DavinciARMHOST,負責操作系統應用,DSP是協處理器,負責運行音頻視頻codec算法處理,ARM通過TICodec Engine機制調用DSP側的codec
 
 
 
其中應用層通過Codec EngineVISA(Video, Image, Speech, Audio)API來調用DSP側的算法,通過EPSI(Easy Peripheral Software Interface)API來訪問和操作Davinci的外設。這三個部分通常對應三個Davinci軟件開發小組。當然還需要一個系統集成工程師把這三個部分集成起來,不過VISA APIEPSI API的存在已經大大簡化了集成工作的複雜程度。Codec Engine是連接ARMDSP或協處理器的橋樑,是介於應用層(ARM側的應用程序)和信號處理層(DSP側的算法)之間的軟件模塊。ARM應用程序調用Codec EngineVISA Video, Image, Speech, AudioAPI,如下圖中VIDENC_process(a, b, c )Codec Enginestub ARM側)會把參數a, b, c以及要調用DSPprocess這個信息打包,通過消息隊列(message queue)傳遞到DSPCodec EngineskeletonDSP側)會解開這個參數包,把參數a, b, c轉換成DSP側對應的參數x, y, z(比如ARM側傳遞的是虛擬地址,而DSP只能認物理地址),DSP側的server(優先級較低,負責和ARM通信的任務)會根據process這一信息創建一個DSP側的process(x, y, x)任務最終實現VIDENC_process(a, b, c)的操作。
 
 
 
 
 
要真正瞭解DM6446軟件架構,先從自己所處的角色說起,本人認爲,開發DM6446軟件一般分爲:雙核系統集成工程師、ARM應用程序工程師、DSP算法工程師和DSP系統工程師。牛的人一般都兼職四個角色!
ARM應用程序工程師:應用層開發設計
DSP算法工程師:DSP算法設計
DSP系統工程師:集成算法LIBDSP/BIOSDSP Server設計;
雙核系統集成工程師:UBLUBOOTLINUX內核、根文件系統、設備驅動程序設計、總體系統集成。
每個角色的具體分工,可以看看sprue67.pdf。以下是一個網友提供的資料,如圖下圖所示,DaVinci的軟件開發通常需要四個步驟(本文以codec運行在DSP爲例)
 
 
軟件系統分爲應用層、信號處理層和I/O層三部分,達芬奇軟件開發通常需要以上四個步驟。
 
第一步,DSP算法工程師需要基於DSP利用CCS開發自己的音視頻編解碼算法,編譯生成一個編解碼算法的庫文件*.lib(等同於Linux環境下的 *.a64P,直接在Linux環境下修改文件後綴名即可)。如果要通過Codec Engine調用這個庫文件中的算法函數,那麼這些算法實現需要符合xDM(xDAIS(eXpress DSP Algorithm Interface Standard) for Digital Media)標準;Codec Engine機制下不符合xDM標準的算法實現需要創建算法自己的StubSkeleton(具體請參考spraae7.pdf)
第二步,生成一個在DSP上運行的可執行程序*.x64P(.out文件),也就是DSP Server
第三步,根據DSP Server的名字及其中包含的具體的音視頻編解碼算法創建Codec Engine的配置文件*.cfg。這個文件定義Engine的不同配置,包括Engine的名字、每個Engine裏包括的codecs及每個 codec運行在ARM還是DSP側等等(具體說明,請參考sprue67.pdf的第5Integrating an Engine)
 最後,應用工程師收到不同的codec包、DSP ServerEngine配置文件*.cfg,把自己的應用程序通過編譯、鏈接,最終生成ARM側可執行文件。
 
三、利用Codec Engine進行自己的項目
如何利用Codec engine進行自己的項目呢?例子——TI提供的例子,會讓你省掉很多複雜的過程,例子先給你個感性的認識,以後用多了,慢慢你就會了解xDAISxDM標準和XDC TOOLxDM只是xDAIS的擴展。你要做的是修改相應工具包、軟件包裏的makefile, Rules.make, xdcpaths.makuser.bldconfig.bld等等。我們就拿dvsdk_2_00_00_22\dvsdk_demos_2_00_00_07\dm6446\encodedecode說事,因爲這個例子調用H.264codec
首先確保以下關鍵元素可以編譯通過:
dvsdk_2_00_00_22\codec_engine_2_23_01\examples
dvsdk_2_00_00_22\dm6446_dvsdk_combos_2_05
dvsdk_2_00_00_22\dmai_1_20_00_06
dvsdk_2_00_00_22\dsplink-1_61_03-prebuilt
dvsdk_2_00_00_22\dvsdk_demos_2_00_00_07\dm6446
dvsdk_2_00_00_22\linuxutils_2_23_01\packages\ti\sdo\linuxutils\cmem
 
編譯通不過的原因就是相關的makefile, Rules.make, xdcpaths.makuser.bld沒有修改好。請參考各個軟件包的文檔,比如dvsdk_2_00_00_22/codec_engine_2_23_01/examples/build_instructions.html等,怎麼編譯,是使用makegmake還是xdc設置,文檔都有介紹,如果要在這裏都列出來,那太耗時間了。我們重點講一下上面軟件包的之間的關係,讓大家進一步瞭解Codec Enginedvsdk_2_00_00_22\dsplink-1_61_03-prebuilt裏可以生產dsplinkko.kodvsdk_2_00_00_22\linuxutils_2_23_01\packages\ti\sdo\linuxutils\cmem裏產生cmem.kodsplinkko.ko,cmem.ko這些在開發包裏有,由於這些驅動編譯時使用的內核和你的內核不一致,所以在目標板子上運行encodedecode的例子時,insmod會出錯,你要以你的內核爲準,重新編譯這些驅動。encodedecode的例子會用到dm6446_dvsdk_combos_2_05DSP ServerloopbackCombo.x64P,而這些codec server就是建立在codec_engine_2_23_01的基礎上的。encodedecode的例子調用linux內核驅動,是通過dmai_1_20_00_06。這樣分析,大家應該對dvsdk_2_00_00_22有個比較全面的認識了,很多工作可以進行了。經過一段時間看文檔和實際摸索,終於調通TI CODEC ENGINE,這樣就輕易調用h.264g711音頻的算法,在我們幫客戶設計的硬件平臺上,我們成功的幫組客戶實現TI 機制開發要求,這樣客戶基本上不用花太多時間就可以設計出自己的產品,加快產品上市時間。有關Codec Engine包括DSP Server,本文先介紹DAVINCI的雙核通信機制,有關DSP Server的搭建,本人打算參考一個網友的文章,因爲他寫得很不錯,他在dvsdk_1.0上介紹的,本人針對dvsdk_2.0 DSP Server的原理再添加點內容。

本文出自 “集成系統-踏上文明的征程” 博客,請務必保留此出處







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章