于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中软件架构

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3VvODExMw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">


主要是基于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 &    #启动boaserver

}

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

版权声明:本文博主原创文章。博客,未经同意不得转载。

DM365 IPNC软件架构具体解释的更多相关文章

  1. DM368启动串口打印分析

    DM36x initialization passed! TI UBL Version: 1.50 Booting Catalog Boot Loader                  //启动目 ...

  2. [转]架构蓝图--软件架构 "4+1" 视图模型

    架构蓝图--软件架构 "4+1" 视图模型 本文基于多个并发视图的使用情况来说明描述软件密集型系统架构的模型.使用多重视图允许独立地处理各"风险承担人":最终用 ...

  3. 关于lib,dll,.a,.so,静态库和动态库的解释说明

    [转]关于lib,dll,.a,.so,静态库和动态库的解释说明 目录 1 什么叫程序库 2 什么是lib,什么是dll,什么是.a,什么是so,什么是静态库,什么是动态库 3 补充说明 4 作者 什 ...

  4. b2c项目基础架构分析(二)前端框架 以及补漏的第一篇名词解释

    继续上篇,上篇里忘记了也很重要的前端部分,今天的网站基本上是以一个启示页,然后少量的整页切换,大量的浏览器后台调用web服务局部.动态更新页面显示状态这种方式在运作的,从若干年前简单的ajax流行起来 ...

  5. b2c项目基础架构分析(一)b2c 大型站点方案简述 已补充名词解释

    我最近一直在找适合将来用于公司大型bs,b2b b2c的基础架构. 实际情况是要建立一个bs架构b2b.b2c的网站,当然还包括wap站点.手机app站点. 一.现有公司技术人员现状: 1.熟悉asp ...

  6. DM365视频处理流程/DM368 NAND Flash启动揭秘

    出自http://blog.csdn.net/maopig/article/details/7029930 DM365的视频处理涉及到三个相关处理器,分别是视频采集芯片.ARM处理器和视频图像协处理器 ...

  7. 《Linux设备驱动开发具体解释(第3版)》进展同步更新

    本博实时更新<Linux设备驱动开发具体解释(第3版)>的最新进展. 2015.2.26 差点儿完毕初稿. 本书已经rebase到开发中的Linux 4.0内核,案例多数基于多核CORTE ...

  8. 软件架构系列一:C4模型

    本文要点预览:因为软件系统的分布式特点以及开发团队的分布性,了解软件架构的基础变得越来越重要.而在过度设计和毫无设计之间,我们应该把注意力放在对软件系统有重大影响的决策和权衡上.好的架构师应该是团队的 ...

  9. 结合领域驱动设计的SOA分布式软件架构

    引言 本文主要是参考Martion Fowler所著的<企业应用架构模式>与Eric Evans所著的<领域驱动设计>这两本泰山之作,加上本人在近年实际的工作过程中开发SOA系 ...

随机推荐

  1. 使用MongoDb连接数据库服务器

    链接MongoDb数据库服务器的字符串格式: mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN] ...

  2. Spring Boot系列二 Spring @Async异步线程池用法总结

    1. TaskExecutor Spring异步线程池的接口类,其实质是java.util.concurrent.Executor Spring 已经实现的异常线程池: 1. SimpleAsyncT ...

  3. js课程 3-10 js中字符串函数数组函数和其它语言中对应函数的区别和联系是什么

    js课程 3-10  js中字符串函数数组函数和其它语言中对应函数的区别和联系是什么 一.总结 一句话总结:js中是对象点方法的形式,这些方法都是对象的方法,而在php.java中却不是这样. 1.j ...

  4. 【Nutch2.2.1基础教程之6】Nutch2.2.1抓取流程 分类: H3_NUTCH 2014-08-15 21:39 2530人阅读 评论(1) 收藏

    一.抓取流程概述 1.nutch抓取流程 当使用crawl命令进行抓取任务时,其基本流程步骤如下: (1)InjectorJob 开始第一个迭代 (2)GeneratorJob (3)FetcherJ ...

  5. Web全栈工程师修养

    全栈工程师现在是个很热的话题,如何定义全栈工程师?在著名的问答网站Quora上有人提出了这个问题,其中一个获得了高票的回答是: 全栈工程师是指,一个能处理数据库.服务器.系统工程和客户端的所有工作的工 ...

  6. sdo_geometry 转 st_geometry

    CREATE OR REPLACE FUNCTION sdo2sde(geo SDO_GEOMETRY) RETURN st_geometry IS lx number; --类型 (点.线.面) c ...

  7. USACO--2.1The Castle

    思路:这个题目难在建图,開始的时候我想把每一个房间没有墙的面求出来,然后再和他邻近的房间加上一条边进行建图,后面发现要通过题目给定的条件求出房间那个面没有墙是十分困难的:后面參考了别人的思路,我们记录 ...

  8. 于 Android NDK 的学习之旅-----数据传输(基本数据类型和数组传输)

    之前的一些文章都有涉及到上层和中间层的数据传输,简单来说,也就是参数和返回值的使用.因为中间层要做的最多的也就是数据传输与转换,下面来介绍下这方面的知识. 数据传输可分为 基本数据类型传输 和 引用数 ...

  9. Passive DNS

    http://blog.csdn.net/cnbird2008/article/details/17250707 http://netsecurity.51cto.com/art/201510/494 ...

  10. 一小时内破解16位强password

    password能够用来保护你的金融交易.你的社交网络站点,和其它貌似安全的在线站点的主机.人们常常说:"不要把字典里的单词用来做password.它们超级不安全". 但是,要是黑 ...