程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> DM365 IPNC軟件架構詳解

DM365 IPNC軟件架構詳解

編輯:C++入門知識

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(連續內存模塊)模塊,用於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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved