在2013年上半年接手DM365、DM368的IPNC(網絡錄影機)産品的收尾與穩定性測試工作。
1.簡介:
TI針對TMS320DM365、DM368進行了DVR和IPNC的應用方案參考。DVR方案一般基于DM368 DVRRD SDK (includes TI DVSDK, TI LSP, DVR applications, DVR filesystem, boot and other utilities)開發。IPNC方案也是基于DVSDK。具體開發環境的搭建參考相應的開發包中的文檔。
本文主要介紹IPNC
2.IPNC中軟體架構
主要是基于CE(codec engine)的機構,CE說白了是一套軟體,在這套軟體上可以友善的內建TI針對DSP編寫的 一些算法。 ps:Codec Engine是一系列用于表示和運作數字多媒體标準化DSP算法接口(XDAIS)及算法的API。XDAIS定義了一整套的多媒體算法程式設計接口,可單獨在GPP或DSP上運作,也可在DSP上運作,而GPP通過Codec Engine對其實行控制。對于所有支援的運算器結構、運作方式及作業系統,Codec Engine都有相同的API。Codec Engine定義了4類編解碼器算法接口标準,分别是視訊、圖像、語音、音頻,簡稱VISA。 CMEM子產品也是基于CE架構的軟體架構中常用的一個核心子產品,他在使用者空間友善使用者進行實體上連續記憶體的管理與共享使用。
3.應用層結構
在Linux、cmem、CE等的基礎上,基于Linux的應用程式的架構如下圖所示:
在系統啟動後,會啟動一些應用程式(程序),主要有:
AV_Server
Systemserver
RTPstreaming server
HTTPserver
這些程序的作用:
AV_Server process is responsible for:
• Capturingvideo and audio data from image sensor and audio device
• Encodingaudio and video data
• Managingand storing encoded data in the circular buffer and cache buffer
• Sendingaudio or video bit-stream response requested by other application
System server process responsible for:
• Storingand restoring system parameter
• Savingor uploading video files to ftp servers or local disk depending on the
alarm or schedule events
• Controllingthe system devices (RTC, USB)
HTTP server and RTP streaming servers areresponsible for:
• Sendingresponse of the video, audio, or system requested from internet
Processes use POSIX msgsnd and msgrcv tocommunicate with each other
• Passingparameters by POSIX share memory or CMEM device driver
Circular buffers, cache pools and messagequeues in shared memory are used for
inter-process communication.
4.程式的啟動分析
在核心啟動後,執行一些腳本。
啟動腳本位于檔案系統的/etc/init.d/rsS檔案中,其中核心啟動順序代碼如下:
DVEVMDIR=/opt/ipnc #聲明一個變量并指派
# Load the dsplink and cmem kernel modules 加載dsplink和cmem等核心子產品
cd $DVEVMDIR #進入opt/ipnc目錄
$DVEVMDIR/av_capture_load.sh #”$”表示引用變量
{#av_capture_load.sh
#!/bin/sh
#"#!"字元告訴系統同一行上緊跟在他後面的那個參數用來執行檔案的程式
./av_capture_unload.sh 2>/dev/null #首先将相關的子產品解除安裝
#0表示标準輸入,1表示标準output, 2表示标準錯誤error,該指令表示将腳本csl_unload.sh錯誤資訊輸入到(重定向到)隻寫檔案中(/dev/null經典的黑洞檔案,即隻能寫不能讀),可以了解為不要将錯誤資訊輸入到标準輸出裝置。
./csl_load.sh #加載csl(片級支援庫)子產品
./drv_load.sh #加載drv(驅動子產品)子產品
insmod cmemk.ko phys_start=0x83000000 phys_end=0x88000000allowOverlap=1 phys_start_1=0x00001000 phys_end_1=0x00008000 pools_1=1x28672
#加載cmemk.ko(連續記憶體子產品)子產品,用于DSP和ARM共享,它的起始位置是0x83000000,結束位置為0x88000000,大小為80M。
insmod edmak.ko #加載EDMA子產品
insmod irqk.ko #加載快速中斷子產品
insmod dm365mmap.ko #加載dm365記憶體映射子產品
}
cd /dev
ln -s rtc0 rtc #建立連接配接
cd $DVEVMDIR
mount -t jffs2 /dev/mtdblock4 /mnt/nand #挂載日志檔案系統
sleep 1
./system_server & #背景運作system_server
$DVEVMDIR/loadkmodules.sh #運作核心子產品腳本
$DVEVMDIR/loadmodules_ipnc.sh #運作核心子產品腳本
ifconfig lo 127.0.0.1 #設定本機回環位址為 127.0.0.1
./boot_proc 1
# Start the demo application #開始運作應用程式demo
cd $DVEVMDIR
$DVEVMDIR/autorun.sh #執行autorun.sh腳本
{# autorun.sh
#echo "2" >/proc/cpu/alignment
sleep 1
./boa -c /etc & #啟動boa伺服器
}
5.部分程序分析
整體上來說上述幾個程序通過Linux及DSPLINK提供的程序間通信的手段進行通信與協作控制,主要是systemserver利用消息隊列進行系統控制,控制av_server、boa等。網頁配置參數通過boa接收網頁消息,給systemserver發送消息進行系統控制。
6.總結
本文幫助新手快速了解架構,涉獵不深,系統中涉及到的其他内容,根據需要進行學習。如PISA、ONVIF(安防标準),boa(提供網頁通路),GoDB(提供網頁通路的UI),wis-streamer(提供網絡視訊流)等。 最後談一下自己的感受:一個完整的系統,每一部分拿出來細細研究都有很多内容。由于我主要做的穩定性測試性工作,是以很多細節的技術都有心無力。systemserver程序基本與視訊采集和codec無關,是純純的Linux程式設計,涉及多線程、socket、System V程序通信,以及USB、網口等各方面的程式設計,對于學習Linux程式設計很有幫助。 參考:Application_DesignGuide_IPNC_DM36x.pdf AVServer_DesignGuide_IPNC_DM36x.pdf
詳細内容可下載下傳文檔:http://download.csdn.net/detail/guo8113/8420233