一个嵌入式视频监控系统的设计与实现
(1) 视频解码器模块:采用SAA7114H视频解码芯片,主要功能是将1路模拟视频量化后形成YUV数据格式通过并行输出端口传输到IME6410视频MPEG-4压缩处理单元。本文引用地址:https://www.eepw.com.cn/article/171658.htm
(2) 音频编解码器模块:主要是完成模拟音频到数字音频的解码工作,采样速率32K bps。
(3) MPEG-4压缩处理器模块:数字视频数据编码压缩工作由INTIME公司设计的IME6410视/音频压缩处理器完成。微控制器通过主机接口对IME6410配置和接收压缩得到的视频码流。
(4) SDRAM模块:IME6410和网络处理器S3C2500B各需要一片SDRAM,为DSP和网络处理器中程序运行提供外部存储器。
(5) FLASH模块:用来存储DSP和网络处理器中运行的程序。
(6) 网络处理器模块:选用SAMSUNG的ARM940T内核的S3C2500B网络处理器,S3C2500B将编码后的视频/音频数据流打包形成标准的网络数据流并传输到因特网中。用户可通过互联网发送命令,对IP编码器进行参数调整,例如编码的帧率、编码效率、图像质量、IP地址设定等。
(7) 异步串口:支持RS-232、RS-422/485等多种协议,用于和PC通讯和控制摄像头。用户可根据需要设置系统的工作参数,例如网络的IP地址,编码的帧率、编码效率、图像质量等。
(8) I/O模块:通用I/O接口可以满足用户的控制目的,例如摄像机的镜头焦距控制等。
(9) PHY层网络接口:完成调制、解调功能。
uCLinux具有精巧、高效的内核,完整的网络功能和良好的可裁剪性,它内置的TCP/IP协议找、良好的开放性和可扩展性以及高效的任务管理,能够满足数字视频服务器的要求[5]。
本视频服务器采用了uCLinux作为嵌入式操作系统,移植BLOB作为系统引导模块,移植ez-ipupdate实现动态域名解析,使用在系统内核态下编写的driver实现视频数据的获取,使用在系统用户态下编写的应用服务程序iplay实现组帧、发送以及与用户交互等功能。
3.1 系统引导模块
系统引导模块LOADER移植自BLOB(Boot Loader OBject)项目,它是LART项目的系统引导模块。移植的BLOB的发行版是BLOB-2.0.5-pre2,编译器使用arm-linux- toolchain。由于视频服务器上的硬件环境与处理器SAMAUNG的S3C2500B的软件开发包SMDK2500中的配置有所不同,因此对 BLOB中的源代码在移植过程中作出了修改。以下是对BLOB程序做出的具体修改。
(1) 串口参数代码修改
由于视频服务器上的串口时钟源和SMDK2500不一样,因此对文件“/src/lib/serial-s3c2500.c”做出修改。
(2) 修改BLOB程序中各块在内存中的分布。
因为BLOB中的各部分内存分配和SMDK2500不一样,因此需要修改内存分配的预定义。修改文件是“include/BLOB/arch/smdk2500.h”。
(3) 增加对网卡支持
由于BLOB只支持一个网口,且只能在编译前指定使用使用WAN还是LAN,故首先在编译配置时添加:enable-network,这个指定修改在文件“/src/BLOB/smdk2500.c”中。为了在网络中避免地址冲突,需要为本机网卡设置唯一的MAC地址。这个修改在文件“src /lib/ether.c”中。
(4) 修改启动延时
针对本系统的启动延时,修改文件“src/BLOB/main.c”中的原设置时间。
3.2 系统内核的移植
系统内核Kernel是基于uClinux-dist-20040408的uClinux的分发版,下面是移植的修改部分。
(1) 修改时钟频率的设置
修改的原因是目标版与评估版采用的时钟源不一样。需要修改的文件为“uClinux-dist/linux-2.4.x/arch/armnommu/mach-SMDK2500/config.c”。
(2) 添加支持从flash中获取MAC地址
为了防止网络上出现MAC地址重复的情况,采用了从flash中直接读取BLOB中设定的MAC地址。在此需修改在文件“uClinux- dist/linux-2.4.x/arch/armnommu/mach-SMDK2500/readf.c”中相关的调用函数实现调用自己的函数。添加的自定义函数用来从flash的BLOB区域中指定的位置来获取MAC参数,然后向系统内核kernel提供获取的MAC参数内容。
(3) 添加kernel中对GPIO口通用操作的支持
为了在系统内核kernel中调试和使用GPIO提供统一的调用接口,需要修改文件为“uClinux-dist/linux-2.4.x/arch/armnommu/mach-SMDK2500/lmhgpio.c” 。
(4) 修改有关内存分配的内容
为了使系统支持内存GFP_DMA方式的内存分配,需要修改文件“uClinux-dist/linux-2.4.x/mmnommu/page_alloc2.c”。
linux操作系统文章专题:linux操作系统详解(linux不再难懂)
评论