DM365 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(連續內存模塊)模塊,用於DSPARM共享,它的起始位置是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
發佈了110 篇原創文章 · 獲贊 20 · 訪問量 32萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章