標籤:dm365 dm368 ipnc 網路攝像機
在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.pdfAVServer_DesignGuide_IPNC_DM36x.pdf
DM365 IPNC軟體架構詳解