基于Liunx的嵌入式系统的底层软件的结构、设计和应用
扫描二维码
随时随地手机看文章
近几年,随着计算机技术和电了技术的飞跃式发展,通过不断的系统功能集成和优化,网络覆盖面积和传输稳定性日益增加,将传统模拟视频监控系统中的模拟信号部分已舍弃,完成了全数字化的视频监控系统,并加入了AD转换功能,使整个视频数据能在网络上进行传输,满足了各类行业部门及家庭对网络可视化业务的需求。这种全数字化的视频监控系统存系统设备规模和系统功能性上,较之前的模数混合型系统,有了巨大的变化和升级。一般网络视频监控系统只需要摄像机、路由器和计算机就能搭建,拓扑结构简单。利用计算机的强大的处理能力,改善了监控系统的控制效率、提高了监控系统的智能化和采集图像的质量。基于网络技术搭建的系统结构,结构清晰、布线简单、系统扩展性强,并且一台主控计算机再也不会像DVR一佯对于搭载的摄像机设备有数量限制,同时这种拓扑结构也降低了大型监控系统的管理难度和维护维修成本。对于系统应用层而的开发能在计算机这种统一的设计平台上进行,大大简化了对于特殊监控系统的开发难度。
本设计决定选用行业内较为成熟的TI公司DaVinci设计框架。该设计方案集成了ARM和DSP两个部分,这种设计结构将系统中的图像处理模块和摄像机控制模块结合起来。
文中将描述基于TMS320DM365网络摄像机的底层程序,包括了系统的内核、驱动、启动程序等,摄像机系统基于DaVinci框架。整个硬件基础可以参考之前发表的文章《基于TMS320DM365的网络视频监控系统》。
1 DaVinci框架下的网络摄像机结构
1.1 DaVinci框架简介
DaVinci(达芬奇)框架是一套由TI公司提出的集成了DSP处理器、软件、工具的综合型解决方案系列,非常适合用于开发各类数字视频终端设备,包括了数字音频、视频、成像、视觉应用等。该技术的目的是让开发厂商能够更轻松、更快速地开发各种低成本的创新型数字视频产品。Davinci技术系列组件,其中不仅包括了相应的处理器、软件、工具,还提供一系列的解决方案和技术支持等。由于基于DaVinci框架下设计出的产品之间兼容性和共通性很高,所以很多大型的公司也乐于使用TI的DaVinci解决方案,以增加自身产品在周边行业内的兼容性。并且DaVinci框架拥有一套全方位的软件支持,提供了下至一般的操作系统驱动,上至应用程序接口API,甚至DSP的编码程序也是作为一个固有程序包,集成在BIOS和Code Server中。
1.2 DaVinci硬件基础
作为底层驱动软件的基础,这里需要详细对DaVinci框架的硬件结构进行描述。DaVinci数字视频处理芯片是整个DaVinci技术框架的的核心,其最大特点为整个处理芯片集成了ARM和DSP两种核心,实现了两种核心的并行工作和通信机制。TMS320DM365作为DaVinci技术框架下的一款新型芯片,也和之前系列芯片拥有相同的系统,一个通用的DaVinci系统结构如图1所示。
DSP即数字信号处理器,其主要特点就是能够进行大量的乘加运算,拥有高速计算能力,并且DSP的数据和程序分离存储,这样充分利用了所有线宽,进一步加速了DSP的处理速度,在数字摄像机中DSP专门用于计算量庞大的图像处理算法。DSP其功能包括了VPSS(Video Process ing Subsystem)和VICP(Video Image Collaborative Processer)两个部分。视频处理系统VPSS是DM365的视频信号采集模块,与其他摄像机控制芯片相比,最显着的特点是DM365带有一个ISIF模块,可以直接获取CCD和CMOS的输出图像。相较于一般图像处理芯片需要先一步进行A /D处理,DM365能更加快速地获取图像信号。视频/影像协处理器(VICP)作为DM365芯片中DSP部分的主体,主要功能是视频图像的压缩算法,一般使用的H.264压缩方式,其中还包括了运动补偿、对象识别等算法,这些图像处理算法占整个系统运算量的600%~80%。
ARM处理器尽管没有DSP那么快速的图像处理速度,但是ARM较大的程序存储量和迅速的任务切换能力,使得它适合复杂的、多线程的任务调控,支持实时的操作系统。ARM子系统管理和协调芯片内其他功能模块的工作,采用流水线的工作方式执行系统控制任务,例如系统的初始化、参数配置、电源管理和用户功能等。
两者之间的通讯方式如图2所示,芯片中ARM可以访问DSP的片内存储器,包括L2RAM和L1 P/D,DSP也可以访问ARM的片内存储器,并且ARM和DSP共享DDR2和AEMIF,其中AEMIF是指异步的外接存储器接口(Asynchronous External MemoryInterface)。因此通常情况下ARM只需要将处理数据的地址指针传递给DSP,而不需要大量的数据传输。系统中的DSP和ARM通过2个内核相互中断实现通信,ARM使用DSP的4个通用中断和1个不可屏蔽中断来控制DSP;而DSP通过两个中断来中断ARM。DSP的电源、时钟、复位都是由ARM进行控制。
2 网络摄像机的软件结构
由于DaVinci系统双处理核心的硬件结构,整个DaVinci的软件框架也类似于硬件框架分为ARM核心的软件和DSP部分的软件。整个软件框架图如图3所示,ARM内核中的软件主要为操作系统、驱动和应用层面的软件,DSP内核里运行音视频编解码算法处理,ARM通过TI的Codec Eng ine机制调用DSP完成编解码。
在DSP部分,软件由最底层的DSP/BIOSTM内核,内核上层是Codec engine,用于和ARM端的Linux通信,最顶层是图像处理箅法。针对图像处理算法,DaVinci框架提供了数字信号处理算法接口标准(XDAIS)和针对流媒体的XDM。所有符合XDAIS和XDM标准的图像处理算法包都可以被用于DaVinci的DSP中。并且在XDAIS和XDM中也包括了一套流程完整的基础的图像处理算法,用户可以按照其标准进行修改,或者自行重新开发。再加上由第三方开发的符合XDM标准的软件包,地丰富了整个DSP图像处理软件部分的资源。
ARM部分的软件系统使用基于Linux的嵌入式软件系统,软件结构如图4所示。整个系统基于Linux的实时操作系统,在Linux上需要加入文件系统、图形用户接口和任务管理,最顶层是应用层面的软件,在应用软件中DaVinci系统只提供常用的API。
Linux实时操作系统中,应用程序、引导加载程序(Boot Loader)、驱动程序(Driver)和操作系统(Operating System)的内核镜像都是相互独立的,可以单独编译修改。只要符合各个部分特有的接口和程序存放位置,就能被整个系统识别并且调用。引导程序是UBL和u-boot,用于初始化硬件系统,引导Linux操作系统的加载,完成内核文件加载后,将控制权交给操作系统。操作系统的内核镜像uImage,是一个基础的操作系统平台,调用驱动程序和应用程序,实现多线程机制,完成了系统调用等工作。驱动程序和应用程序是事先存储在操作系统特定文件夹内的,被操作系统Linux按顺序调用,开发者可以根据自己的需要自行修改。Linux内的文件系统主要提供内核中所有文件的存储、检索和更新等功能,同样包括了驱动程序和应用程序的文件操作。一般不提供保护和加密等安全机制。文件系统通过调用和命令方式提供文件的各种操作,主要包括设置、修改对文件和目录的用户权限;提供针对目录的创建、修改和删除等功能;提供针对文件的创建、打开、读写、关闭和撤销等功能。
对于应用层面的开发而言,并不需要考虑DSP部分的图像处理实现算法,直接将DSP部分作为一个黑箱进行处理,通过图像服务接口,从ARM部分通过语句进行调用。图像服务的接口提供了用户调用DSP中的图像处理程序的接口,整个服务接口使用Codec中间框架系统。Linux端的程序通过Codec引擎访问DSP处理器中的Codec Server。整个Codec框架包括了多种API和SPI,从软件角度可以看做是一个介于应用程序和DSP中图像处理算法之间的接口,如图5所示。这样ARM端的应用程序开发者,可以不用去考虑DSP中复杂的音视频算法。
这种ARM和DSP分开的软件结构,使得整个Davinci框架下的系统的软件开发被分成了四个部分:图像算法开发、Codec Server集成开发、CodecEngine集成开发和应用程序开发。基础的图像算法可以通过TI提供的CCS开发工具,图像的编码算法被存储为.lib的库文件。而Codec Server的开发是调用一系列的.lib算法库,实现各种库文件的对ARM部分的接口。Ciodec Engine是开发调用Codec Server的Stuh和Skelet on,完善整个图像处理功能的调用,而面向厂商或是使用者的应用程序的开发,只需要针对不同应用情况编译基于Linux的应用程序,其中图像处理算法等内容,作为黑箱供这些使用者调用。
3 网络摄像机底层软件
3.1 Linux系统内核
Linux系统内核使用的linux-2.6.32,相较于之前的版本增添了虚拟化内存、改进了文件系统、支持低传输延迟时间模式、内存控制器支持SOFtlimits、支持S+Core架构、支持Intel Moorestown及其新的固件接口、支持运行时电源管理、以及新的驱动。常用的LINUX操作系RA