收藏 分销(赏)

基于ARM的视频采集系统的设计与实现.doc

上传人:天**** 文档编号:1633186 上传时间:2024-05-06 格式:DOC 页数:40 大小:97.54KB
下载 相关 举报
基于ARM的视频采集系统的设计与实现.doc_第1页
第1页 / 共40页
基于ARM的视频采集系统的设计与实现.doc_第2页
第2页 / 共40页
基于ARM的视频采集系统的设计与实现.doc_第3页
第3页 / 共40页
基于ARM的视频采集系统的设计与实现.doc_第4页
第4页 / 共40页
基于ARM的视频采集系统的设计与实现.doc_第5页
第5页 / 共40页
点击查看更多>>
资源描述

1、基于ARM的视频采集系统的设计与实现摘 要本文根据家庭视频采集系统的要求,提出一种基于ARM的网络视频采集方案。方案要求视频的实时传输、实时监控。本系统以Inel Xcal 芯片和嵌入式Lin系统为平台,在平台中搭建网络视频服务器,并以它为中介,负责将US摄像头采集到得视频数据传输到网络服务器中,最后发送到申请监控的远程PC机中,远程PC只需在网页中便能实时的看到监控端的视频图像。论文首先阐述了嵌入式网络视频采集技术的发展、现状和前景,然后介绍了嵌入式硬件系统结构和嵌入式inux操作系统的特点,阐述了嵌入式硬件整体结构,使大家大体的完整的对系统硬件有详细的了解,实际记录了嵌入式操作系统内核的编

2、译和移植,介绍了otldr的基本原理和启动过程,实现了视频采集程序的编译和移植,研究了嵌入式一般驱动程序的使用.随后,本文详细描述了视频采集程序的整体结构框图和具体功能代码块、网络通信编程技术、图像编解码、嵌入式视频服。关键词:RM;嵌入式;Lu;视频采集I 1目录摘 要I第1章 引言11。 课题的背景和来源11。2 本文的内容及主要工作第章 嵌入式AM系统硬件结构简介。1 视频监控系统结构简介32.2 ARM处理器简介32。 XScae体系结构42。主要硬件电路说明第3章 嵌入式AM系统软件结构9。 Linux操作系统简介932交叉编译环境的建立.3 嵌入式nu操作系统移植11。3。 Boo

3、rder移植113。3. inx 内核移植123。3。嵌入式文件系统33.4nux下的程序调试14第4章USB设备驱动程序设计14. 设备驱动程序简介14.2 Lnx下驱动程序的实现84。3 US摄像头驱动程序设计20第5章 视频采集功能的设计235。1基于V的编程2。11 摄像头相关数据结构2451。2 摄像头基本功能实现25。.视频数据采集9。2 图像编解码32.2. 编解码介绍32.2.2系统压缩技术33第1章 引言1.1 课题的背景和来源二十一世纪的网络化、数字化让人们的生活每天都发生着翻天覆地的变化,获取信息的方便和快捷可以使人们在信息化的今天领先一步创造出巨大的利益,而获取信息的重

4、要途径就是眼睛。据统计,人类采集信息的80来自视觉。图像和视频是对客观事物生动、形象的描述,是一种最直观的表现方式。而视频监控技术因为它方便快捷、生动形象、信息丰富等特点日益受到人们的青睐,并在各行各业得到广泛的应用。与此同时,现代网络和数字技术的快速发展也为视频监控技术的发展奠定了坚实的基础。二十一世纪,嵌入式技术、多媒体处理技术进一步发展,为视频监控系统的发展提供了新的出路嵌入式视频监控系统.嵌入式系统是以应用为中心,软硬件可以剪裁,具有高稳定、低成本、功耗低、速度快、实时好的专用计算机系统,它由嵌入式微处理器,配以周边硬件设备,接口电路组成。嵌入式系统内部使用嵌入式操作系统,安装专用的功

5、能软件。嵌入式技术把硬件和软件集于一体,独立工作.嵌入式视频监控系统比其他视频采集系统在布局区域范围上要广泛;由于使用IP技术,嵌入式视频监控技术比其他视频采集系统更具紧密的结合度,能够充分利用现代网络技术的成果,并能构成复杂的视频监控网络;性能上,嵌入式视频采集系统继承了嵌入式技术的优点,非常适合自动化的环境。因此,嵌入式视频采集技术正在我国快速的发展,积极的研究会加强我们在这方面技术的学习,也会为视频监控技术的发展贡献力量.1.2 本文的内容及主要工作根据毕业设计的初衷,我们需要设计基于RM的网络视频采集系统。在监控系统中,视频采集、传输、播放的功能不是由专门视频处理芯片完成,而是由软件实

6、现。论文首先介绍了嵌入式ARM系统的硬件结构和软件结构,方便大家熟悉AR和Lnu系统,包括嵌入式设备的硬件结构,逻辑框图和inu的基本操作、安装方法;第二,研究了嵌入式的一些驱动程序,主要是摄像头驱动程序V4L,系统中选用的摄像头芯片中星微1;第三,研究了视频监控的具体流程和实现方式,让大家在总体上对整个系统有一个大概的认知.本次设计的目的只有一个,就是实现视频的实时监控。围绕它,不管是硬件结构还是软件流程,都需要学习和研究,不断调试,决不放弃。总之,论文的内容都是围绕如何建立一个视频采集系统。无论是从哪个方面,我们都是为这个目标而努力。37 第2章 嵌入式ARM系统硬件结构简介2.1 视频监

7、控系统结构简介网络视频监控系统是基于嵌入式技术设计的。嵌入式并没有统一的定义,但目前有一个广泛而又被认可的规范:将软件产品固化到硬件平台上,完成应有的功能既是嵌入式。基于嵌入式技术的视频监控系统服务器端采用摄像头不断的采集图像,压缩成视频流,然后通过网络发送到申请监控的客户端.监控系统的使用者可以在远程实现网页上的实时监控和一些简单的功能操作。系统整体结构如图。所示。图2.1系统整体结构图该系统中PU采用基于RM的X27微处理器,通过在其上运行inux操作系统,执行Bo视频服务器,接受并处理来自摄像头的图像信号,通过以太网控制器发送至远端,实现视频数据的远程传输和接受,达到视频监控的目的。2.

8、2 AR处理器简介AR,既是一个公司的名字,也是对一类微处理器的通称。AR嵌入式微处理器是全球领先的163位I处理器芯片知识产权设计供应商RM(vceISKMchine)公司的产品。ARM公司本身不直接从事芯片生产,而是依靠转让设计许可,由合作公司生产各具特色的芯片。R处理器以其完整的体系结构,极小的体积、极低的功耗、极低的成本、极高的性能,及时根据嵌入对象的不同进行功能上的扩展的优势,在众多种类的嵌入式微处理器中脱颖而出基于ARM技术的微处理器应用占据了2位S微处理器5%以上的市场份额,AR技术正在逐步渗入到我们生活的各个方面。采用RISC架构的M微处理器一般具有如下特点:(1) 采用固定长

9、度的指令格式,指令规整、简单、基本寻址方式有23种;(2) 使用单周期指令,便于流水线操作执行;(3) 大量使用寄存器,数据处理指令只对寄存器进行操作,以提高指令的执行效率;(4)所有的指令都可根据前面的执行结果决定是否被执行,从而提高指令的执行效率;(5)可用加载/存储指令批量传输数据,以提高数据的传输效率;(6)可在一条数据处理指令中同时完成逻辑处理和移位处理;(7)在循环处理中使用地址的自动增减来提高运行效率。目前,AR处理器有AM7、M、ARM9E、 ARM0、AE、ere、StrogARM和Scale等系列。每个系列除了具有ARM体系结构的共同特点以外,都有各自的特点和应用领域。2.

10、3 XSal体系结构Xscal核是采用RV5T架构的处理器,是Intel公司的StrongAM的升级换代产品,它具有高性能、低功耗等特点,并在流水线设计、P处理和指令设计中有很大改进3。ARM的体系结构是基于RISK的,Xae是RM处理器的一种,所以Sal具有ISK的基本特性.而且针对嵌入式系统,cle构架还引入了Petiu处理器工艺和系统结构技术,实现了entium微处理器体系结构的一系列高性能技术,达到了高性能、低功耗和小体积等嵌入式系统要求的特性。它的特点有:超流水线、高主频、存储体系、分支预测和指令集体系结构.本设计采用的就是基于英特尔Xsle构架的一种2位嵌入式处理器,它除了应用于掌

11、上电脑之中外,还可以应用于智能手机、网络存储设备、骨干网路由器等电子设备。PXA2x系列处理器是英特尔当前最新推出的嵌入式处理器。它的时钟频率从12到24MH不等,并内建6MB的堆栈型ntl Straalash内存。内置了英特尔的无线MMX技术,能够显著提升多媒体性能。OURPXA270EP是一款基于INTEL SCAEX2处理器,针对高效嵌入式系统教学和实验科研的平台。这款设备主要包括核心板与底版两个部分,核心板主要集成了高速的PXA20CPU,配套的存储器,网卡等设备;底版主要是各种类型的接口与扩展口核心板(8层C电路)系统包括:C:INEL X70(52M),支持D调试;DRAM:64M

12、 工作在104外频上;FLSH: 32M NTL No FLASH;Nt: 000MEthrnt ontrol (LAN91C111);SURO: WINBOND 837;CPD: XLIX 95144(17UEIO);总线驱动器: 若干;核心板正面如图。2所示,核心板背面如图2.3所示.图. 核心板正面图图。核心板背面图底版(4层C电路)如图2。所示。包括:Ehrnt:10100接口1个RT: 6个(包括RS232,S45,IR,全功能串口)SB1。1:2个(个host 一个ei):个(KEYBOARD&US)标准并口:1个PCMCA:1个IE:1个/MMC: 个SMC:个AMEA:1个9N

13、功能扩展口:2个X5小键盘CPU_JTAG CPD_JTAGAR LQ08DG01 8寸真彩C60480VA40480L 8X点阵一组段D数码管 4个 图。4底版图2.4 主要硬件电路说明嵌入式设备除了以M芯片为主要控制单元,也有很多周边电路和外围设备,它们有的帮助ARM处理信号、有的负责存储数据、有的进行网络连接、有的用来数据通信,这些周边设备缺一不可,不能替代。首先介绍P核心总线4,总线是CPU和其他设备的桥梁。是通过总线信号来控制SDRM ,LH,网卡,UPEIO等外部设备的,无论是低速还是高速,只要是与总线相关的芯片,都要和CU总线信号有关其次,研究嵌入式系统内存DRA。SDR是嵌入式

14、系统的内存,具有单位空间存储容量大和价格便宜的优点,已广泛应用在各种嵌入式系统中。当系统启动时,C首先从复位地址00处读取启动代码,在完成系统的初始化后,程序代码一般应调入SDM中运行,以提高系统的运行速度。同时,系统及用户堆栈、运行数据也都放在SM中。SDRM的存储单元可以理解为一个电容,总是倾向于放电,为避免数据丢失,必须定时刷新(充电)因此,要在系统中使用SDRA,就要求微处理器具有刷新控制逻辑,或在系统中另外加入刷新控制逻辑电路PA20芯片在片内具有独立的SDR刷新控制逻辑,可方便地与RM接口。除了SDRM,FLSH也是一种存储媒介。FLASH一般具有NO型和ND型。NAN型FLAH单

15、元密度高,写入和擦除速度非常快,而且一般NND型LA的存储容量很大。NR型FASH的优点是芯片内执行命令,这样应用程序可以直接在FLASH内运行,不用进入内存,使得它的传输效率很高嵌入式设备最大的优点就是网络功能强大,它能像PC一样方便地连接到互联网上,这些功能都是网络控制器的作用。也就是thnt onrler,本系统采用MC公司的单芯片的网络控制器,AN91C11。它可以工作在两种速度下,M以太网或者0M以太网。A91C11的工作流程是,驱动程序将要发送的数据包按指定格式写入芯片并启动发送命令,A91C1会自动把数据包转换成物理帧格式在物理信道上传输;反之芯片收到物理信号后自动将其还原成数据

16、,并按指定格式存放在芯片A中以便主机程序取用。就是A91C111完成数据包和电信号之间的相互转换。最后,说明一下串口电路,在嵌入式视频监控系统中,串口起到了很重要地作用,嵌入式系统启动的信息都可以通过串口传到PC上,极大地方便了系统的移植和软件的调试。大多数情况下,嵌入式CPU的串口会作为PU的一个终端,为用户与CP交互提供基本的输出输入信息。当CP运行BOO代码时,通常只有这个终端 ;运行INUX内核时,如果有LCD显示,串口与LD终端会同时有效。串口0终端的交互方式是命令行的模式,在BOOT阶段,支持简单的BOO命令。 第3章 嵌入式AM系统软件结构3.1 Linu操作系统简介Liux是一

17、个类似Unix的操作系统,它起源于芬兰一个名为LisTrvadS的业余爱好者,现已成为最流行的一款开放源代码的操作系统。nux从问世至今,短短时间内已发展成为一个功能强大、设计完善的操作系统。Lin系统不仅能够运行于C平台,还在嵌入式系统方面大放光芒.由于nux的源码开放,内核精简且性能强悍,不依赖于具体厂商,能广泛适用于各种硬件设备,系统二次开发成本极低,因此在IT业界已经达成共识,即采用嵌入式Lix作为嵌入式操作系统是大势所趋。嵌入式nux是目前嵌入式系统领域中发展势头非常迅猛的系统。嵌入式Lx是指对iux经过小型化裁剪后,能够固化在容量只有几百K字节或几M字节的存储器芯片或单片机中,应用

18、于特定嵌入式场合的专用操作系统目前正在开发的嵌入式系统中,4%的项目选择嵌入式iu作为操作系统。嵌入式Lin现已成为嵌入式操作系统的理想选择6。目前基于嵌入式Linx的应用已经遍布很多领域,比如移动多媒体设备、手持设备、车载导航系统、机械控制等。嵌入式Linux分为两种类型:在没有使用MMU的平台上(无内存虚实地址转换和映射)的一般为uCLiux;而在有MMU平台上,则使用原本地嵌入式Linu版本。由于在目前的主流嵌入式M中大多不具有MMU,因此只用M左右的内核就能实现网络功能和任务调度的Liux系统就可以适用于从高端服务器到嵌入式应用的各级平台.AM技术和iux成功地结合,应用于数以千计的商

19、业产品中.从便携式消费品、网络和无线设备,到自动化设备、医疗设备和存储产品,这一应用列表与日俱增。ARM和Linux的结合充分满足了各类应用对嵌入式平台高性能、低功耗和低价格的要求,通过开发环境、开源社区和AM的商业伙伴的优势为嵌入式开发提供了更灵活的选择。本次设计的开发环境为eha9.0系统,在Widow下安装虚拟机,在虚拟机中安装Linx系统,这样可以屏蔽底层差别,避免硬件驱动带来的麻烦,而且还能方便的使用串口、并口、接口,快速的进入实验环境。图.为虚拟机下Lnux系统启动后的情况。 图3。1 虚拟机下Lux操作系统3.2 交叉编译环境的建立通常嵌入式系统的软件编译和执行是在两个不同平台上

20、进行的。编译是在宿主机,一般为装有inx的c;执行是在目标机,即嵌入式系统的硬件平台.一般是在宿主机上通过跨平台交叉编译器把源文件编译成目标平台上可执行的文件,再通过串口、并口或者网络下载至目标平台上的FLASH或者其它存储介质,然后由目标机来运行这些软件。这里所说的跨平台编译器和一般的编译器功能类似,都是把源代码通过编译器编译成目标文件,然后通过链接器、可重定位器程序和定位器把目标文件重新定位成可执行文件和通用的编译器之间最大的差别就在于跨平台编译器编译出来的可执行程序通常只能在特定CU所属平台上运行。所以一般来说每种CPU都对应有不同的跨平台编译器。本系统采用基于XSce的A0,可以使用常

21、用的M-IUXGC交叉编译器要成功构建完整的交叉编译环境需要在宿主机上创建一系列的工具包括CC+编译器、汇编器、链接器、嵌入式系统的标准C库和代码级调试器成功建立好开发环境后便可以运用这些工具进行嵌入式系统开发7。3.3 嵌入式Linux操作系统移植3.3.1 ootLorer移植Botoader是系统加电后运行的第一段代码.一般只是在启动时运行很短的时间,然而对一个嵌入式系统来说,这一部分却是整个系统的一个无比重要的组成部分,不可缺少。在一般嵌入式系统中,系统复位或者加电后通常从地址000处开始执行,而这个地址一般正是存放的oLoder启动代码。通过这段程序,可以初始化硬件设备、建立内存空间

22、的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终加载操作系统内核准备好正确的环境。BLer一般情况下需要包含以下几个必备的功能:()初始化处理器。这个动作都是用汇编语言完成的,称为重置码(retcde)或者称为ooode,而且对于每个CU都不一样的,当电源接通后就会执行这个动作,通常只有两三个汇编指令,目的是将CP的控制权转给硬件初始化的程序.(2)初始化一些必要的硬件。这个动作也大都由汇编语言来完成,主要是初始化PU、DRAM等,其他的硬件,例如串口,可以由c语言等比较高级的程序语言来完成后续动作.(3)设置处理器的寄存器以及内存,关掉所有的输入管脚(包括中断管脚),以防止突然

23、有信号进入妨碍接下来的硬件初始化动作。然后初始化串口,以便后续运行的程序能够同HOST端进行通信,便于调试。(4)从特定的位置把操作系统和文件系统调入内存,并设置一些操作系统所必需的参数,然后把P控制权交给操作系统.有的Bootoar会先从串口或者网络等其他途径得到内核的映像文件,然后把这些文件写入目标系统的FLSH或者其它存储介质,最后再把内核载入RM执行,交出控制权。一般BooLadr都包含两种不同的操作模式:“启动加载”模式和“下载”模式,这种区别仅对于开发人员才有意义。从最终用户的角度看,BoLodr的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载模式的区别()启动加载(

24、otlodi)模式:这种模式也称为“自主”(Autou)模式,即Booar从目标机上的某个固态存储设备上将操作系统加载到R中运行,整个过程并没有用户的介入。这种模式是otode的正常工作模式,因此在嵌入式产品发布的时候,BootLoadr显然必须工作在这种模式下。(2)下载(Donloing)模式:在这种模式下,目标机上的ootode将通过串口连接或者网络连接等通信手段从主机(HST)下载文件,比如下载内核映像和根文件系统映像等。从主机下载的文件通常首先被BooLade保存到目标机的AM中,然后再被BooLder写到目标机上的AS类固态存储设备中。oooader的这种模式通常在第一次安装内核与

25、根文件系统时被使用,此外,以后的系统更新也会使用ootLoae的这种工作模式。工作于这种模式下的ooadr通常都会向它的终端用户提供一个简单的命令行接口。BooLoade的实现依赖于CPU的体系结构,一般来说启动过程分为两个阶段。第一阶段依赖于P体系结构的代码,比如设备初始化代码等,通常都放在第一阶段中,而且通常都用汇编语言来实现,运行效率比较高。这个阶段完成的任务一般如下:(l) 硬件设备初始化(屏蔽所有的中断、关闭处理器内部的指令数据cache);(2) 为第二阶段准备R.M空间;() 复制otLaer的第二阶段代码到M空间中;(4) 设置好堆栈并跳转到第二阶段的程序入口点。第二阶段则通常

26、用C语言来实现,这样可以实现复杂的功能,而且代码会具有更好的可读性和可移植性。这个阶段主要任务有:( l)初始化本阶段要使用的硬件设备;(2)检测系统内存映射;(3)将内核映像和根文件系统从ASH读到RAM中;(4)为内核设置启动参数;(5)调用内核文件运行。本设计中的Boolod采用lob,lob是BotLode Oje的缩写,是一款功能强大的BootoderBl最初是由Jan-Dk Bkker和ErikMuw两人为一块名为AR(Liux AdvancedRadio erminl)的开发板写的,该板使用的处理器是trongRMSA-11,现在Blob已经被成功移植到许多基于ARM的CPU上了

27、.本设计中的InelXcal就是采用Blob作为Boodr8。3.3.2 Linx 内核移植选用嵌入式Linu作为目标机操作系统,一方面由于Liu是一款免费的操作系统,能很好的降低成本,同时Lnux的开发应用现在已经成为热门,有大量的资源可用于学习与重复应用,并且Linux系统具有良好的可移植性和可裁剪性,能自动支持多任务管理。一般常用的GUI如QT/E,inGI等都支持Linux。Lnx的开发工具也都可以很方便的免费获得。系统采用的嵌入式Linu内核为随实验平台光盘中的Liu内核,它是针对这套实验平台所配置的L内核,内核版本为Liux2。9。在实验过程中,只需要在这个内核的基础上进行添加和删

28、减所需要和不需要的功能,编译后就可以使用了.在编译内核之前,需要对内核进行必要的配置,通过虚拟机进入/p20_ix/iux目录后在终端执行ak menunfig10命令,就可以可视化的配置内核需要的功能和要求,本次试验,主要是针对视频方面,选择了对4的静态加载、对pc5xx摄像头驱动的动态加载,这样就结束了对内核的配置.编译内核需要创建内核依赖关系、创建内核镜像文件和创建内核模块。首先执行makede命令,读取配置过程生成的配置文件,来创建对应于配置的依赖关系树,从而决定哪些需要编译而哪些不需要;接着需要maeclen删除前面步骤留下的文件,以避免出现一些错误;然后便可以生成所需要的内核文件了

29、,用mak lmg来实现得到可移植的内核。内核文件通过并口下载线烧写入开发板中,便可以通过oooae加载运行。3.3.3 嵌入式文件系统嵌入式Lnx操作系统一般采用AS作为存储介质.FLASH具有独特的物理特性,所以必须使用专门的嵌入式文件系统.嵌入式系统对文件的操作是通过层次结构实现的。对于用户程序来说,文件是有结构的文件,用户程序通过对文件IO函数操作文件。嵌入式文件系统是嵌入式操作系统的一部分,它的任务是对逻辑文件进行管理,其工作包括提供对逻辑文件的操作(复制、删除、修改等)接口,方便用户操作文件和目录。在文件系统内部,根据存储设备的特点,使用不同的文件组织模式来实现文件的逻辑结构。此外

30、,文件系统要对管理文件的安全性负责。文件系统不能直接控制物理设备,它是通过SH驱动实现控制的11。目前FAS支持的文件系统技术主要有JFF,FS2,TFS,FTL/NTF,RAMS,AMFS和ROFS等等。本系统采用的是JFFS2文件系统。JFS文件系统是专门为NAD闪存设计的嵌入式文件系统,根据NAN闪存以页面为单位存取的特点,将文件组织成固定大小的数据段.利用AD闪存提供的每个页面16的备用空间来存放C(ErorrrectioCod)和文件系统的组织信息、,不仅能够实现错误检测和坏块处理,也能够提高文件系统的加载速度.FS2采用一种多策略混合的垃圾回收算法,结合了贪心策略的高效性和随机选择

31、的平均性,达到了兼顾损耗平均和系统开销的目的它是日志结构的文件系统,提供了损耗平衡和掉电保护,可以有效地避免意外掉电对文件系统一致性和完整性的影响。JF2文件系统是按层次结构设计的,分为文件系统管理层接口、JFFS2内部实现层和NAND接口层,这样就简化了其与系统的接口设计,可以方便地集成到系统中去。与AFS相比,它增加了一些功能,因此功能更强3.4 ux下的程序调试调试是程序开发过程中必不可少的一个重要环节,通用PC机的程序调试与嵌入式操作系统的调试环境上有着明显的区别,前者调试器和被调试的程序往往是运行在同一台机器上,是相同操作系统下的两个不同的进程,调试器通过操作系统专用调用接口控制被调

32、试进程,后者通常为远程调试,调试器一般运行于桌面操作系统上,而被调试的程序则运行在嵌入式系统之上,因此需要协调这两个程序之间的通信.nu下的调试工具非常的少,b是Linux下最著名的调试工具,它是N自带的调试工具,它可以使开发人员了解程序运行的详细细节,从而消除程序的错误,达到调试的目的,gd还具有远程调试功能,可以满足嵌入式系统调试的要求,在调试过程中P机也称为宿主机和嵌入式系统通过串口协议或者TCIP协议连接起来,远程主机上运行被g规范断点改造过的内核,当条件成立时,断点被激活,然后等待本地宿主机的连接命令,一旦连接成功,宿主机就可以向远程嵌入式系统发送调试命令了。在调试过程中gdb通过调

33、试stb来完成通信功能,调试stu是嵌入式操作系统中的一小段代码,它提供了运行gb的宿主机和嵌入式系统进程之间交互的一个媒介。除了使用调试器外还可以直接在程序中使用rintf()或pnt打印函数,这种方法功能比较弱,效率低下,但在内核模块调试时这是唯一的方法。第4章 USB设备驱动程序设计4.1 设备驱动程序简介Linux系统中,设备驱动程序扮演着特殊的角色.它就像一个独立的黑盒子一样,使某个特定的硬件可以相应一个定义良好的内部编程接口并且完成隐藏设备的作用。用户只需调用一组标准化的函数完成操作,而且这些操作与特定的驱动程序无关。驱动程序的任务就是将这些函数映射到作用硬件的具体操作上。这样的模

34、块化的驱动程序结构使得inux系统中的驱动程序可以独立于内核的其他部分,可以在需要使用的时候将驱动“插入内核从系统运行顺序来看,硬件平台启动运行Lx后,启用了MU单元即内存管理单元,在这种模式下系统不能直接对物理地址进行访问。若要对某一硬件外设进行读写,需要通过内核调用该硬件的驱动来实现。上面已经说过,驱动程序的作用在于向应用程序提供访问硬件设备的接口,驱动程序屏蔽了硬件实现上的细节操作,于是应用程序可以像操作普通文件一样对硬件设备进行操作。Lnu以模块的形式加载设备类型,通常是一个模块对应实现一个设备驱动。模块是内核的一部分,它们没有被编译到内核中,而是分别被编译并链接成一组目标文件。可以根

35、据用户的需要在不需要对内核进行重新编译的情况下动态载入正在运行的内核,或从正在运行的内核中卸载利用这种机制,内核尺寸可以保持在最小,并具有最大的灵活性,也便于检验新的内核代码,而不需要重新编译内核并重新引导。设备驱动程序一般需要完成以下功能:( l)对设备初始化和释放;(2)把数据从内核传送到硬件和从硬件读取数据;(3)读取应用程序传送给设备文件的数据和回送应用程序的请求数据;(4)检测和处理设备出现的错误。在Linux操作系统下有两类主要设备文件类型:块设备、字符设备.用户进程正是通过设备文件来与硬件打交道每个设备文件都有其文件属性,表示是字符设备还是块设备.另外每个文件都有2个设备号,第一

36、个是主设备号,标识驱动程序;第二个是从设备号,标识使用同一个设备驱动程序的不同硬件设备。设备文件的主设备号必须与设备驱动程序在登记时申请的设备号一致,否则用户进程将无法访问驱动程序。Linu驱动程序可以分为三个主要部分:( l)自动配置和初始化子程序,负责检测所要驱动的硬件设备是否存在和能否正常工作。如果该设备正常,则对这个设备及其他必需的条件位口中断、DA通道)进行申一请并初始化。这部分驱动程序仅在初始化时被调用一次。(2)服务于/请求的子程序,又称为驱动程序的上半部分.调用这部分程序是由于系统调用的结果。这部分程序在执行时,系统仍认为是与进行调用的进程属于同一个进程,只是由用户态变成了核心

37、态,但仍具有进行此系统调用的用户程序的运行环境,因而可以在其中调用与进程运行环境相关的函数。(3)中断服务子程序,又称为驱动程序的下半部分.在Liux操作系统中,并不是直接从中断向量表中调用设备驱动程序的中断服务子程序,而是由Lx系统来接收硬件中断,再由系统调用中断服务子程序。中断可以在任何一个进程运行时产生,因而在中断服务子程序被调用时,不能依赖于任何进程的状态,也就不能调用任何与进程运行环境有关的函数。因为设备驱动程序一般支持同一类型的若干设备,所以一般在系统调用中断服务子程序时,都带有一个或多个参数,以唯一标识请求服务的设备。在系统内部,I/O设备的存取通过设备驱动程序提供的一组固定的入

38、口点来进行,这组入口点在驱动程序初始化时向系统进行登记,以便在系统适当的时候调用。一般来说,字符型设备驱动程序能够提供如下几个入口点:(1)en入口点:打开设备准备IO操作,对字符特别设备进行打开操作,都会调用设备的oen入口点。opn子程序必须对将要进行的I操作做好必要的准备工作,如清除缓冲区等.如果设备是独占的,即同一时刻只能有一个程序访问此设备,则op子程序必须设置一些标志以表示设备的状态。()close入口点:关闭一个设备,当最后一次使用设备结束后,调用doe子程序。独占设备必须标记设备可再次使用。(3)a入口点:读取设备,对于有缓冲区的操作,一般从缓冲区里读取设备数据。()write

39、入口点:向设备写数据,对于有缓冲区的I/O操作,一般向缓冲区里写入数据.(5)ioct入口点:执行读写之外的操作.USB(nesal erial )即“通用串行外部总线,用途广泛,可以外接硬盘、键盘、鼠标、打印机等多种设备,U能够使用尽可能少的接口支持尽可能多的外设,尤为适合在嵌入式设备中使用,是嵌入式接口标准的一个很好的选择。USB总线规范有1。1版和。版。USB1.1支持两种传输速率:低速1。5Mbit/、全速12Mit/s,这样的速率完全满足鼠标、键盘、DROM等设备,但是在嵌入式视频监控系统中,这样的速度还是很慢。所以,SB。提供了一种更好的传输速率:高速,它可以达到80Mbit/s。

40、UB。0向下兼容US。1,可以将遵循USB1。1规范的设备连接到USB。控制器上,也可以把USB2.0的设备链接到US1.1控制器上.USB总线的硬件拓扑结构1如图41所示。图4。1SB总线硬件拓扑图USB主机控制器通过根集线器与其他US设备相连。集线器也属于US设备,通过它可以在一个S接口上扩展出多个接口.除根集线器外,最多可以层叠5个集线器,每条US电缆的最大长度是5m,所以S总线的最大距离为30。一条UB总线上可以外接17个设备,包括根集线器和其他集线器。整个结构图是一个星状结构,一条SB总线上所有设备共享一条通往主机的数据通道,同一时刻只能有一个设备与主机通信。通过U主机控制器来管理外

41、接的USB设备,UB主机控制器共分3种:C、HI和EHI。在配置Liu内核的时候,看到的“D”字样表示“ost Ctolr Drver”,即主机控制器驱动程序。US驱动程序分为两类:USB主机控制器驱动程序(Hstntrollr rer)、USB设备驱动程序(USB dve divrs)。它们在内核中的层次如图4。所示。图42 US驱动程序层次结构在试验中,教学平台上的inux嵌入式内核已经配置了US主机控制器驱动程序,只需要添加需要的UB设备驱动程序,就能实现UB设备的正常使用。4.2 Liux下驱动程序的实现Lnux操作系统下对硬件设备进行驱动开发的一般步骤如下:()注册设备在系统启动时或

42、者在模块加载的时候需要将设备和重要的数据结构登记到内核的设备数组中,并确定该设备的主次设备号。在Liu系统中,对于字符设备一般通过调用rgstr_chrde向系统注册设备驱动程序,egiter_che在fdies。文件中的定义如下:ingistr_hrev(nsignd int ma,cont char*name,truc file_peatio ops)定义中的mjor是设备驱动程序向系统申请的主设备号,如果majo为O,则系统为该驱动程序动态的分配一个主设备号,不过此设备号是临时的;nae是设备名:ops是各个调用入口点的说明.函数返回表示注册成功,返回-NAL表示申请的主设备号非法,返回

43、-BS表示申请的主设备号正在被其它设备驱动程序使用。以后对设备驱动程序的fe_peatns的操作都可以通过该主设备号的索引来完成。regier_cev函数操作成功后,设备名便出现在/procdevces文件目录中,使用命令catproc/devices可以查看设备的工作状态.()定义操作集驱动程序中要通过一系列函数完成对设备的不同操作,这些操作在面向对象编程术语中也称为方法,该操作集通过数据结构file_operations实现.内核内部通过il结构识别设备,通过fileoeratio数据结构提供的文件系统的入口点函数访问设备。file_peris定义在中的函数指针表: ruct fileop

44、eration srct mue*oer;lo_t (*llk) (ru fle*, o_,int); size_ (*ead) (strut i,se, off_t*);ssizet(*ite) (srtfl,const ch, size_, lof_*); int (*rad) (suc file*, d,fildir_t); unsii (pol) (strutl, sct pl_al_sruct); it (itl)(strct inde*, tuctfile*,unsign t,unsignedong); t (mma) (sruc fi*, strt v_ea_ruct); t(*open)(rctno, truct fil*); int (flush)(srucfl*); n

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
百度文库年卡

猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服