- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于嵌入式Linux的视频监控系统的
基于嵌入式Linux的视频监控系统的
设计与实现
【摘要】视频监控系统是安全防范系统的组成部分,它是一种防范能力较强的综合系统。视频监控以其直观、方便、信息内容丰富而广泛应用于许多场合。嵌入式视频监控系统是以应用为中心、软硬件可裁减的、适应应用系统对功能、可靠性、成本、体积等综合性严格要求的专用计算机系统,亦即为监控系统量体裁衣的专用计算机系统。嵌入式视频监控系统主要由嵌入式处理器、相关支撑硬件、嵌入式操作系统及应用软件系统等组成,它是集软硬件于一体的可独立工作的“器件”。在视频监控上的嵌入式应用将是视频监控领域的一个重要发展方向。
论文首先阐述了嵌入式网络视频监控系统的发展、现状以及整体构建,然后介绍了嵌入式Linux操作系统以及ARM处理器的发展情况,分析了主要外围电路的设计,以及如何在ARM硬件平台上进行嵌入式Linux内核的编译与移植,介绍了Bootloader的启动原理及运行过程,并对在Linux操作系统下的USB驱动程序的开发进行了研究。本文重点讨论了图像采集、编码和网络通信程序的设计原理与实现。最后进行了系统整体测试,并提出进一步开发设想。
【关键词】嵌入式,图像采集,网络通信,视频监控
目 录
1 视频监控系统的发展 5
2 嵌入式系统软件平台 6
2.1 Linux操作系统简介 6
2.2视频监控系统结构设计 6
2.3 三星S3C2410处理器简介 7
2.4 交叉编译环境的建立 8
3 USB摄像头驱动程序设计 8
4 视频采集设计与实现 9
4.1 初始化及设置 9
4.2 实现摄像头设备文件到内存区的映射 10
4.3 数据采集 10
5 视频传输的实现 11
6 客户端程序 12
7 结束语 13
参考文献 14
图1.2 摄像头驱动实现原理
USB摄像头的驱动和通用设备的驱动准则一样,但需要与内核提供的视频驱动挂钩。即首先在驱动中声明一个video device结构,并为其指定文件操作函数指针数组fops,向系统注册。在应用程序发出文件操作的相关命令时,核心根据这些指针调用相应函数,并将该结构作为参数传递给它们。这样,就完成了驱动和核心之间的通信。例如:
static struct video—device vdev_template={??);
//声明video device,指出挂接驱动
Static Struct file_operations spca5xx_fops={??);
//声明本驱动的文件操作函数指针
Struct video—device幸vdev=video_devdata(file);
//从文件指针中提取出video device结构
在video device结构中,有一个私有指针priv,可以将它指向一块保留内存。在这块内存中,保存着本驱动、本设备的相关初始化信息。这块内存的申请、初始化、指针指向等工作都是在USB驱动的枚举函数probe中完成。这样,在枚举函数将控制权返还给系统后,因为内核不销毁保留内存,所以驱动仍然保留着自己的信息。在驱动卸载函数中需要将申请的各块内存全部释放。
4 视频采集设计与实现
4.1 初始化及设置
使用ioctl(camerafd,VIDIOCGMBUF,camerambO函数初始video—mbuf,获得摄像头存储缓冲区的帧信息,之后修改video mmap和帧状态的设置,例如重新设置图像帧的垂直及水平分辨率、彩色显示格式。可利用如下语句:
Mapbutheight=COL;//COLS为程序中定义的常量;
mapbufwidth=ROWS;//ROWS为程序中定义的常量;
mapbufformat=VIDEO_PALATTE_RGB24;
4.2 实现摄像头设备文件到内存区的映射
调用buf=void *mmap(void *addr,size—t len,int prot,int flags,int fd,off—t offset)。
以下是个函数各参数的注释。
len:映射到调用进程地址空间的字节数,它从被映射文件开头offset个字节开始算起:
prot:指定共享内存的访问权限PROT_READ(可读),PROT_WRITE(n-J写),PROT—EXEC(可执行);
flags:MAP_SHARED MAP—PRIVATE中必选一个,MAP—FIXED不推荐使用;
addr:共享内存的起始地址,一般设0,表示由系统分配:
mmapO:返回值是系统实际分配的起始地址;
下面是该函数的程序实现:
int camerammap_init(camera_device *vd)
{
if(camera mbuf(vd)0)
return-1;
if((vd一map=mmap(O,vd一mbuf.size,PROT_READIP
原创力文档


文档评论(0)