基于Linux和S3C2410的嵌入式图象传输系统设计.docx
-
资源ID:17770883
资源大小:20.16KB
全文页数:9页
- 资源格式: DOCX
下载积分:15.18金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
基于Linux和S3C2410的嵌入式图象传输系统设计.docx
基于Linux和S3C2410的嵌入式图象传输系统设计基于Linux和S3C2410的嵌入式图象传输系统设计caojing导语:实验结果证实:系统很好的完成了图象收集和传输。得到的图象明晰。效劳器可以稳定运行,不会发生断开或者退出的现象。1引言怎样更好的获得监控现场的图象数据一直是棘手的一个问题,传统的方法是采用CCD摄象机获取现场的视频信息,这种方法易于实现,但本钱较高。随着ARM系列处理器应用的越来越广和基于linux的嵌入式技术的迅速开展,利用linux自身带有的TCP/IP协议来实现远程监控、图象传输已成为可能。本文提出的正是一种这样的方法,利用市场上很常见的中星微系列的USB摄象头来得到现场的图象数据,利用linux内核中的Video4Linux编程接口函数收集图象,并把得到的图象通过Internet传输到上位机PC上,在PC上实现图象的保存和显示。2硬件系统设计原理系统的硬件功能框图如图1所示,CPU采用的是三星公司的S3C2410。该处理器内部集成了ARM公司ARM920T处理器核的32位微控制器,并带有独立的16KB的指令Cache和16KB的数据Cache、LCD控制器、RAM控制器、NAND闪存控制器、3路UART、4路DMA、4路带PWM的Timer、并行I/O口、8路10位ADC、触摸屏接口、I2C接口、I2S接口、2个USB接口控制器、2路SPI,主频最高可达203MHZ。在此根底上,平台还进展了相应的配置和扩展,配置了4MB16位的Flash和8MB32位的SDRAM,通过以太网控制芯片DM9000E扩展了一个网口。引出了一个UART接口,通过RS232可以和宿主机做串口通讯。并引出了一个HOSTUSB接口,通过在USB接口上外接一个带USB的摄象头将收集到的图象数据放入输入缓冲区中。对缓冲区的数据进展处理,最后通过网口发送到Internet上,在PC上保存和接收。3软件系统设计本文的软件系统设计采用C/S客户机/效劳器形式,以S3C2410平台作为效劳器,以PC作为客户端。效劳器的主要任务是把得到的图象数据发送到Internet上去,客户端的任务主要是从Internet上接收得到的数据,并把数据以保存成文件。下面分别讨论两者的详细实现。3.1效劳器端软件系统设计3.1.1建立宿主机开发环境本文以PC为宿主机,并带有RedHat9.0系统,开发环境就建立在这个平台上,其主要包括:穿插编译器的的选择和安装、NFS和TFTP效劳器的配置等。对于嵌入式系统的开发,由于没有足够的资源在目的板上运行开发工具和调试工具,所以通常采用穿插编译调试的方式。开发时使用宿主机上的穿插编译、汇编及连接工具形成可执行的二进制代码。然后把可执行文件下载到目的机上运行。本文采用的穿插编译器为arm-linux-gcc,详细安装不再赘述。为了方便调试和下载烧写,可让宿主机支持NFS和TFTP效劳器。需要十分讲明的是为了支持TFTP效劳器需要在安装RedHat9.0时须选择完全安装,假如没有选择完全安装,需要将第三张光盘里面的tftp-server-0.32-4.i386.rpm和tftp-0.32-4.i386.rpm安装到宿主机下。3.1.2摄象头驱动程序的实现系统采用的是最普通的USB摄像头,主芯片为中星微ZC0301P。这种摄象头的一个特点是可以实现硬件JPEG编码。其驱动程序的编写重点包括下面的内容:提供根本的I/O操纵接口函数open、read、write、close的实现、对中断的处理实现、内存映射功能以及对I/O通道的控制接口函数ioctl的实现等,并把它们定义在structfile_operations中。这样当应用程序对设备文件进展诸如open、close、read、write等系统调用操纵时,Linux内核将通过file_operations构造访问驱动程序提供的函数。当然,如今网上已经有了这种摄象头的通用驱动,可以从相关网站下载usb-2.4.31.patch.gz,然后将这个补丁打到内核对应的位置即可。但是对有些内核版本的linux系统,在打补丁时,会产生Config.in.rej和Makefile.rej。这时只需要将这两个文件中修改失败的局部手动添加到对应的Config.in和Makefile中去就可以了。3.1.3linux内核配置对于已经做过根本移植的linux在配置内核的时有以下几个方面是值得留意的:1由于要用到内核中的Video4Linux编程接口函数,所以在配置内核时首先必须选中VideoforLinux并且最好是直接编译进内核而不用编译成模块的形式再加载;2要选中USBSupport、OHCI、UHCI。并在USBSupport下的USBMultimediadevices中选中对应的摄象头,对本系统来讲,选择USBSPCA5XXSunplusVimicroSonixCameras,并把它配置成Module。3配置完内核后做makedep,makezImage,makemodule。那么在对应的spca5xx目录下会生成spc5xx.o,可以把spc5xx.o通过NFSmount到目的板上或加到主文件系统ramdisk中的某个目录下。然后在目的板上做insmodspca5xx.o就会找到摄象头。3.1.4效劳器端应用程序的编写完成驱动程序和内核配置后就开场应用程序的编写了,程序首先用穿插编译器在宿主机上进展编译连接,生成的的可执行文件通过NFSmount到目的板上进展调试。调试成功后再固化到文件系统ramdisk中去。其实现主要有下面几个步骤:1初始化设备根本信息。2翻开设备文件,读取设备根本信息和信号源根本信息,并设置video_mmap并为定义的帧构造分配缓冲区并初始化线程互斥量。3创立图象获取的线程。该线程函数实现以内存影射的方式读取设备中的数据,锁定线程互斥量,接着对帧构造的各个元素赋值。并解锁互斥量。使该经过做一个死循环。4创立一个基于连接的socket,并绑定到一个端口上,开场在该端口上侦听。5当有连接到来时,创立一个图象发送的线程。该线程函数实现:假如确定读取了客户端的数据,那么把缓冲区内的一帧数据发送到网络上。让这个经过也为死循环。6控制两个线程的同步。7假如程序退出,那么关闭套接字,释放分配的资源。可以看出,程序的内容主要有三个局部:图象收集局部,图象的网络发送局部和程序的多线程控制局部。下面分别介绍一下这三个局部主要涉及的内容。在图象收集局部,定义了一个数据构造,它的主要成员变量有:lVideo_capability包含根本的设备信息设备名称、支持的最大最小分辨率、信号源信息lvideo_channel关于各个信号源的属性lvideo_mbuf利用mmap进展映射的帧的信息lvideo_buffer最底层对buffer的描绘lvideo_mmap用于mmaplpthread_mutex_t线程互斥量截取图象方法有两种:直接读取设备文件和内存影射的方法,本文采用后面一种。采用这种方法后,普通文件被映射到内存地址空间,进程可以象访问普通文件一样访问内存,这样做的一个好处是可以进步效率。做视频截取的两个主要函数是:nioctlvd->fd,VIDIOCMCAPTURE,&vd->mmap假设调用成功,开场一副图象的截取。是否截取完毕留给VIDIOCSYNC来判定。nioctlvd->fd,VIDIOCSYNC,&frame假设调用成功,说明一帧截取已完成。可以开场做下一次截取对于网络发送局部,主要是linux下的socket编程,调用的主要函数有:创立套接字函数socket、端口绑定函数bind、监听函数listen、等到连接函数accept、数据接收函数read、数据发送函数write等。这些函数的详细定义和用法详细可以查阅相关资料。需要讲明的是为了可以正确发送一帧数据,要把定义的帧的构造体设置为单字节对齐,详细方法是在构造体的定义后面加上_attribute_packed。多线程编程局部用到的主要函数有:互斥量初始化函数pthread_mutex_init、互斥量锁定函数pthread_mutex_lock、互斥量解锁函数pthread_mutex_unlock、互斥量注销函数pthread_mutex_destroy、线程创立函数pthread_create、线程同步函数pthread_join。此外,程序中为了能更好的实现两个进程的同步,还需要用到信号量机制的一些内容。受篇幅所限,这些函数的详细定义和用法请参考相关资料。3.2客户机端软件系统设计客户端是建立在一台PC机上,用VisualC+6.0设计一个基于MFC的界面作为接收端。在接收端主要完成从网络缓冲区内读取数据,并保存成文件的形式,文件以接收到数据的时间为名。图2为图象收集时间间隔为1秒时程序执行的结果。图象大小为320象素。需要讲明的是:效劳器端发送的数据采用了单字节对齐,对应的在客户端接收的时候也要采用单字节对齐。在WINDOWS下实现内存单字节对齐的方法是在定义的帧构造体前面加上#pragmapack1,并在其定义之后加上#pragmapack。图2客户端程序执行结果1秒种收集一次图象4完毕语本文提出了一套基于S3C2410平台和linux系统的嵌入式图象收集、传输系统的详细实现,并给出了实验结果。实验结果证实:系统很好的完成了图象收集和传输。得到的图象明晰。效劳器可以稳定运行,不会发生断开或者退出的现象。本系统可应用于工业现场的监控,也可以与其他系统如门禁系统相结合获得门开或者关时现场的重要图象数据。0