基于crotex_a8平台的本地视频监控系统_第1页
基于crotex_a8平台的本地视频监控系统_第2页
基于crotex_a8平台的本地视频监控系统_第3页
基于crotex_a8平台的本地视频监控系统_第4页
基于crotex_a8平台的本地视频监控系统_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

毕业论文(设计)中文题目基于CROTEX_A8平台的本地视频监控系统英文题目THELOCALVIDEOSURVEILLANCESYSTEMBASEDONCROTEXA8PLATFORM专业班级09电子信息工程2班职称副教授提交日期2013年5月15日摘要随着科学技术的发展,视频监控系统正在向集成化、数字化、智能化、网络化方向发展。嵌入式视频监控系统充分利用集成电路和网络技术的科技成果,创造出了体积小巧、性能优越的视频监控产品。本论文根据家用安防监控系统的要求,提出了一种基于CROTEX_A8平台的本地视频监控系统实现方案。系统以嵌入式微处理器S5PC100和嵌入式LINUX操作系统为核心平台,将CMOS摄像头采集来的图像数据进行编码转换后,直接传输到本地的LCD显示屏上显示,从实现了本地视频监控的目的。本论文首先阐述了视频监控系统的背景、现状和未来发展趋势,介绍了本视频监控系统的整体架构及其实现方式;然后分析了系统的硬件模块,包括ARM处理器相关的硬件基础知识和系统外设硬件电路的设计;之后重点讨论了系统软件模块的设计,其中包括介绍嵌入式LINUX操作系统、分析LINUX操作系统中的UBOOT启动程序的原理,LINUX内核的裁剪和移植以及根文件系统的制作;并对LINUX操作系统下的CMOS摄像头和LCD显示屏的驱动框架开发进行了研究。最后分析了视频采集传输模块中的V4L2视频接口及图像编码转换算法。本系统采用模块化设计方法,使设计变得更加简洁、高效,具有良好的扩展性和工程参考价值。关键词视频监控S5PC100LINUX操作系统CMOSLCDTHELOCALVIDEOSURVEILLANCESYSTEMBASEDONCROTEXA8PLATFORMABSTRACTWITHTHEDEVELOPMENTOFSCIENCEANDTECHNOLOGY,THEVIDEOSURVEILLANCESYSTEMISBECOMEMOREINTEGRATED,DIGITALANDNETWORKINGTHEEMBEDDEDVIDEOMONITORSYSTEMMAKEFULLUSEOFTHESCIENTIFICTECHNOLOGICALACHIEVEMENTSANDTHENETWORKTECHNOLOGY,SOASTOMAKETHEVIDEOSURVEILLANCEPRODUCTSBECOMESMARTSIZEANDSUPERIORPERFORMANCETHISTHESISISBASEDONTHEREQUIREMENTSOFTHEHOMESECURITYMONITORSYSTEM,PUTFORWARDANIMPLEMENTATIONSCHEMEOFTHELOCALVIDEOSURVEILLANCESYSTEMBASEDONCROTEX_A8PLATFORMTHISSURVEILLANCESYSTEMISUSETHES5PC100EMBEDDEDMICROPROCESSORANDLINUXOPERATINGSYSTEMASTHECOREPLATFORMCMOSCAMERACAPTUREIMAGEDATACOMPRESSIONCODING,ANDTHENDIRECTLYTRANSFERTODISPLAYONTHELOCALLCD,SOASTOACHIEVETHEPURPOSESOFLOCALVIDEOMONITORINGTHISPAPERFIRSTEXPLAINSTHEBACKGROUND,THESTATUSANDTHEFUTUREDEVELOPMENTTRENDOFTHEVIDEOSURVEILLANCESYSTEMINTRODUCETHEWHOLESTRUCTUREANDIMPLEMENTATIONOFSURVEILLANCESYSTEMS,ANDTHENANALYSISTHESYSTEMSHARDWAREMODULES,INCLUDINGTHEARMMICROPROCESSORHARDWAREKNOWLEDGEANDSYSTEMSEQUIPMENTANDITSINTERNALHARDWARECIRCUITDESIGN,AFTERTHATEMPHASISONTHESOFTWAREMODULEDESIGNOFTHESYSTEM,ITINCLUDESPRESENTATIONOFEMBEDDEDLINUXOPERATINGSYSTEMANDTHESTARTPRINCIPLEOFBOOTLODERPROGRAM,LINUXKERNELCOMPILEANDTRANSPLANTATION,ANDTHEROOTFILESYSTEMPRODUCTION,ANDEXPLAINSDRIVERFRAMEWORKOFTHECMOSCAMERAANDLCDDISPLAYFINALLY,ANALYSISTHEV4L2VEDIOINTERFACEANDTHEIMAGEENCODINGANDDECODINGALGORITHMSTHESYSTEMUSESAMODULARDESIGNAPPROACH,THEDESIGNBECOMEMORESIMPLE,EFFICIENT,HASGOODSCALABILITYANDVALUEOFENGINEERINGKEYWORDSVIDEOSURVEILLANCES5PC100LINUXOPERATINGSYSTEMCMOSLCD目录1绪论111课题研究的背景和意义112视频监控系统的发展趋势12视频监控系统总体方案设计23视频监控系统硬件设计231ARM处理器简介232S5PC100微处理简介433存储器634串口735CMOS摄像头836LCD显示屏94视频监控系统软件设计1041嵌入式系统简介1042LINUX操作系统简介1143交叉编译环境的建立1244嵌入式LINUX移植13441UBOOT启动程序13442LINUX内核移植14443嵌入式根文件系统155系统设备驱动程序设计1951LINUX设备驱动程序概述1952LINUX下设备驱动程序的实现2054CMOS摄像头驱动设计2155LCD显示屏驱动设计236视频采集与显示2761V4L2视频设备接口27611V4L2的API及数据结构27612V4L2的操作流程28613V4L2驱动架构3162图像编解码标准377系统调试及运行结果3871系统调试环境3872系统运行结果388总结与展望41致谢43参考文献44附录451绪论11课题研究的背景和意义随着网络科学技术和集成电路技术的迅速发展和人民生活水平的提高,使得人们的生活方式发生了重大的改变,视频监控以其信息内容丰富直观、操作简单等特点日益受到人们的关注。视频监控系统的出现和发展主要有两方面的原因一方面是人们安全防范意识的加强,使得人们迫切希望通过视频监控的方式来预防和减少公共场所的违法犯罪活动;另一方面是视频监控技术的迅速发展,为它的实现和应用奠定了坚固的基础;而计算机技术和多媒体技术的迅速发展,将自动控制和多媒体技术融入到视频监控系统中来,促进了它的普及。如今小到私人居室,大到整个城市的交通路口,我们都可以看到监控产品的存在,大量犯罪案件在安防监控产品的帮助下破获。人们意识到视频监控对生产生活安全的重要性,因此视频监控凭借其先进的技术和友好的人机界面,逐步走进人们的生活当中。12视频监控系统的发展趋势将嵌入式系统技术、网络通信技术和基于TCP/IP、RTP/RTCP/PTSP的视频流媒体传输技术结合将成为视频监控系统的未来发展趋势。利用摄像头对监控现场进行信息采集并处理,再通过网络流媒体传输的方式传输到网络上,用户可以通过互联网来管理和使用信息。因此,视频监控系统在当今的自动化领域具有相当广阔的应用前景。目前,视频监控系统的发展趋势可以概括为(1)视频监控数字化视频监控发展经历了模拟视频监控、半数字监控、数字监控三个阶段。其中每个阶段的发展都与视频编码技术的发展密切相关,因此,视频监控的数字化是安防监控行业未来的发展方向。(2)视频监控智能化由于视频监控的信息量非常大,而对于用户来说,真正需要的信息只是其中的小部分,属于小概率的事件。因此,如何在海量数据获取用户需要的信息,如何能把视频监控系统从静态的事后取证变成动态的实时报警对用户来说显得更加重要。实际上现有的智能监控系统都配置移动侦测、昼夜自适应切换、预警设置等智能化的功能。(3)视频监控网络化网络视频、网络电视等都是网络技术快速发展的重要应用。随着网络技术的发展,基于网络的远程视频监控更易被人们所接受,网络摄像头把压缩的视频数据通过TCP/IP协议及RTP/RTCP/PTSP流媒体技术实现视频在网络上的多路复用传输,拥有访问权限的用户可以随时通过互联网访问指定的监控系统,从而实现对整个监控系统的指挥控制、调度存储等功能。因此,基于网络的视频监控系统将会成为未来的主流。2视频监控系统总体方案设计该视频监控系统由前端CMOS摄像头、CROTEX_A8主控中心、LCD显示屏三大部分部分组成。其中该监控系统的主控CPU采用三星公司生产的基于CROTEX_A8内核的S5PC100微处理器,通过在处理器上运行嵌入式LINUX操作系统,构建嵌入式服务器,此举是为了提高开发效率,提升视频监控的灵活度和扩展性,使得视频监控系统的后续应用程序便于开发。前端CMOS摄像头采用CMOS图像传感器,负责对图像信号的采集,并将图像信号传输进CROTEX_A8嵌入式服务器进行压缩编码转换,之后将压缩编码后的图像数据通过总线直接传输到本地LCD显示屏上显示,从而实现了本地视频监控的目的。系统整体结构框图如图21所示S5PC100CMOS摄像头CROTEX_A8ARMCORECAMIF摄像头控制器V4L2视频接口LCD显示屏图21系统整体结构图3视频监控系统硬件设计31ARM处理器简介ARM嵌入式微处理器是由全球知名的芯片方案设计供应商ARM公司开发的产品。ARM嵌入式处理器有着完整的体系结构,它的体积小巧、成本功耗低、性能优越。因此,基于ARM技术的微处理器的应用占据了32位精简指令集微处理器80以上的市场份额,ARM微处理器技术正在逐步渗入到我们生活的各个方面。目前ARM处理器有ARM7、ARM9、ARM9E、ARML0、ARMLL和CROTEX等系列,每个系列除了具有ARM体系结构的共同特点以外,都有各自的特点和应用领域。通用的ARM处理器内部结构图如图31所示图31通用ARM处理器内部结构图(1)ARM处理器的特点12采用RISC架构的ARM微处理器一般具有如下特点支持THUMB16位/ARM32位双指令集,能很好的兼容8位/16位外设1使用寄存器指令存取,指令读取执行速度快2加载/存储结构,数据处理的操作只面向寄存器的内容3单寻址模式,所有加载/存储的地址都由寄存器的内容和指令域决定4指令域完全固定统一,指令的译码实现了完全简化5每条数据指令都对ALU和移位器进行控制,从而实现两者的最大利用6地址自动增加和减少的寻址模式实现了程序循环的优化7寄存器存储/加载指令实现了数据最大吞吐量8所有指令的条件执行实现了最快速的代码执行9(2)ARM处理器的结构ARM处理器共有37个32BIT长的寄存器;其中包括30个通用寄存器、1个PC指针寄存器PCR15、1个程序状态寄存器CPSR、5个保存程序状态寄存器SPSR。ARM处理器的在较新的体系结构中支持两种指令集ARM指令集和THUMB指令集。其中,ARM指令为32位的长度,THUMB指令为16位长度。THUMB指令集为ARM指令集的功能子集,但与等价的ARM代码相比较,可节省3040以上的存储空间,同时具备32位代码的所有优点。ARM体系支持7种工作模式,包括用户模式USR、系统模式SYS、管理模式SVC、未定义指令模式UND、数据存取异常模式ABT、中断模式IRQ、快速中断模式FIQ。其中除了用户模式以外的其它模式,我们称之为特权模式。它们之间的区别在于有些操作只能在特权模式下才被允许执行,如直接改变模式和中断使能等。另外除了用户模式和系统模式以外的其它5种模式,我们又称之为异常模式,当特定的异常出现的时候,程序就会进入到相应的异常模式。ARM处理器是基于精简指令集计算机原理设计的,它的发展过程经过了V4、V5、V6、V7CORTEX系列4个系列,其中比较常见的ARM内核处理器型号有ARM7、ARM9、ARM10、ARM11、CROTEX_A8。为了提高指令执行效率,大部分的ARM指令为单周期指令,并从软件设计角度看,ARM处理器的指令流水线采用3级流水线模型(取址,译码,执行),并提供了LDM/STM类似的批量数据操作指令。1232S5PC100微处理简介S5PC100是由三星公司设计生产的基于CROTEX_A8内核的微处理器,它为高端手持设备和消费电子等产品提供了性价比超高的微控制器解决方案。S5PC100处理器由CROTEX_A8内核、内存管理单元MMU和高速缓存CACHE三部分组成。S5PC100具有分别独立的32KB的ICACHE和32KB的DCACHE。S5PC100处理器提供了丰富的内部设备,其中分别有分开的32KB的ICACHE和32KB的DCACHE,1个LCD控制器,支持NANDFLASH系统引导,系统管理器片选逻辑和SDRAM控制器,1个RTC内部时钟,3个UART通道,4个DMA通道,4个PWM定时器器,一个10位ADC,I2C总线接口,I2S音频总线接口,4个USBHOST接口,1个USBDEVICE接口,2通道SPI和内部PLL时钟倍频器,SD/MMC卡接口,看门狗计数器,128位通用I/O和32位外部中断源。S5PC100内部结构框图如图32所示S5PC100INSTRUCTIONMMUS5PC100PROCESSORCROEINTERALEMBEDDEDICEDATAMMUC13INSTRUCTIONCACHE16KBDATACACHE16KBEXTERNALCOPORCINTERFACEWRITEBACKPATAGRAMAMBBUSI/FCP15WRITEBUFFERC13JTAGIPA310IVA310DVA310DPA310DD310DVA310ID310WPBA310图32S5PC100内部结构框图(1)S5PC100微处理器体系结构采用13级流水线和哈佛架构,提供20DMIPS/MHZ的性能1采用64/32位的内部总线结构,和最大833M赫兹的运算速度2具有全性能的存储管理单元MMU,独立的32KBICAHE和32KBDCAHE3支持ARM调试结构,支持JTAG调试方式4内置高级微控制器总线AMB体系结构AMB20,AHB/APB5(2)S5PC100微处理器系统管理支持大/小端存储模式1支持8个内存单元,每个内存内存单元为128MB,其中6个用于ROM、SRAM等,22个用于ROM/SRAM/SDRAM,每个内存块都支持8/16/32位数据总线编程1个起始地址可变的内存块BANK7,7个起始地址固定的内存块3BANK0BANK6,所有的内存块可编程寻址周期支持SDRAM自动刷新模式,支持DCACHE、ICACHE和写缓冲4支持从多种形式的ROM启动,包括NORFLASH/NANDFLASH、EEROM5支持WINCE、LINUX、VXWORK等多种操作系统633存储器在嵌入式系统中的存储器有两种类型,分别为SDRAM和FLASH,而在在本视频监控系统中用到1片256M的SDRAM和1片256M的NANDFLASH和1片2M的NORFLASH。SDRAM是嵌入式系统的内部存储器,它具有存储容量大和价格便宜等优点,如今已被广泛应用在各种嵌入式操作系统中。当系统启动时,CPU首先从起始地址0XO处读取启动程序,在完成系统的初始化后,程序代码一般会跳到系统内部存储器SDRAM中运行,以提高系统的运行速度。另外系统及用户的堆栈、运行数据也都放在SDRAM中。FLASH是一种可上电擦写,掉电后信息不丢失的外部存储器,它具有功耗低、容量大、擦写速度快、可整片或分扇区擦除等特点,并且可由内部嵌入的算法完成对芯片的操作,因而在各种嵌入式系统中也得到了广泛的应用。作为一种非易失性存储器,FLASH在系统中通常用于存放源程序代码和一些在系统掉电后需要备份保存的用户数据等。常用的FLASH为8和16位的数据宽度,工作电压为33V。目前使用的FLASH主要有两种,分别为NORFLASH和NANDFLASH。其中NANDFLASH的特点是存储密度高,读写速度快,存储容量大。而NORFLASH的特点是在能在芯片内部执行,故应用程序可以直接在存储器的内部运行,因此NORFLASH的传输效率非常高,在小容量存储时成本效益很高,但是读写速度慢也影响了存储器的性能。综合两种FLASH的各自的优缺点,本系统选用NORFLASH存储UBOOT启动代码,NANDFLASH存储LINUX内核和文件系统。其中NORFLASH选用NUMONYX公司生产的M25P10A,而NANDFLASH选用三星的K9F2G08UOA。本系统中的NANDFLASH的硬件电路图如图33所示图33NANDFLASH的硬件电路图34串口串口在嵌入式系统开发中起着非常重要的作用,一般用于下载程序源码和调试程序。另外串口也是一个通用的接口设备,通过串口主控板可以和其他很多外围设备进行扩充连接。本视频监控系统使用的RS232串口,它的数据传输率为20KB/S左右,它是单工传输的方式,在传输线上只允许一个驱动器和一个发送器。它的最大传输距离可达30米,适用于距离较近的设备间通信,在本系统中RS232UART的硬件电路图如图34所示图34RS232UART的硬件电路图在本视频监控系统中UART接口主要的作用是用于系统的开发调试和下载,在开发过程中,PC机端需要通过串口读取LINUX系统终端信息,并向LINUX系统发送SHELL命令,完成程序烧写等数据交互操作。35CMOS摄像头摄像头(CAMERA)是一种视频图像采集设备。在如今市场上最常用到的摄像头有两种,分别为CMOS摄像头和CCD摄像头。其中CMOS摄像头是一种采用CMOS图像传感器制作成的摄像头。CMOS图像传感器主要是利用硅和锗半导体做成带负电和带正电的晶体管覆盖在传感器表面,通过晶体管间的互补效应将光信号解读成电信号,进而通过摄像头内部的图像处理芯片将电信号转换成图像信号。从原理上讲,CMOS图像传感器的信号是以点为单位的电荷信号,而CCD图像传感器是以行为单位的电流信号。因此,前者的成像是敏感速度快且省电。但它最大的缺点就是图像容易出现噪点。下图35所示为CMOS摄像头的内部结构图图35CMOS摄像头的内部结构图CMOS摄像头的工作原理大致为外界景物光线通过镜头生成的光信号投射到CMOS图像传感器表面上,CMOS图像传感器就把光信号解读成电信号,再经过集成在摄像头内部图像芯片转换成初始图像信号后输出到摄像头控制器(CAMIF)进行加工处理,转换成标准的RGB、YUV等格式图像信号,然后通过总线传输到LCD显示屏上就可以实时观看到图像。36LCD显示屏利用液晶制成的显示屏称为LCD显示屏,按驱动方式可分为静态驱动、简单矩阵驱动以及主动矩阵驱动3种。其中简单矩阵型可分为扭转向列型(TN)和超扭转式向列型(STN)两种,而主动矩阵型则以薄膜式晶体管型(TFT)为主。表31列出了TN、STN和TFT显示器的区别。10表31列出了TN、STN和TFT显示器的区别类别TNSTNTFT原理液晶分子,扭转90扭转180270液晶分子,扭转90特性黑白、单色低对比黑白、彩色,低对比彩色(1667万色)动画显示否否是视角30以下40以下80以下面板尺寸13英寸112英寸37英寸TN型液晶显示技术是LCD显示技术中中最基本的,其他种类的LCD都是TN型的基础进行改进而的来的。但由于TN型LCD显示质量差,色彩单一,对比度低,而且反映速度很慢。因此它主要能用于简单的字符的显示,如电子表和计算器等。10STN型LCD的显示原理与TN型LCD类似,它们的区别在于TN型是将入射光旋转90,而STN则可将入射光旋转180270。故STN型LCD改善了TN型LCD视角狭窄的缺点,显示图像的质量较TN型LCD高。STN型LCD集成了IRCARD,将任一像素点分成3个子像素,分别透过IRCARD就能显示红、绿、蓝三基色,再由该三基色按比例调和,显示出不同的色彩。但STN型LCD显示的画面色彩对比度仍较小,反应速度也较慢,可以作为一般的操作显示接口。但STN的反应速度较慢,但电场反复改变电压的过程中,每一像素的恢复过程较慢。因此,当在屏幕画面快速变化时,会产生“拖尾”现象。10为了解决上述的问题,主动式TFT型的LCD显示器被提出,它的结构较为复杂,其中包括背光管、导光板、偏光板、滤光板、玻璃基板、配向膜、液晶材料和薄膜式晶体管等。在TFT型LCD显示器中,每一液晶象素点都是由集成在其后的薄膜晶体管来驱动,每个像素都可以通过点脉冲直接控制,因而每个节点都相对独立,并可以连续控制,这样不仅提高了显示屏的反应速度,而且可以精确控制显示色阶,所以TFT液晶的显示出来的色彩更为逼真。适用于PDA、笔记本电脑、数码相机、MP4等消费电子。其工作原理简单说就是两片玻璃基板中间夹着一层液晶,上层的玻璃基板是与彩色滤光片结合、而下层的玻璃基板则有TFT晶体管镶嵌于上。当电流通过晶体管产生电场变化时,造成液晶分子偏转,改变光线的偏极性,再利用偏光片决定像素的明暗状态。此外,由于LCD面板本身并不发光,需要加上一个背光板来提供一个高亮且亮度分布均匀的光源。同时上层玻璃因与彩色滤光片贴合,形成每个像素各包含红蓝绿三颜色,这些发出红蓝绿色彩的像素便构成了图像画面。10本视频监控系统用的LCD屏是夏普公司生产的TFT型LCD显示屏LQ043T3DX02,系统中的LCD接口硬件电路图如图37所示图37LCD接口硬件电路图4视频监控系统软件设计41嵌入式系统简介首先,从嵌入式系统本身的组成来定义,它是以应用为中心、以计算机技术为基础、软/硬件可裁剪,功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。广而言之,可以认为凡是带有微处理器的专用PC系统都可以称为嵌入式系统。(1)嵌入式系统发展概况嵌入式系统从出现至今已经有了30多年的历史。但是随着集成电路电子技术的发展,嵌入式系统直至20世纪60年代末才逐步兴起。如今,随着计算机通信、消费电子的一体化趋势日益显著,嵌入式系统已成为当今一个发展热点。纵观嵌入式系统的发展过程,大致经历以下三个阶段第一阶段是以单芯片的可编程控制器为核心的系统;第二阶段是以嵌入式CPU和简单操作系统为核心的嵌入式系统;第三阶段是以嵌入式操作系统为核心的嵌入式系统。(2)嵌入式系统的特点嵌入式系统通常具有低功耗、体积小、集成度高、成本低等优点,能够把通用的CPU中许多由外部板卡完成的功能集成到CPU内部,从而使得嵌入式系统的设计趋于小型化、专业化。嵌入式系统是将先进的计算机技术、半导体工艺电子技术和通信络技术与各领域的具体应用相结合的产物。嵌入式系统的硬件和软件都必须经过高效率的设计,在保证稳定、安全、可靠的基础上进行裁剪,力争在同样的芯片面积上实现更高的性能。同时为了提高CPU的执行速度和系统可靠性,嵌入式系统中的软件一般都固化在外部存储器或CPU内部存储器中,另外嵌入式系统还具备能应付恶劣的环境和突然断电的能力。42LINUX操作系统简介LINUX操作系统是一个类UNIX操作系统,是当今最为热门的一款开源的操作系统。LINUX操作系统是一个功能强大、设计完善的操作系统。LINUX系统不仅能够运行于PC平台,还能运行于嵌入式系统平台中。由于LINUX操作系统的源代码开放,内核精简、性能强悍,广泛适用于各种硬件设备,系统二次开发成本极低,因此采用LINUX操作系统作为嵌入式系统的核心操作系统将是未来嵌入式系统的发展趋势。嵌入式LINUX操作系统是指对LINUX操作系统经过特定需求裁剪后,能够固化在容量只有几百KB或几MB的存储器中,应用于特定嵌入式场合的专用PC系统。由于目前的主流嵌入式ARM微处理器中大多不具有内存管理单元MMU,因此ARM微处理器技术和LINUX操作系统成功完美的结合,应用于数以千计的商业产品中,充分满足了各类应用对嵌入式平台高性能、低功耗和低价格的要求。43交叉编译环境的建立通常情况下嵌入式系统的软件编译和运行是在两个不同操作系统平台上进行的。编译阶段一般是在PC机进行;运行阶段是在目标嵌入式系统硬件平台。一般情况下是在PC机上通过交叉编译工具把目标源程序文件编译成目标开发平台上的可执行文件,然后通过串口或者TFTP下载到目标系统开发平台上的存储器内,之后由目标系统开发平台来运行这些可执行文件。其中要注意的是,交叉编译工具和普通编译工具功能类似,都是将目标程序文件通过编译工具编译成目标ELF格式文件,然后通过链接和重定位工具把目标ELF格式文件重新定位成可执行文件。但它和普通编译工具之间最大的区别是交叉编译出来的可执行文件通常只能在特定系统平台上运行。因此一般来说不同CPU都对应有不同的交叉编译工具。本视频系统采用基于CROTEX_A8内核CPU的S5PC100硬件平台,可以使用常用的ARM交叉编译器。要成功构建完整的交叉编译环境,需要在PC机上创建一系列的工具,包括目标系统的编译器GCC、二进制工具BINUTILS、标准GLIBC库、LINUX内核头文件、GNUMAKE工具和GDB代码级调试器。成功建立好开发环境后便可以运用这些工具进行嵌入式系统开发了。以下为具体的安装交叉编译工具链步骤(1)将ARMNONELINUXGCC443TARGZ上传到UBUNTULINUX服务器下保存(2)解压ARMNONELINUXGCC443TARGZ例如TARZXVFARMNONELINUXGCC443TARGZCD/OPT/TOOLSCHAIN/443/BIN交叉编译工具链常用的主要命令工具就在这个路径下(3)用PWD命令获取交叉工具链可执行文件存放的绝对路径,例如/HOME/FARSIGHT/UBUNTU_SHARE/OPT/TOOLSCHAIN/443/BIN(4)修改环境变量PATH的值CDVIMBASHRC在最后一行中添加EXPORTPATHPATH/UBUNTU_SHARE/OPT/TOOLSCHAIN/443/BIN保存退出,执行命令SOURCE/BASHRC44嵌入式LINUX移植441UBOOT启动程序UBOOT启动程序是LINUX操作系统上电后运行的第一段代码。就像我们WINDOW操作系统的BASH启动程序,虽然只是在启动时运行很短的时间,但这一部分程序代码却是整个LINUX系统的一个极其重要的组成部分。在一般嵌入式LINUX操作系统中,系统上电复位后通常从地址OX0处开始执行,而这个地址一般正是UBOOT启动代码的存储起始地址。通过这段启动程序,可以初始化外围硬件设备、建立内存空间映射,从而将系统的软硬件环境调整到合适的状态,以便为后续的加载操作系统内核及挂载文件系统做好准备工作。(1)UBOOT启动流程一般分为两个阶段第一阶段的代码是用汇编语言编写的,通常放在STARTS文件中。其中要完1成的任务有设置异常向量表、系统设置为SVC工作模式、关闭MMU和ICACHE、关闭看门狗、关闭所有中断、设置系统时钟、初始化内存、设置好堆栈、从NANDFLASH中拷贝BOOTLOADER代码到内存中、清BSS段、准备跳转到第二阶段的入口。第二阶段的代码是用C语言编写的,通常放在BOARDC文件中。其中要完成2的任务有调用一系列的初始化函数、初始化环境变量、初始化FLASH设备、初始化系统内存分配函数、初始化显示设备、初始化网络设备等、进入命令循环,接受用户从串口输入的命令,然后进行相应的工作。(2)UBOOT启动程序的操作模式产品模式UBOOT从目标系统平台的外部存储器上将启动程序及操作系统加1载到内部存储器RAM中运行,整个过程系统自动完成。通常在嵌入式产品发布时使用开发模式通过串口连接或者TFTP网络传输等方式从PC机上下载UBOOT启2动程序到目标系统平台的RAM中,然后再写入目标系统平台上的FLASH存储器中。工作于此模式下的UBOOT通常都会向终端用户提供一个命令行接口。442LINUX内核移植(1)LINUX内核结构组成要完成LINUX内核的裁剪移植工作,首先必须要对LINUX内核源码的目录结构有较为深入的了解。LINUX内核主要有5个子系统组成进程调度,内存管理,虚拟文件系统,网络接口和进程间通信。通常情况下在LINUX系统中的/USR/SRC/LINUX目录下存放了内核源代码,其具体的代码结构如下/ARCH该子目录包含了与内核体系架构相关的内核代码/DRIVERS该子目录包含了内核中所有的设备驱动程序代码/FS该子目录包含了所有嵌入式根文件系统的代码/INCLUDE该子目录包含了建立内核代码时所需要的大部分库文件代码/INIT该子目录包含了内核初始化的启动代码/IPC该子目录包含了内核及用户进程间通信方式的代码/KERNEL该子目录包含了主内核的最核心的代码/MM该子目录包含了所有内存管理单元相关的代码/NET该子目录包含了内核中所有与网络相关的代码一般在每个子目录下都会包含一个DEPEND文件和一个MAKEFILE文件。这两个文件都是在编译内核源码时要使用到的辅助文件。其中MAKEFILE文件中指出了编译时需要用到哪个编译工具,是移植内核过程中不可或缺的。(2)LINUX内核的编译和配置解压内核1TARXVFLINUX2635TARBZ2CDLINUX2635修改内核顶层目录下的MAKEFILE2VIMMAKEFILE修改ARCHSUBARCHCROSS_COMPILECROSS_COMPILECONFIG_CROSS_COMPILE“为ARCHARMCROSS_COMPILEARMNONELINUXGNUEABI拷贝标准板配置文件3MAKES5PC100_DEFCONFIG配置内核4MAKEMENUCONFIG该命令执行时会弹出一个菜单,我们可以对内核进行详细的配置。这里我们先查看一下,内核都提供了那些功能编译内核5MAKEZIMAGE通过上述操作我们能够在/ARCH/ARM/BOOT目录下生成一个ZIMAGE文件,这就是经过压缩的内核镜像。443嵌入式根文件系统嵌入式根文件系统对用户文件的操作是通过分层结构来实现的。对于应用程序来说,文件是有结构层次的文件,用户程序可以通过对文件I/O操作函数对文件进行读写开关等操作。嵌入式根文件系统是嵌入式操作系统的重要组成部分,它的工作主要是提供文件I/O操作的接口,方便用户操作文件和目录。如果一个嵌入式LINUX操作系统没有根文件系统,它是不能被正常启动的。因此我们需要为LINUX操作系统创建合适的根文件系统,以便进行后续的软件开发工作等。(1)根文件系统的内部结构/BIN该目录存放着所有的标准命令和应用程序文件1/DEV该目录存放着外围设备注册进内核系统的文件接口2/ETC该目录存放着系统级别的设置文件3/HOME该目录是用户主目录,也是进行开发工作常用的目录4/LIB该目录存放着系统的相关库文件5/MNT该目录是用于用户临时挂载文件系统6/PROC该目录是LINUX系统的虚拟系统目录7/ROOT该目录是LINUX操作具有超级用户权限的主目录;8/SHIN该目录存放着系统管理程序文件9/TMP该目录存放着不同的程序文件执行时产生的临时文件10/USR该目录是用户级别的目录,主要存放着用户应用程序文件。11(2)根文件系统制作步骤15源码下载1HTTP/BUSYBOXNET/DOWNLOADS/解压源码2TARXVFBUSYBOXTARBZ2进入源码目录3CDBUSYBOX配置源码4MAKEMENUCONFIGBUSYBOXSETTINGSBUILDOPTIONSBUILDBUSYBOXASASTATICBINARYNOSHAREDLIBSFORCENOMMUBUILDBUILDWITHLARGEFILESUPPORTFORACCESSINGFILES2GBARMNONELINUXGNUEABICROSSCOMPILERPREFIX编译5MAKE安装6MAKEINSTALL进入安装目录下157CD_INSTALL创建其他需要的目录158MKDIRDEVETCMNTPROCVARTMPSYSROOT添加库159将工具链中的库拷贝到_INSTALL目录下CP/HOME/LINUX/ARMNONELINUXGNUEABI/LIBC/LIB/A删除库文件中的符号表ARMNONELINUXGNUEABISTRIPLIB/添加系统启动文件1510在ETC下添加文件INITTAB,文件内容如下THISISRUNFIRSTEXCEPTWHENBOOTINGINSINGLEUSERMODESYSINIT/ETC/INITD/RCS/BIN/SHINVOCATIONSONSELECTEDTTYSSTARTAN“ASKFIRST“SHELLONTHECONSOLEWHATEVERTHATMAYBEASKFIRST/BIN/SHSTUFFTODOWHENRESTARTINGTHEINITPROCESSRESTART/SBIN/INITSTUFFTODOBEFOREREBOOTINGCTRLALTDEL/SBIN/REBOOT在ETC下添加文件FSTAB,文件内容如下DEVICEMOUNTPOINTTYPEOPTIONSDUMPFSCKORDERPROC/PROCPROCDEFAULTS00TMPFS/TMPTMPFSDEFAULTS00SYSFS/SYSSYSFSDEFAULTS00TMPFS/DEVTMPFSDEFAULTS00修改内核配置1511FILESYSTEMSPSEUDOFILESYSTEMSVIRTUALMEMORYFILESYSTEMSUPPORTFORMERSHMFSTMPFSPOSIXACCESSCONTROLLISTS重新编译内核1512在ETC下创建INITD目录,并在INITD下创建RCS文件/BIN/SHTHISISTHEFIRSTSCRIPTCALLEDBYINITPROCESS/BIN/MOUNTA为RCS添加可执行权限CHMODXINITD/RCS在ETC下添加PROFILE文件,文件内容为/BIN/SHEXPORTHOSTNAMEFARSIGHTEXPORTUSERROOTEXPORTHOMEROOTEXPORTPS1“USERHOSTNAMEW“PATH/BIN/SBIN/USR/BIN/USR/SBINLD_LIBRARY_PATH/LIB/USR/LIBLD_LIBRARY_PATHEXPORTPATHLD_LIBRARY_PATH设备文件创建11根文件系统中有一个设备节点是必须的,在DEV下创建CONSOLE节点MKNODDEV/CONSOLEC51(3)NFS挂载根文件系统本视频监控系统采用的是NFS的方式来挂载文件系统,因此要配置好LINUX系统内部的NFS服务,具体的配置步骤如下安装NFSSERVER端口映射和服务1SUDOAPTGETINSTALLNFSKERNELSERVERNFSCOMMONPORTMAPSUDODPKGRECONFIGUREPORTMAP之后通过查看/ETC/DEFAULT/PORTMAP,确保2OPTIONS“I127001“前面的号被添加了重启PORTMAP服务SUDO/ETC/INITD/PORTMAPRESTART编辑/ETC/EXPORTS,添加根文件系统映射目录3SUDO/ETC/INITD/NFSKERNELSERVERRESTARTSUDOEXPORTFSA每修改过/ETC/EXPORTFS后需要执行一次测试NFS4首先建立一个NFS测试的挂载点(目录)SUDOMKDIR/MNT/NFSMOUNTUBUNTUIPNFSDIR/MNT/NFSTNFS比如我的机器如果挂载成功,则表示NFS配置成功MOUNT192168798/OPT/FILESYSTEM/MNT/NFSTNFS5系统设备驱动程序设计51LINUX设备驱动程序概述嵌入式系统平台启动运行LINUX操作系统后,启用了MMU内存管理单元,在这种模式下上层应用不能直接对物理地址空间进行访问的。若要对外围设备进行读写,则需要通过内核调用该硬件的驱动来实现。系统调用是操作系统内核和应用程序之间的接口,而设备驱动程序是操作系统内核和机器硬件之间的接口,因此驱动程序主要用于屏蔽硬件实现上的细节操作,使得上层应用程序可以像操作普通文件一样对硬件设备进行操作。LINUX操作系统以模块加载的形式来加载外设驱动,LINUX操作系统中通常情况下是一个外设对应实现一个驱动。模块是内核的一部分,它们没有被编译进内核,而是根据用户的需求以模块的形式动态加载入正在运行的内核中。正因这种动态机制,使得内核具有较强的灵活性。在LINUX操作系统中有三种类型的设备驱动,它们分别是字符设备驱动、块设备驱动和网络设备驱动。字符设备是以单个字节为单位进行I/O读写操作的设备,对字符设备发出I/O读写请求时就相当于进行实际的硬件I/O操作,一般来说字符设备是无缓存的,因此它不支持随机访问。块设备主要是针对软盘等低速设备设计的,其目的是为了避免外设占用过多的CPU资源。它的工作原理是系统开辟一块内存区作为缓冲区,当上层应用程序对设备发出读写请求时,外设驱动程序会先检查缓冲区中的数据,判断是否满足用户要求,满足则返回该相应数据,不满足则调用相应的请求I/O函数来完成相应的I/O操作。网络设备是系统中能够和其他主机进行数据交换的设备,网络驱动程序主要负责驱动设备发送和接收网络数据包。除了区分不同的设备类型以外,内核还会使用使用了一个主设备号和一个次设备号来唯一标识一个特定的设备,主设备号标识了特定类型的设备,而次设备号则标识特定类型设备下的某个特定设备。52LINUX下设备驱动程序的实现LINUX操作系统下对硬件设备进行驱动开发的一般步骤如下(1)在系统的资源文件代码中定义PLATFORM_DEVICE里面填写对应设备的外设IO起始地址,地址长度,中断,DMA资源等信息资源信息,并把资源信息添加到系统启动初始化流程里面。(2)通过模块加载函数MODULE_INITXXX_INIT和模块卸载函数MOULE_EXIT中定义驱动入口和出口函数(3)写出驱动入口函数XXXX_INIT和退出的实际处理函数XXXX_EXIT,这里以XXXX_INIT为例在里面调用PLATFORM_DRIVER_RESIGTER函数中注册一个PLATFORM_DRIVER结构体,实现其中的PROBE函数和REMOVE函数以及驱动DRIVER成员结构体中NAME和OWNER成员等。(4)在XXX_PROBE函数里面主要做以下事情获取平台设备资源的外设IO地址,中断,DMA资源等信息映射外设控制寄存器的外设IO地址到内核的虚拟地址空间使能外设时钟,注册外设中断的处理函数(如果有中断)扫描和初始化硬件向LINUX内核注册相应设备并通知应用层的UDEV/MDEV守护进程创建相应的设备节点,或者通过子系统注册相应设备并创建设备节点根据字符设备相应的数据结构FILE_OPERATIONS的实现里面的I/O操作函数54CMOS摄像头驱动设计(1)摄像头驱动分析本视频监控系统所用的摄像头是OMNIVISION公司生产的OV9650,它是CMOS接口的图像传感器芯片,可以感知外部的视觉信号并将其转换为数字信号并输出。下图51是CMOS摄像头的工作原理图。图51CMOS摄像头的工作原理图通过上面的摄像头原理图我们知道,需要通过XVCLK1给摄像头提供时钟频率,RESET是复位线,PWDN在摄像头工作时应该始终为低。HREF是行参考信号,PCLK是像素时钟,VSYNC是场同步信号。一旦给摄像头提供了时钟,并且复位摄像头,摄像头就开始工作了,并且通过HREF,PCLK和VSYNC同步传输数字图像信号,然后通过数据线D0D7并行输出图像数据。但从摄像头采集过来的图像数据没法直接交给CPU处理,而是要先经过集成在S5PC100芯片里面的摄像头控制器CAMIF处理完后,一般是对图像数据进行裁剪拉升后直接预览或者编码,之后再由CAMIF控制器转交给CPU处理。其中OV9650采集到的图像格式是YUV格式,YUV是一种压缩后的图像数据格式,它里面还包含很多具体的格式类型,我们的摄像头对应的是YCBCR一定要搞清楚格式,后面的CAMIF控制器驱动里面设置的格式一定要和这个格式一致。另外OV9650里面有很多寄存器需要配置,配置这些寄存器就需要通过芯片里面的SCCB总线去配置。SCCB其实是一种弱化的I2C总线。我们可以直接把摄像头接在S5PC100的I2C控制器上,利用I2C总线去读写配置寄存器。因此,从上面的分析可以知道,摄像头的驱动编写要分为两部分一部分是OV9650外部硬件的驱动,一部分是集成在CPU内部的摄像头控制器的驱动。(2)摄像头驱动程序设计OV9650驱动程序编写步骤1A、通过模块加载函数MODULE_INITOV9650_INIT和卸载函数MOULE_EXITOV9650_INIT中定义驱动入口和出口函数。B、写出驱动入口函数OV9650_INIT和退出的实际处理函数OV9650_EXIT,这里以OV9650_INIT为例在里面调用I2C_ADD_DRIVERINTUNREGISTER_FRAMEBUFFERSTRUCTFB_INFOFB_INFO对于REGISTER_FRAMEBUFFER函数而言,如果注册的帧缓冲设备数超过了FB_MAX(目前定义为32),则函数返回ENXIO,注册成功则返回0。6视频采集与显示61V4L2视频设备接口V4L2VIDEOFORLINUXTWO是LINUX内核中关于视频设备的函数接口,主要用来对视频设备进行打开、关闭、读写数据等操作。由于目前在嵌入式系统中多采用LINUX操作系统作为其软件开发平台,因而研究V4L2视频接口标准对目前的视频监控系统的开发具有重要的意义。611V4L2的API及数据结构(1)常用的结构体在内核目录/INCLUDE/LINUX/VIDEODEV2H中定义16STRUCTV4L2_REQUESTBUFFERS/申请帧缓冲,对应命令VIDIOC_REQBUFSSTRUCTV4L2_CAPABILITY/查询视频设备的功能,对应命令VIDIOC_QUERYCAPSTRUCTV4L2_INPUT/视频输入信息,对应命令VIDIOC_ENUMINPUTSTRUCTV4L2_STANDARD/视频的制式,对应命令VIDIOC_ENUMSTDSTRUCTV4L2_FORMAT/帧的格式,对应命令VIDIOC_G_FMT等STRUCTV4L2_BUFFER/驱动中的一帧图像缓存STRUCTV4L2_CROP/视频信号矩形边框V4L2_STD_ID/视频制式(2)常用的IOCTL接口命令

温馨提示

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

评论

0/150

提交评论