基于s3c2440处理器的视频监控系统的设计_第1页
基于s3c2440处理器的视频监控系统的设计_第2页
基于s3c2440处理器的视频监控系统的设计_第3页
基于s3c2440处理器的视频监控系统的设计_第4页
基于s3c2440处理器的视频监控系统的设计_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、潍坊学院本科毕业设计(论文) PAGE 29目录 TOC o 1-3 h z u HYPERLINK l _Toc452836812 第一章前言 PAGEREF _Toc452836812 h 4 HYPERLINK l _Toc452836813 1.1 课题背景 PAGEREF _Toc452836813 h 4 HYPERLINK l _Toc452836814 1.2 s3c2440的介绍与应用 PAGEREF _Toc452836814 h 4 HYPERLINK l _Toc452836815 1.3 论文主要内容 PAGEREF _Toc452836815 h 4 HYPERLI

2、NK l _Toc452836816 第二章 系统总体方案介绍 PAGEREF _Toc452836816 h 6 HYPERLINK l _Toc452836817 2.1 视频监控系统总体设计方案 PAGEREF _Toc452836817 h 6 HYPERLINK l _Toc452836818 2.2 程视频监控系统硬件简介 PAGEREF _Toc452836818 h 6 HYPERLINK l _Toc452836819 2.2.1 主芯片总体介绍 PAGEREF _Toc452836819 h 6 HYPERLINK l _Toc452836820 2.2.1 主芯片主要部件

3、介绍 PAGEREF _Toc452836820 h 7 HYPERLINK l _Toc452836821 2.2.3 网卡芯片DM9000介绍 PAGEREF _Toc452836821 h 9 HYPERLINK l _Toc452836822 2.3 视频监控系统软件设计 PAGEREF _Toc452836822 h 9 HYPERLINK l _Toc452836823 2.3.1 Bootloader引导程序 PAGEREF _Toc452836823 h 9 HYPERLINK l _Toc452836824 2.3.2嵌入式操作系统 PAGEREF _Toc452836824

4、 h 10 HYPERLINK l _Toc452836825 2.3.3 驱动程序的设计 PAGEREF _Toc452836825 h 10 HYPERLINK l _Toc452836826 2.4 视频监控用户应用软件设计 PAGEREF _Toc452836826 h 11 HYPERLINK l _Toc452836827 2.4.1 应用程序整体设计 PAGEREF _Toc452836827 h 11 HYPERLINK l _Toc452836828 2.4.2输入组件之input_uvc PAGEREF _Toc452836828 h 11 HYPERLINK l _Toc

5、452836829 2.4.3输出组件之output_http PAGEREF _Toc452836829 h 12 HYPERLINK l _Toc452836830 2.5 本章小结 PAGEREF _Toc452836830 h 12 HYPERLINK l _Toc452836831 第三章 嵌入式Linux系统构建 PAGEREF _Toc452836831 h 13 HYPERLINK l _Toc452836832 3.1 嵌入式Linux开发环境搭建 PAGEREF _Toc452836832 h 13 HYPERLINK l _Toc452836833 3.2 Bootloa

6、der的移植与烧写 PAGEREF _Toc452836833 h 13 HYPERLINK l _Toc452836834 3.3 Linux 内核移植 PAGEREF _Toc452836834 h 15 HYPERLINK l _Toc452836835 3.4驱动移植 PAGEREF _Toc452836835 h 17 HYPERLINK l _Toc452836836 3.4.1 uvc驱动移植 PAGEREF _Toc452836836 h 17 HYPERLINK l _Toc452836837 3.4.2 DM9000网卡驱动移植 PAGEREF _Toc452836837

7、h 18 HYPERLINK l _Toc452836838 3.5 yaffs文件系统支持和根文件系统制作 PAGEREF _Toc452836838 h 19 HYPERLINK l _Toc452836839 3.6 本章小结 PAGEREF _Toc452836839 h 20 HYPERLINK l _Toc452836840 第四章 应用程序的编写 PAGEREF _Toc452836840 h 21 HYPERLINK l _Toc452836841 4.1 依赖库libjpeg编译 PAGEREF _Toc452836841 h 21 HYPERLINK l _Toc45283

8、6842 4.2 交叉编译mjpg-streamer PAGEREF _Toc452836842 h 21 HYPERLINK l _Toc452836843 4.3关于测试 PAGEREF _Toc452836843 h 21 HYPERLINK l _Toc452836844 4.4 实现热插拔功能 PAGEREF _Toc452836844 h 22 HYPERLINK l _Toc452836845 4.5实现开机启动功能 PAGEREF _Toc452836845 h 23 HYPERLINK l _Toc452836846 4.6 本章小结 PAGEREF _Toc45283684

9、6 h 24 HYPERLINK l _Toc452836847 结 论 PAGEREF _Toc452836847 h 25 HYPERLINK l _Toc452836848 参考文献 PAGEREF _Toc452836848 h 26 HYPERLINK l _Toc452836849 致 谢 PAGEREF _Toc452836849 h 27摘要:视频监控系统以其能够实时、形象、真实地反映被监视控制对象的特性,广泛应用于生产管理、银行监控和交通安防等重要领域。随着近年来网络技术的高速发展和嵌入式技术的逐渐成熟, 催生了全新的基于嵌入式技术的网络视频监控系统。不需要为监控系统增加额外

10、设备,轻而易举地实现远程视频监控功能,有着不小的优势。本课题在基于S3C2440 微处理器和嵌入式Linux 操作系统的软硬件平台上构建了视频服务器,视频服务器采用Mjpg-streamer,实现了无线wifi和网线两种连接方式,真正拥有了固定区域和可移动的双重功能。客户端接入网络后就可以通过浏览器或者客户端输入服务器的IP地址直接查看动态视频,客户端可以是PC也可以是手机等终端,客户端并不局限于局域网也不局限于一个设备。关键词:嵌入式技术;S3C2440;Linux系统;视频监控ABSTRACT:With its real time video monitoring system, imag

11、e, truly reflect the characteristics of the monitored control object, widely used in production management, bank monitoring and traffic security and other important fields.In recent years as the rapid development of network technology and embedded technology of mature gradually, has given rise to ne

12、w network video monitoring system based on embedded technology.Dont need for additional equipment monitoring and control system, easy to realize the remote video monitoring function, has a lot of advantages.This topic based on S3C2440 microprocessor and embedded Linux operating system software and h

13、ardware platform to build the video server, video server the Mjpg - the streamer, both realized wireless wifi and cables, really have the dual function of fixed area and mobile.Client can access the network through the browser or client enter the IP address of the server to check the dynamic video d

14、irectly, the client can be a PC can also be a mobile terminal, such as the client is not limited to local area network (LAN) is not confined to a device.Keyword:Embedded technology;S3C2440;Linux system;Video monitoring第一章前言1.1 课题背景自1946第一台电子计算机在美国研制成功已来,数字电子技术飞速发展,以其为基础的嵌入式技术随之出现,因为嵌入式操作系统即拥有着脱离硬件的特

15、性又有着占用空间小,可剪裁和完全开源方便开发等优势,嵌入式技术和网络技术的不断成熟,让网络视频监控成为了可能。 根据中国行业报告网2013年中国行业研究咨询报告显示,我们国家视频监控系统的总体市场规模已经超过200亿人民币,其中无线视频监控更是成为市场的生力军,所占比例从几年前的25.7%增长到49.1%。这些数据充分证明了在未来的你几年内视频监控技术必能够获得很好的发展。我国城市化步伐的逐步深入,城市人口的快速增加,视频监控技术在管理治安等方面的作用变得越来越突出,使得视频监控市场飞速发展,需求量更是于日剧增。本监控系统的目标是实现视频的获取、解码、网络传输和在客户端查看实时的图像的功能。目

16、前我国市场的视频监控设备主要是由模拟摄像头,网线设备和终端以及PC机组成,这样的视频监控系统有着许多不足,比如连线复杂和可移动性差,已经逐渐不能够满足人们生活的需要了。嵌入式系统平台有着低功耗、可扩展性强和开发简单的特点,已经逐步取代了传统的单片机平台。1.2 s3c2440的介绍与应用S3C2440是基于ARM公司ARM920T内核的32位RISC微处理器,主时钟最高能达到400Mhz,s3c2440还集成了内存管理单元MMU、16KB的指令和数据缓存机制、强大的内存管理机制和摄像头接口以及可以驱动各种液晶的LCD液晶控制接口等一系列专门针对嵌入式系统的外设。S3c2440的低功耗,简单,优

17、雅和全静态设计特别适合于成本和功耗敏感的应用,如手机、GPS等移动设备;AR920T是一款性能十分高的内核IP,故s3c2440广泛的应用于机器自动化控制、生成工具等高端的工控设备和医疗设备仪器汽车电子控制器;s3c2440强大的外设功能,使其十分适合各种各样的嵌入式硬件平台,如商场里的人机交互设备和银行里的ATM等。此外,s3c2440在2001年公布,十几年的发展让基于s3c2440的驱动和应用数不胜数,开发任何应用都能够找到相似的硬件电路和设备驱动,基于s3c2440的各方面强大的优势,本课题选择s3c2440作为主芯片,故本视频监控系统也是基于s3c2440的视频监控系统。1.3 论文

18、主要内容视频监控系统实现视频图像的采集、图像处理和压缩、图像有线和无线传输、接收端实时监控。本课题将详细介绍怎么移植内核和uboot的移植过程,Linux的移植主要包括优化选项的选择和驱动的修改,驱动方面主要是uvc驱动和wifi网卡驱动,uboot要实现网络下载的功能,所以要修改网卡驱动,最终使Linux和uboot能运行在s3c2440平台上;然后细说了怎么用busybox生成根文件目录,虽然实验用的都是挂载网络根目录文件系统,但对怎么生成根目录固件也有所提及;应用程序移植mjpg-streamer,编译mjpg-streamer主要的工作分为编译libjpeg依赖库和编译应用程序本身,在

19、这一章中还会介绍怎么对本视频监控系统进行测试,此外还会实现热插拔和开机自启动的功能。第二章 系统总体方案介绍2.1 视频监控系统总体设计方案网络视频监控系统是一个极其庞大的系统,其中包括了软件系统和硬件系统,系统的总体框图如下:应用程序(mjpg-streamer)嵌入式Linux操作系统Bootloader引导代码硬件平台s3c2440图2-1 系统总体框图整个系统的运行机制是USB摄像头采集视频传送给处理器,处理器处理图像发送数据给WIFI网卡,WIFI网卡经过无线信道发送信息给远程客户端,过程如下图:USB摄像头UVC驱动Linux系统mjpg-streamer应用程序网卡驱动Socke

20、t接收终端浏览器、应用程序WIFI、有线网卡图2-2 系统总体流程图2.2 程视频监控系统硬件简介2.2.1 主芯片总体介绍S3C2440处理器虽是三星公司出品的,但是其中最主要的内核却是ARM公司提供的ARM9内核方案, ARM处理器系列分为ARM7、ARM9、ARM10E、ARM11和Cortex,下面对这些系列的处理器做简单的说明。ARM7系列处理器是低功耗的32位RISC微处理器,最高可以达到130MIPS,支持Thumb 16位指令集和ARM 32位指令集,遗憾的是ARM7系列的处理器没有内存管理单元(MMU)。ARM9与ARM7相比,ARM9的最大差别在于:有MMU和Cache,此

21、外他的执行速度也有相当大的提高,最高可以达到300MIPS。ARM10E 系列具有更加杰出的高性能、低功耗特点,采用了一种新的省电模式,含有浮点运算 协处理器,大大提高了运算速度。ARM11 系列处理器是ARM公司近年推出的新一代RISC处理器,他是ARM新指令架构ARMv6的第一代设计实现,拥有高数据吞吐量的优势。Cortex 系列处理器是基于ARMv7架构的,是ARM公司最新的杰作,分为Cortex-A,Cortex-R,Cortex-M三类,ortex-A针对基于虚拟储存的操作系统和应用程序而设计,Cortex-R针对实时系统设计,Cortex-M对价格敏感的产品设计。图 2-3 主电路

22、简图2.2.1 主芯片主要部件介绍GPIO接口GPIO也称通用输入输出端口,通俗的说,就是一些引脚,可以通过它们输出高低电平或者通过他们读入引脚的状态是高电平还是低电平。S3C2440有130个I/O端口,分为GPA、GPB、.、GPH、GPJ共久组,可以通过设置寄存器来确定某个管脚的功能,每个GPIO端口都拥有三个寄存器,如下。GPxCON 也是端口配置寄存器,每个I/O接口都有着作为输入和输出以及第三功能,具体选择哪个功能是通过GPxCON寄存器来配置的。GPxDAT 端口数据寄存器,用于读/写引脚,当引脚配置为输入的时候,其值直接反映的是管脚的状态,配置为输出,该值直接会传送到外部引脚。

23、GPxUP 某位配置为1时,相应引脚内部没有上拉电阻,否则相应的引脚内部将配置上拉电阻。内存管理单元MMU内存管理单元负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查,现代的多用户多进程操作系统通过MMU使得各个用户进程都拥有自己独立的地址空间,而内存权限的检查可以保护每个进程所用的不会被其他进程破坏。S3C2440的虚拟内存和物理内存的转换机制是使用页表并且最多能够支持二级页表,具体是这样的:以段(Section,1MB)的方式进行转换时只用到一级页表,以页(Page)进行转换时用到两级页表,其中页的大小又分为三种:大页(64KB)、小页(4KB)、极小页(1KB),地址转换流

24、程图如下所示。一级页表引索页内地址01. p1 p2一级页表引索段内地址虚拟地址TTB Base页表基址寄存器段地址p1一级页表01.段地址+p2P2图 2-4 只有一级页表的地址变换流程物理段物理地址 p1 p2 p301.虚拟地址TTB Base页表基址寄存器p1一级页表01.页基址.P2二级页表物理地址.二级页表基址.01.页基址+p3.P3物理页图 2-5 具有两级页表的地址变换流程二级页表引索ADC和触摸屏接口S3C2440的CMOS模数转换器可以接收8个通道的模拟信号输入,并将他们转换为10位的二进制数据,此外s3c2440提供了与触摸屏直接相连的4个引脚,不再需要外接晶体管,S3

25、C2440与触摸屏接口结构如下。图 2-6 ADC与触摸屏接口结构2.2.3 网卡芯片DM9000介绍DM9000是一款高度集成的、低成本的单片快速以太网MAC控制器,含有带有通用处理器接口、10M/100M物理层和16KB的SRAM,此外DM9000还支持IEEE802.3X全双工流量控制模式,DM9000网卡在实验板的连线如下所示。ADDR2DATA0DATA15NOENWENGCS4NWAITEINT7/GPF7CMDSD0SD15NIORNIOEAENIOWAITINT图 2-7 DM9000网卡连线方式S3C2440缓冲器DM90002.3 视频监控系统软件设计2.3.1 Bootl

26、oader引导程序单板上电的时候执行的并不是Linux内核,那么开机首先执行的程序就是所谓的Bootloader程序的由来,Bootloader主要是实现上电时的一系列初始化操作,其中包括关闭看门狗、改变系统时钟和储存设。本视频监控系统使用的Bootloader程序移植于目前最流行的uboot-1.1.6,uboot除了Bootloader程序原有的网络下载、烧录内核根文件和启动内核等主要的功能外,还有着几乎匹配了所有的单板的优势。Uboot的最终目标是初始化MMU(内存管理单元)然后引导Linux内核,这其中还要做的就是设置启动参数,该启动参数囊括了单板的一系列信息。2.3.2嵌入式操作系统

27、当系统越来越大、应用越来越多,使用操作系统就很有必要,操作系统的的作用有:统一管理系统资源、为用户提供访问硬件的接口、调度多个应用程序、管理文件系统等。随着多年的发展,嵌入式操作系统也有多种选择,其中使用广泛的有:嵌入式Linux、VxWorks、Windows CE。VxWorks是美国WindRiver公司开发的嵌入式实时操作系统,单性能而言他是非常优秀的操作系统,具有可剪裁、灵活的任务管理、高效的任务通信等优点。缺点是它支持的硬件较少,源码不开放,并且授权费比较高。Windows CE是微软公司针对嵌入式设备开发的多任务多线程的操作系统,它支持X86、ARM、MIPS等架构的CPU,而且

28、硬件驱动程序丰富。但是,其源代码没有完全开发,而且占用比较多的内存,版权许可费也比较高。Linux是遵循GPL协议的开放源码的操作系统,使用时无需缴纳许可费用,内核可以任意裁剪,几乎支持所有的32位、64位CPU,内核中支持的硬件种类繁多,几乎能够找到所有的相似硬件驱动。几乎支持所有网络协议;有大量的应用程序可用。缺点在于实时性差。正因为Linux有着如此多的优点,所以在嵌入式操作系统方面毋庸置疑选择了Linux操作系统。2.3.3 驱动程序的设计驱动程序主要是包括USB摄像头、WIFI网卡和有线网卡驱动程序,下面做逐一说明。USB摄像头驱动:也称UVC 即 usb video class。U

29、SB协 议中包含了各种各样的Class协议,用来为不同的功能定义各自的标准接口。Video Class顾名思义是作为USB接口的视频设备的一个统一的数据交换规范。UVC驱动程序架构如下:用户空间主设备号,次设备号ioctldev/videoX内核空间cdev add插入操作video_register_deviceuvc_register_video字符设备层V4L2层UVC层uvc_fops.uvc_v4l2_ioctluvc_fops.uvc_unlocked_ioctlUSB摄像头硬件图2-8 UVC驱动程序框架WIFI网卡驱动:Linux的USB无线网卡驱动程序是工作在Linux的ie

30、ee802.11协议层之下,因此从某种角度上来说处理通用部分的框架程序是ieee802.11协议在驱动层的一种延伸,并为参数文件的编写创造了环境。Linux 网络驱动程序从上到下可以划分为 4 层次,分别为网络协议接口层、 MAC 帧处理层、提供实际功能的设备驱动功能层,以及网络设备和网络媒介层,系统框架图如下。数据包发送dev_queue_xmit()数据包接收Netif_receive_skb()MAC80211子系统MAC帧发送Ath5k_tx()MAC帧接收Ath5k_tasklet_rx()网络物理设备网络协议接口层MAC帧处理层网络驱动功能层网络设备与媒介层图2-9 WIFI网卡驱

31、动程序框架2.4 视频监控用户应用软件设计2.4.1 应用程序整体设计应用程序移植目前流行的视频服务器mjpg-streamer,MJPG-streamer采用模块化的设计方法,以功能块为单位进行描述,这些功能块被称为plug-in(组件)。MJPG-streamer最主要的是input_uvc输入和output_http输出组件。各个组件通过向上注册结构体的形式告诉主程序该组件的存在,其中组件的结构体中最关键的函数是init、run和stop函数,下面对最主要的input_uvc和output_http进行说明。2.4.2输入组件之input_uvc输入组件最主要的工作就是初始化摄像头和采集

32、摄像头数据并把摄像头原始的数据转换成jpg格式的数据, input_uvc的框架图如下。清理工作:比如清理缓存区,删除结构体.stopYUV:将数据转为MJPG,再存入缓存区MJPG:直接将数据写入缓存区uvcgrab:数据处理car_thread: 摄像头视频数据采集线程.runioctl.initInit_V4L2分配临时缓存Init_vedioIn(width,height,fps,format)input_uvc图2-10 input_uvc组件框架2.4.3输出组件之output_http输出组件实现了数据的传输功能,其中就有操作网卡的一系列操作,主要用到的是socket编程, ou

33、tput_http的框架图如下。清理工作:比如删除结构体.stopWrite:从缓冲区中取出数据,写到网卡缓存pthread_cond_wait: 等待视频数据缓冲区有数据更新.run.initSocket的初始化,有线或WIFI网卡的初始化output_http图2-11 output_http组件框架2.5 本章小结本章总体介绍了网络视频监控系统的整体设计方案,主要描述了硬件平台、Bootloader引导程序、嵌入式系统内核和mjpg-streamer应用程序,画出了各个部分的框架图。后面各个章节将给出更加详细的介绍。 第三章 嵌入式Linux系统构建3.1 嵌入式Linux开发环境搭建作

34、为开发工具,PC端的linux系统使用ubuntu9.10,但是linux操作系统在编写文件和浏览代码等各个方面都存在着诸多不便,所以这里并不完全使用ubuntu来开发,而是在安装windows操作系统的PC机上安装VMware虚拟机软件,这个虚拟机中安装了ubuntu操作系统,PC机和实验板之间的关系如下图所示。J-Link烧写裸板程序、Bootloader编写程序编译程序运行程序调试程序串口操作Bootloader/Linux、传输应用程序其他连接方式,如网线图 3-1 交叉开发模式本视频监控系统的调试设备有虚拟机、PC机之间和实验板,因为并没有路由器,所以PC机和实验板直接通过一根网线和

35、串口线相连,虚拟机和PC之间只能通过虚拟出来的NAT路由器相互连接,关于虚拟机和PC的网络作如下设置。PC电脑端设置本地网卡的IP为;虚拟机首先要增加两个虚拟网卡,一个并选择为NAT网卡,另一个选择桥接模式,然后设置NAT网卡;在虚拟机中ubuntu的启动栏执“System”-“Administration”-“Netwok”添加一个网络,设置如下:图3-2 ubuntu网络设置3.2 Bootloader的移植与烧写Bootloader的功能和PC的bios一样,其主要目的就是初始化实验板各个外设,然后引导操作系统内核,在固态储存设备上有相应的分区来存储了各个部分的程序,本课题的NAND F

36、LASH分区结构如下。uboot256kBBoot parameters128KBkernel2MBJFFS2 root8MYAFFS root53.6M图3-3 NAND FLASH分区示意图为了不破坏原来的代码,在board目录下将smdk2410.c复制为piaoran目录,并将piaoran目录下的smdk2410.c改名为piaoran.c。1)在uboot顶层Makefile文件中增加两行:piaoran_config:unconfig$(MKCONFIG) $(:_config=) arm arm820t piaoran NULL s3c24x0 2)在bord/smdk24x0

37、/Makefile中做如下修改:改:COBJS:= smdk2410.o flash.o为:COBJS:= piaoran.o flash.o3)修改SDRAM的配置,在piaoran/lowlevel_init,s文件中修改如下:改:#define REFCNT 113为:#define REFCNT 0 x4f4 /*HCLK=100Mhz*/4)增加对s3c2440的支持,s3c2440和s3c2410虽然有很多的相似,但是他们在系统时钟的设置、NAND FLASH控制器的操作方面有一些小差别,下面是在piaoran/pianran.c文件中系统时钟方面的更改,因为要改的较多这里不列出原

38、文。 #defines3c2440_MPLL_400MHZ(0 x5c12 | 0 x014 | 0 x01) #defines3c2440_UPLL_48MHZ (0 x3812 | 0 x024 | 0 x02) #defines3c2440_CLKDIV 0 x05 #defines3c2410_MPLL_200MHZ(0 x5c12 | 0 x044 | 0 x00) #defines3c2410_UPLL_48MHZ (0 x2812 | 0 x01Multimedia devices Video For LinuxVideo Capture Adapters USB Video C

39、lass (UVC)DM9000: Device Drivers Networkdevicesupport * NetworkdevicesupportEthernet (10 or 100Mbit) DM9000 support3)修改MTD分区,本课题将NAND分为四个分区,具体如下所示。static struct mtd_partition smdk_default_nand_part = 0 = .name = bootloader, .size = 0 x00040000,.offset= 0,1 = .name = params, .offset = MTDPART_OFS_APP

40、END, .size = 0 x00020000,2 = .name = kernel, .offset = MTDPART_OFS_APPEND, .size = 0 x00200000,3 = .name = root, .offset = MTDPART_OFS_APPEND, .size = MTDPART_SIZ_FULL,;至此,内核移植完毕,可以使用make命令编译内核。3.4驱动移植3.4.1 uvc驱动移植uvc驱动的编写主要的工作就是修改内核的uvc驱动以适应本实验板的USB摄像头设备,修改如下。1)在UVC_driver.c文件中的usb_device_id uvc_id

41、s增加对iP297X摄像头的支持,追加下面这一项。 .match_flags = USB_DEVICE_ID_MATCH_DEVICE| USB_DEVICE_ID_MATCH_INT_INFO,.idVendor = 0 x1B3B,.idProduct = 0 x2970,/*If you use iP2977, then type 0 x2977 */.bInterfaceClass = USB_CLASS_VIDEO,.bInterfaceSubClass = 1,.bInterfaceProtocol = 0,.driver_info = UVC_QUIRK_PROBE_MINMAX

42、| UVC_QUIRK_IGNORE_SELECTOR_UNIT2)在文件uvc_video.c修改uvc_video_decode_start函数以增加相容性。A把fid变量修改成静态变量,如下所示:static _u8 fid; / 修改成 static 变量B 在if (data1 & UVC_STREAM_ERR)判断完成后加如下内容:if ( len = 16 ) / have data in buffer if ( (data12=0 xFF & data13=0 xD8 & data14=0 xFF) |(data12=0 xD8 & data13=0 xFF & data14=

43、0 xC4)if(stream-last_fid)fid &= UVC_STREAM_FID;else fid |= UVC_STREAM_FID;3)此外还要在同文件中uvc_video_decode_data函数的行buf-buf.bytesused += nbytes;后追加如下内容。unsigned char *point_mem; static unsigned char *mem_temp = NULL; static unsigned int nArrayTemp_Size = 1000;if(mem_temp = NULL)mem_temp = kmalloc(nArrayTe

44、mp_Size, GFP_KERNEL);else if(nArrayTemp_Size = nbytes) /kfree(mem_temp);nArrayTemp_Size += 500;kmalloc(nArrayTemp_Size, GFP_KERNEL);memset(mem_temp, 0 x00, nArrayTemp_Size);point_mem = (unsigned char *)mem;if( *(point_mem) = 0 xD8 & *(point_mem + 1) = 0 xFF & *(point_mem + 2) = 0 xC4)memcpy( mem_tem

45、p + 1, point_mem, nbytes);mem_temp0 = 0 xFF;memcpy( point_mem, mem_temp, nbytes + 1);至此,uvc的驱动修改完毕。3.4.2 DM9000网卡驱动移植因为内核中已经有了DM9000有线网卡驱动,所以这里的修改比较简单,主要的工作就是添加一些宏把内核驱动引进来,还有一些小小的修改,修改如下。1)修改arch/plat-s3c24xx/common-smdk.c以增加DM9000平台设备。A添加要包含的头文件,增加以下代码:#ifdefined(CONFIG_DM9000) | defined(CONFIG_DM9

46、000_MODULE)#include#endifB添加DM9000的平台设备结构,增加以下代码static struct resource s3c_dm9k_resource = 0 = .start = S3C2410_CS4, /* ADDR2=0,发送地址时使用这个地址 */ .end = S3C2410_CS4 + 3, .flags = IORESOURCE_MEM, 1 = .start = S3C2410_CS4+4,/*ADDR2=1,传输数据时使用这个地址 */ .end = S3C2410_CS4 + 4 + 3, .flags = IORESOURCE_MEM, 2 =

47、 .start = IRQ_EINT7, /* 中断号 */ .end = IRQ_EINT7, .flags = IORESOURCE_IRQ, ;2)加入内核设备列表中,把平台设备s3c_device_dm9k加入smdk_devs数据即可,系统启动时会把这个数组的设备注册进内核中,如下所示。static struct platform_device _initdata *smdk_devs = #if defined(CONFIG_DM9000) | defined(CONFIG_DM9000_MODULE)&s3c_device_dm9k,#endif ;到这里,有线网卡DM9000的

48、驱动移植完毕,因为无线网卡和有线网卡的驱动极其相似,所以这里就不说无线网卡的驱动了。3.5 yaffs文件系统支持和根文件系统制作嵌入式根文件系统的通常目录如下:bin 必要的用户命令(二进制文件)dev 设备文件和其他特殊文件etc 系统配置文件,包括启动文件lib 必要的程序库(例如c程序库)以及内核模块mnt 挂载点,用于暂时挂载的文件系统proc 用于提供内核与进程信息的虚拟文件系统root root用户的主目录sbin 必要的系统管理员命令tmp 暂时性的文件usr 在第二层包含了对大多数用户游泳的大量应用程序和文件var 用于存放监控程序和工具程序的可变的数据根文件目录文件繁多,这

49、里引入了Busybox工具来构建根目录,Busybox是一个遵循GPL V2协议的开源项目, Busybox为各种嵌入式系统提供了一个比较完全的工具集。Busybox的选项配置和内核一样,也是用make menuconfig实现的可视化配置窗口,本实验要配置如下选项。1)设置“TAB”键补全功能,如下所示:Busybox Settings BusyboxLibraryTuning * Tab completion1)使用动态连接,而不是选择静态连接,如下所示:BuildOptions Build BusyBox as a staticbinary(no shared libs)配置完毕,下来就

50、是编译和安装busybox,和内核编译一样,这里依旧要修改顶层的Makefile来制定编译器,对Makefile做如下修改:改:ARCH?=$(SUBARCH)CROSS_COMPILE?=为:ARCH?=armCROSS_COMPILE?=arm-linux-然后即可以执行make命令编译Busybox,最后执行“make CONFIG_PREFIX=/work/nfs_root/fs_piaoran install”命令把Busybox安装到/work/nfs_root/fs_piaoran目录中,其中nfs_root是nfs网络文件系统的挂载点。因为本实验使用的是动态连接库,所以还得把g

51、libc库安装到根文件目录中,因为在制作交叉编译工具链时已经在“/work/tools/gcc-3.4.5-glibc2.3.6/arm-linux/lib”目录下生成了glibc库,所以可以直接将需要的内容复制到根目录下即可,如下:mkdir /work/nfs_root/fs_piaoran/libcd /work/tools/gcc-3.4.5-glibc2.3.6/arm-linux/libcp*.so*/work/nfs_root/fs_piaoran/lib d如果不是使用网络文件系统的话,还需要把我们生成的根目录进行一定的打包操作,这里实用的根目录制作工具时mkyaffsimag

52、e,使用如下命令进行打包:cd /work/nfs_rootmkyaffsimage fs_piaoran fs_piaoran.yaffs到此,根目录构建完成,通过uboot下载到NAND FLASH上就可以了。3.6 本章小结本章主要讲了如何构建整个视频监控系统软件平台的,这其中包括虚拟机、PC、实验板,还具体说了怎么移植uboot、内核、各个驱动以及制作根目录,更加深入的介绍了整个视频监控系统的各个部件。第四章 应用程序的编写4.1 依赖库libjpeg编译因为mjpg-streamer中调用了libjpeg的相关函数,所以这里要先编译libjpeg,编译libjpeg过程如下:1)解压

53、并创建一个临时文件:sudo tar xzvf libjpeg-turbo-1.2.1.tar.gz cd libjpeg-turbo-1.2.1mkdir tmp2)用如下命令配置:/configure -prefix=/work/libjpeg-turbo-1.2.1/tmp/ -host=arm-linux其中prefix表示编译结果存放的目录, -host表示所用的编译器。3)编译、安装:makemake install4)复制编译到的库:cd tmp/lib/cp *so* /work/nfs_root/piaoran/lib -d至此,依赖库libjpeg编译完成。4.2 交叉编译

54、mjpg-streamer首先用命令“sudo tar xzvf mjpg-streamer-r63.tar.gz”命令解压程序包,然后将如下文件做相应的修改:./Makefile 将 CC=gcc 修改为 CC= arm -linux-gcc ./plugins/input_gspcav1/Makefile 将 CC=gcc 修改为 CC= arm -linux-gcc./plugins/input_testpicture/Makefile将 CC=gcc 修改为 CC=arm-linux-gcc./plugins/output_autofocus/Makefile 将 CC=gcc 修改为

55、 CC=arm -linux-gcc./plugins/output_http/Makefile 将 CC=gcc 修改为 CC=arm -linux-gcc./plugins/input_uvc/Makefile 将 CC=gcc 修改为 CC=arm -linux-gcc修改到此完成,下面是编译命令:make cleanmake编译完成后,把编译结果拷贝到本实验的根文件系统中:cp *so* /work/nfs_root/piaoran/lib -dcp mjpg_streamer /work/nfs_root/piaoran/bin/至此mjpg-streamer也编译成功。4.3关于测

56、试本实验直接使用网络文件系统,所以每次实验都重新下载内核,实验的步骤如下:1)用jlink下载uboot到nor flash中,启动3秒内按下空格键就可以看到如下菜单:图4-1 uboot菜单2)因为要从网络下载内核,所以这里选择q退出菜单,并用下面命令下载内核:nfs 30000000 13:/work/nfs_root/uImage ; 3)使用命令“bootm 30000000”启动内核4)插上USB摄像头,使用下面命令启动mjpg_streamer:mjpg_streamer -i input_uvc.so -f 10 -r 320*240 -o output_http.so -w w

57、ww其中input_uvc.so是输入组件,output_http.so是输出组件。5)手机或者电脑连接网络热点,在浏览器输入下面地址就可以查看到: HYPERLINK 7:8080/?action=stream 7:8080/?action=stream4.4 实现热插拔功能现在的内核还没有实现uvc设备的热插拔,热插拔有三个功能,其一是自动安装设备节点,其二是插上USB摄像头后自动启动mjpg_streamer,其三是拔掉摄像头再插上依旧能够启动这个应用并创建设备节点,实现这个功能的步骤如下:在/etc/mdev.conf追加如下语句:video012345? 0:0 777 * /bin

58、/mjpg-streamer.sh /dev/$MDEV意思是当有video改变的时候就启动/bin/mjpg-streamer.sh应用程序。2)命令解释,下面详细解释上面这句脚本各部分的意义: : device regex:正则表达式,表示哪一个设备uid: ownergid: 组IDoctal permissions:以八进制表示的属性:创建设备节点之后执行命令$:删除设备节点之前执行命令*: 创建设备节点之后 和 删除设备节点之前 执行命令command:要执行的命令3)实现mjpg-streamer.sh,其脚本内容如下#!/bin/shNAME=mjpg_streamerPROG=

59、/bin/$NAMEDEVICE=$1FPS=10RESOLUTION=320*240if $ACTION = add ;then# USB video in if -e $DEVICE ;then $PROG -i input_uvc.so -d $DEVICE -f $FPS -r $RESOLUTION -o output_http.so -w www & else# not find device exit -2 fi sleep 3# check if mjpg_streamer is running pgrep $NAME if $? -ne 0 ;then# try to mjpg_streamer YUYV format $PROG -i input_uvc.so -d $DEVICE -y -f $FPS -r $RESOLUTION -o output_http.so -w www & fielse killall -9 $NAMEfi4.

温馨提示

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

评论

0/150

提交评论