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

时间: 2024-10-09 03:38:57

DM365 IPNC软件架构详解的相关文章

Java--设计模式详解(23种)

一.设计模式的理解 刚开始“不懂”为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“简单”就是一把钥匙开一把锁的模式,目的仅仅是着眼于解决现在的问题,而设计模式的“复杂”就在于它是要构造一个“万能钥匙”,目的是提出一种对所有锁的开锁方案.在真正理解设计模式之前我一直在编写“简单”的代码.这个“简单”不是功能的简单,而是设计的简单.简单的设计意味着缺少灵活性,代码很钢硬,只在这个项目里有用,拿到其它的项目中就是垃圾,我

编程常用设计模式详解--(上篇)(工厂、单例、建造者、原型)

参考来自:http://zz563143188.iteye.com/blog/1847029 一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 二.设计模式的六大原则 1

C#面向接口编程详解(1)——思想基础

我想,对于各位使用面向对象编程语言的程序员来说,"接口"这个名词一定不陌生,但是不知各位有没有这样的疑惑:接口有什么用途?它和抽象类有什么区别?能不能用抽象类代替接口呢?而且,作为程序员,一定经常听到"面向接口编程"这个短语,那么它是什么意思?有什么思想内涵?和面向对象编程是什么关系?本文将一一解答这些疑问. 1.面向接口编程和面向对象编程是什么关系 首先,面向接口编程和面向对象编程并不是平级的,它并不是比面向对象编程更先进的一种独立的编程思想,而是附属于面向对象思

[转]C++ 智能指针详解

C++ 智能指针详解   一.简介 由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete.程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见. 用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法.包括:std::auto_ptr.boost::scoped_ptr.boost::shared_ptr.boost::scoped_array.boost::shared

《Linux设备驱动开发详解(第3版)》海量更新总结

本博实时更新<Linux设备驱动开发详解(第3版)>的最新进展. 2015.2.26 几乎完成初稿. [F]是修正或升级:[N]是新增知识点:[D]是删除的内容 第1章 <Linux设备驱动概述及开发环境构建>[D]删除关于LDD6410开发板的介绍[F]更新新的Ubuntu虚拟机[N]添加关于QEMU模拟vexpress板的描述 第2章 <驱动设计的硬件基础> [N]增加关于SoC的介绍:[N]增加关于eFuse的内容:[D]删除ISA总线的内容了:[N]增加关于SP

C++ 智能指针详解

一.简介 由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete.程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见. 用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法.包括:std::auto_ptr.boost::scoped_ptr.boost::shared_ptr.boost::scoped_array.boost::shared_array.boost:

Java程序员从笨鸟到菜鸟之(五十一)细谈Hibernate(二)开发第一个hibernate基本详解

在上篇博客中,我们介绍了<hibernate基本概念和体系结构>,也对hibernate框架有了一个初步的了解,本文我将向大家简单介绍Hibernate的核心API调用库,并讲解一下它的基本配置.核心API的底层实现和源码解析将在以后的博客中一一为大家讲解. 首先我们一起来看一下开发一个hibernate应用程序的大体流程是什么样的(流程顺序可以颠倒): •创建Hibernate的配置文件 •创建持久化类 •创建对象-关系映射文件 •通过Hibernate API编写访问数据库的代码 关于配置

【详解】如何编写Linux下Nand Flash驱动

From: http://www.crifan.com/files/doc/docbook/linux_nand_driver/release/html/linux_nand_driver.html 版本:v2.2 Crifan Li 摘要 本文先解释了Nand Flash相关的一些名词,再从Flash硬件机制开始,介绍到Nand Flash的常见的物理特性,且深入介绍了Nand Flash的一些高级功能,然后开始介绍Linux下面和Nand Flash相关的软件架构MTD的相关知识,最后介绍了

C++ 智能指针详解(转)

C++ 智能指针详解   一.简介 由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete.程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见. 用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法.包括:std::auto_ptr.boost::scoped_ptr.boost::shared_ptr.boost::scoped_array.boost::shared