视频采集图像实时显示在LCD上_第1页
视频采集图像实时显示在LCD上_第2页
视频采集图像实时显示在LCD上_第3页
视频采集图像实时显示在LCD上_第4页
视频采集图像实时显示在LCD上_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌入式系统设计实训报告视频采集图像实时显示在LCD上目录一、实训任务的名称、内容1二、题目分析2三、系统平台搭建6四、系统设计与实现7五、系统测试13六、心得体会13七、参考文献14一、实训任务的名称、内容在这学期期末的实训中,我们的任务是“视频采集图像并实时显示在LCD上”。具体内容是,通过在USB接口上外接一个带USB口的摄像头,将采集到的视频图像数据放入输入缓冲区中。然后保存成文件的形式,或者运行移植到平台上的图像处理程序,对缓冲的图像数据直接进行相关处理,最后通过网络接口将图像发送到LCD上显示。而对于我来说,分配到的任务是“摄像头的驱动”。二、题目分析要实现视频采集,先要在系统平台上

2、运行的是linux。启动LINUX后,启用了MMU,系统进入保护模式,所以应用程序就不能直接读写外设的I/O区域。(包括I/O端口和I/O内存),这时一般就要借助于该外设的驱动来进入内核完成这个工作。本系统中的视频采集分两步实现:一是为USB口数码摄像头在内核中写入驱动,二是要再写入上层应用程序获取视频数据。我分配到的任务就是摄像头驱动的编写。摄像头在Linux中是如何支持的:在 Linux中,硬件的驱动程序,都是由内核支持的;目前比较新内核版本也集成了一些的摄像头驱动。就是Fedora、SuSE最新版本所支持的内核也是来自由 。所以支持也是极为正常的。内核对硬件的支持分

3、为内置于和外挂模块两种方便。对于摄像头来说,大多是模块支持的;关于开发平台:我们用的系统的硬件平台采用Samsung公司的处理器S3C2410x。该处理器内部集成了ARM公司ARM920T处理器核的32位微控制器,资源丰富:带独立的16 kB指令Cache和16 kB数据Cache,还有LCD控制器、RAM控制器、NAND闪存控制器、3路UART、4路DMA、4路带PWM的Timer、并行IO口、8路 10位ADC、TouchScreen接口、I2C接口、I2S接口、2个USB接口控制器、2路SPI,主频最高可达203 MHz。在处理器丰富资源的基础上,还进行了相关的配置和扩展,平台配置了16

4、 MB,16位的FLASH和64 MB,32位的SDRAM。通过以太网控制器芯片DM9000扩展了一个网口,另外引出了一个HOST、USB接口,通过在USB接口上外接一个带USB 接口的摄像头。2410平台硬件如图所示:摄像头驱动在Linux 环境下,所有的外设都被看成一类称为“设备文件”的特殊文件,系统中所有硬件都可以用一个特殊的设备文件来表示。在本系统中,USB 摄像头被作为一种字符设备来对待,用/dev/video0 来表示。相对于应用程序来讲,硬件是不透明的,设备驱动程序屏蔽了硬件在实现上的细节,应用程序必须依靠相应驱动程序中定义的通信接口实现对硬件的操作。Video4Linux(简称

5、V4L)是Linux 系统关于视频设备的内核驱动程序,它为针对视频设备的应用程序编程提供一系列接口函数。对于USB 接口摄像头,驱动程序中提供了基本的I/O操作接口函数open、read、write、close 的实现,对中断的处理实现,内存映射功能以及对I/O 通道的控制接口函数ioctl 的实现等,并在struct file_operations 数据结构中定义了这些函数,当应用程序对设备文件进行例如read、write 等操作时,嵌入式Linux 内核通过strcutfile_operations 数据结构访问驱动程序提供的函数。摄像头驱动程序基本结构如下:1)驱动的注册与注销通过在驱动

6、程序的初始化过程中调用 register_chrdev()或register_blkdev()函数来添加驱动程序并分配主设备号;通过调用unregister_chrdev()或unregister_blkdev()函数从内核中注销设备,同时释放其占用的主设备号。2)设备文件的打开与释放调用 file_operations 结构体中的open()函数打开设备;调用file_operations 结构中的函数release()关闭设备。3)设备的读/写操作使用函数 read()和write()完成对设备的读和写。4)设备的控制操作通过设备驱动程序中的函数ioctl()来完成。ioctl()的用法与

7、具体设备密切关联,因此需要根据设备的情况进行具体分析。5)设备的中断和轮流查询处理由于有些硬件设备不支持中断,那么在对其读写时需要轮流查询设备状态,以便决定是否继续进行数据传输。如果硬件设备支持中断,则可以按中断方式进行操作。三、系统平台搭建嵌入式系统的硬件资源少,不宜直接把Linux作为操作系统,要针对具体的应用对嵌入式linux进行裁剪,使整个系统能够存放到容量较小的FLASH中。Linux的动态模块加载,使 Linux的裁减极为方便,高度模块化的部件使添加非常容易。嵌入式系统软件开发采用交叉编译调试的方式。交叉编译调试环境建立在宿主机上,对应的开发板叫做目标板。通常宿主机和目标板上的处理

8、器不同,所以程序需要使用针对处理器特点的编译器才能生成在相应平台上可运行的代码。GNU编译器提供这样的功能,在编译时,可以选择开发所需的宿主机和目标机,从而建立开发环境。在进行嵌入式开发前的第一步工作就是把一台PC机作为宿主机开发机;然后在宿主机上建立交叉编译调试的开发环境。这里我们用的是GNU编译器,开发环境配置参考嵌入式实验指导书,由其他同学完成,这里不再赘述。四、系统设计与实现要设计摄像头的驱动,首先要搞清楚摄像头的具体型号。经查资料,可以用一个叫做ISHAL的工具获得。使用情况如下;rootlocalhost # lshal |grep WebCam  duc

9、t = 'ZC0303 WebCam'  (string)  usb_duct = 'ZC0303 WebCam'  (string) 其中,“usb_duct=”后面的ZC0303说明这个摄像头是ZC303芯片组的。 上面这个命令是列出系统硬件设备,然后从输出中,提取WebCam字样的信息。如果要看更详细的情况,就用以下命令:rootlocalhost # lshal |grep usb 然后就找 ZC0303字样的设备,查看相应信息:usb_device_ac8_303b_noserial

10、usb_device_ac8_303b_noserial_if0usb_device_ac8_303b_noserial_usbrawusb_device_ac8_303b_noserial_video4linux接下来到驱动网站:http:/mxhaard.free.fr/spca5xx.html将驱动网址摄像头芯片所对应地址对号入座。下载内核;测试摄像头所用的内的内核版本是 9;linux-9.tar.bz2下载内核配置文件:从Slackware的FTP上,找到了9的配置文件。请到这里下载;kernel261619.txt编译内核:第一步:解

11、压内核软件包;rootlocalhost #  tar jxvf linux-9.tar.bz2rootlocalhost #  mv linux-9 /usr/src把下载下来的内核配置文件改名复制到 /usr/src/linux-9rootlocalhost # cp  kernel261619.txt  /usr/src/linux-9/.config第二步:编译内核;rootlocalhost # cd /usr/src/linux-9/rootlocalhost l

12、inux-9# make rootlocalhost linux-9# make modules_install rootlocalhost linux-9# make install 第三步:查看/boot/grub/menu.lst文件;一般的情况下,make install 安装内核后,系统会把启动写入GRUB的配置文件。/boot/grub/menu.lst。您可以看到有类似如下的一段;title Fedora Core (9)        root

13、(hd0,6)        kernel /boot/vmlinuz-9 ro root=LABEL=/1  rhgb quiet        initrd /boot/initrd-9.img编译摄像头驱动程序;在编译摄像头驱动的前题是,我们要用9这个内核来启动系统,然后在 9内核系统环境下编译摄像头驱动;下载摄像头驱动;http:/mxhaard.free.frspca5xx

14、-20060501.tar.gz解压编译:在编译的过程中需要各种开发库和或开发工具之类的,比如gcc、make、automake等rootlocalhost # tar zxvf spca5xx-20060501.tar.gzrootlocalhost # cd spca5xx-20060501rootlocalhost spca5xx-20060501# make rootlocalhost spca5xx-20060501# make installrootlocalhost spca5xx-20060501# depmod -arootlocalhost spca5xx-20060501

15、# modprobe spca5xx看看驱动模块挂载好了没有:rootlocalhost spca5xx-20060501# lsmod |grep spca5xxspca5xx               659920  0videodev                7040  1

16、spca5xx我们再查看一下设备/dev/video0是否存在:rootlocalhost spca5xx-20060501# ls -lh /dev/video0crw- 1 beinan root 81, 0 06-08 09:33 /dev/video0要使摄像头显示出影像,摄像头应用程序 SpcaView;SpcaView 软件包,包括一组工具;spcaview工具是用来纪录数据流,也能用来播放数据;spcaserv 是流媒体服务器;spcacat 简单图片的抓取工具;SpcaView 下载和安装;下载地址: http:/mxhaard.free.fr/spca50x/Download

17、 ,我下载的是目前这个版本:spcaview-20051212.tar.gz 依赖关系;此软件依赖 libsdl,要先安装它才行,下载地址: ,我下载的是:SDL-1.2.10.tar.gz/download-1.2.phprootlocalhost # tar zxvf SDL-1.2.10.tar.gzrootlocalhost #  cd SDL-1.2.10rootlocalhost SDL-1.2.10# ./configure ; make ;make install 安装SpcaView:r

18、ootlocalhost # tar zxvf spcaview-20051212.tar.gz rootlocalhost # cd spcaview-20051212rootlocalhost spcaview-20051212# make ; make install 配置可执行程序的路径:可执行的工具被安装到 /usr/local/bin目录中,所以我们还要配置一下用户的环境变量PATH 。配置命令执行路径,在当前用户家目录下的.bashrc文件中加入下面的一行; export PATH=".:/bin:/sbin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/X11R6/bin"然后运行如下命令;rootlocalhost # source .bashrc 用spcaview来测试摄像头;rootlocalhost # spcaview -d /dev/video0 -f jpg -s 320x240 -s后面的参数是图像分辨率如果抓取数据流,尝试用下面的命令,比如我们把抓取的数据流存在一个.avi文件中;如果要播放,就用mplayer就行,xine也可以。rootlocalhost #  spcaview -f yuv -o .avi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论