




已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2013届毕业设计说明书 视频采集系统的研究 院 、 部: 电气与信息工程学院 学生姓名: 指导教师: 职称 专 业: 班 级: 完成时间: 摘 要随着计算机技术的高速发展以及ARM和嵌入式系统的出现,嵌入式系统的应用领域不断扩展,物联网技术已经成熟,所以视频采集成为物联网中不可缺少的一部分,在linux系统下研究视频采集系统是很有必要的。本设计中采用友善之臂的mini2440开发板和USB摄像头zc301作为硬件支持。首先,boot-loader也使用自带的suppervivi,相当于计算机中的BIOS,将其下载到开发板作为引导程序此程序可以使用汇编也可以使用c语言编写。其次,在linux内核中自己增加zc301摄像头驱动,并且修改配置文件使得此linux系统能够支持mini2440开发板,重新定制和裁剪之后的linux内核,经过编译后就是可以直接下载到开发板的linux内核并下载到开发板中。最后,自己还需要制作一个新的linux文件系统。在这个系统中执行已通过交叉编译好的二进制文件就可以启动摄像头并等待客户端的连接。其中视频采集采用servfox进行采集和网络通信。将开发板联网,并且启动,视频采集系统开始工作,将采集到的信息不断传送至网络中,当在浏览器中输入开发板的IP地址就可以查看摄像头采集到的信息。关键词 :视频采集;linux系统;嵌入式ABSTRACTWith the rapid development of computer technology and the emergence of ARM and embedded system, embedded system application fields continuously extension, the Internet of things technology has been mature, so video acquisition become indispensable part of it, the video acquisition system under the Linux system is very necessary. We used in the design of this kind of arm mini2440 development board and USB camera zc301 as hardware support. First of all, the boot loader used own suppervivi, equivalent to the BIOS of the computer, to download it to the development board as the bootstrap the application can use assembly can also use the c language. Second, in the Linux kernel itself increase zc301 camera driving, and modify the configuration file makes this Linux system can support mini2440 development board, again after the customization and tailoring of the Linux kernel, after compiling is the Linux kernel can be downloaded directly to the development board and download to the development board. Finally, oneself also need to make a new Linux file system. Performed on this system has passed the cross compiled binaries can start the camera and wait for the client connection. I use servfox video acquisition and network communication. Develop board connected to the Internet, and start the video acquisition system began to work, will be collected information is continuously sent to the network, when input the IP address of the development board in the browser can view camera to collect the information.Key words:video acquisition;the Linux system;the embedded目 录1 绪论51.1 课题背景51.2 设计的意义51.3 课题设计思路62 系统总体方案设计72.1 视频采集系统的总体设计72.2 视频采集系统的硬件介绍7 2.2.1 硬件平台的选择8 2.2.2 ARM9简介92.3 视频采集系统的软件设计10 2.3.1 嵌入式操作系统的选择11 2.3.2 视频采集系统的软件设计122.4 本章小结133 Linux平台的搭建143.1 交叉编译环境的搭建143.2 引导程序suppervivi介绍153.3 嵌入式linux内核的裁剪以及移植16 3.3.1 linux内核获取16 3.3.2 linux内核的移植163.4 根文件系统的制作19 3.4.1 文件系统简介19 3.4.2 busybox的移植19 3.4.3 建立根文件系统203.5 本章小结214 应用程序servfox的分析224.1 从命令行传递参数给变量224.2 初始化视频采集设备234.3 采集图像数据线程234.4 建立TCP套接字服务端,为图像数据发送线程做好准备244.5 发送图像数据到客户端的线程244.6 本章小结25结束语26致 谢27参考文献28附 录A 创建根文件目录脚本文件29附 录B servfox主函数程序清单301 绪论1.1 课题背景现在市场的视频采集设备大都只支持本地控制,通过互联网查看和控制远程摄像头的技术也逐渐成熟,像长沙各大交通枢纽的红绿灯摄像头我们都可以通过手机客户端来查看道路交通状况。所以摄像头的远程查看和控制势在必行。由于需要通过网络连接,所以现在炒得火热的嵌入式系统是不二之选。嵌入式系统不断发展,其所涉及的领域也不断扩展,包括工业控制、消费电子、网络通信、国防军事、医疗卫生、航天航空等各个领域。我们所熟悉的电子产品几乎都可以找到嵌入式的影子。随着RISC指令系统的推广,嵌入式芯片现在已经到了32位,嵌入式领域发展展现了一片新的天地,现在流行的大部分智能手机都是基于ARM芯片的,可见其发展速度之迅猛,使用之广泛,影响之巨大。最近的新闻说马上又要出现基于ARM的电脑,所以嵌入式的发展空间是巨大的。而基于ARM的视频采集系统可以用于安防等远程控制摄像头的场合,在安防方面,随着物联网的发展,家庭监控已经变得不可或缺,视频采集便是最重要的一部分。在公共场合,尤其是流动人口大,人口组成复杂的地方需要通过远程网络控制的视频采集系统。1.2 设计的意义物联网的提出已经有很长时间了,物联网发展的速度也相当迅猛,而视频采集系统是物联网中不可或缺的一部分,视频采集的含义就是采集视频信号进行视频处理、视频压缩和传输的必要条件和基础。现在,其主要应用于一般的电脑系统,通过电脑完成视频数据的采集、编解码和网络传输。电脑相对来说体积大、耗电高,应用不够灵活。随着嵌入式软硬件技术的飞速发展,使得嵌入式数字视频采集系统得到实现。嵌入式视频采集系统实现了系统的模块化设计,而且比较容易安装、维护,其具有广阔的应用前景和研究价值。本文设计的视频采集系统是基于嵌入式处理器芯片和linux操作系统设计的。本设计采用更小更高效的嵌入式系统实现,能够使得摄像头和视频压缩传输等一系列软硬件集成在摄像头中。以后随着电力线传输或者POE的普及,这种摄像头只需要一路电力线或者一根网线就可以运行,将来的发展会更有前景。1.3 课题设计思路本设计采用友善之臂mini2440开发板和中兴zc301摄像头作为硬件支持,摄像头是usb接口。让开发板能够在linux系统中开始跑起来必须要有三个主要步骤:制作并下载suppervivi到开发板,然后下载linux内核的源程序包,解压后按照要求修改其内核加入zc301摄像头的驱动并编译下载到开发板中,最后则需要自己制作一个文件系统,通过yaffs2制作成文件系统并下载到开发板。然后运行servfox应用程序就可以启动摄像头并进行相关抓取图像等操作。2 系统总体方案设计2.1 视频采集系统的总体设计本课题研究的视频采集系统基于ARM处理器芯片,采用开放源代码的Linux 操作系统,在功能上实现 USB 视频数据的采集。这个视频采集系统不可能就只能是单独的系统,它还可以结合其他应用,比如视频通信、家庭安防、视频监控等很多应用从而成为很多系统不可或缺的一部分。本设计的总体框架如图1 所示。图1 系统总体框图硬件和软件是组成本设计的两个主要部分。硬件部分由ARM处理器芯片三星的S3C2440为核心,本开发板有很多接口和资源都没有用到,视频采集系统只用到其资源的很小一部分。zc301摄像设通过 USB 接口接入到开发板,从而接入系统,用于捕获原始视频数据。软件部分,由引导程序 suppervivi、Linux 内核、zc301摄像头设备驱动程序以及根文件系统一起组成了嵌入式系统的基本运环境,为用户应用程序提供必要的的支持。而应用程序就是视频采集压缩的具体实现的程序。2.2 视频采集系统的硬件介绍硬件系统是嵌入式设计的根本所在,有了可靠的硬件才能给程序提供良好的运行环境。如果硬件设计合理还能给软件的设计提供方便,有很多功能可以直接用硬件代替软件,减少软件的复杂度。由于自己研究,设计中难免碰到很多问题,所以选择应用比较广泛的开发板进行开发就会有很多草考资料和可以借鉴的经验。所以我选择了友善之臂的mini2440开发板。2.2.1 硬件平台的选择首先我们做基于ARM的课题就要选择一款合适的处理器,按照不同的应用场合以及对作品的实际用途我们应该适当选择,下面表 1 列出了几款常见的处理器的基本特性。通过选择器实际适用的功能和性价比对照,我们可以知道ARM 处理器是开发嵌入式视频采集系统最佳的选择。表1 常见微处理器特性比较处理器类型价格主要应用ARM低手持设备、可视电话、楼宇的对讲系统、网络监控、多媒体终端产品、医疗电子设备等MIPS低应用范围广泛,主要针游戏机、路由器和超级计算机等市场PowerPC高适合于集成灵活、通用的通信功能和多种控制应用功能的通信和网络设备Coldfire高工业控制、音频、通讯设备等另外由于mini2440是友善之臂公司推出的比较老并且经典的产品,所以价格相对便宜,研究视频采集系统已经够用。由于制作研究,所以应用程序只需要一个,所以存储空间不需要太大,存储芯片是64M SDRAM,其时钟频率最高可以达到100MHz。配有256M nand flash和2M nor flash。而引导程序suppervivi就存放在2M的nor flash中。开发板硬件接口资源如表2所示。表2 硬件接口资源表接口数量用途RJ-451用于网络连接串行口3用于程序下载USB Host1用于接USB摄像头USB Slave B1用于下载程序电源接口1提供电源因为USB接口是最普及的微机接口,而且使用简单,所以本次设计采用的是中星微的zc301摄像头,主要是因为其系统兼容性好,实用范围广,而且图像清晰,本身就带有简单的编码电路,可以实现图像的快速编码,可以为系统节省很多资源。但是厂家提供的芯片驱动主要针对 Windows操作系统,对linux系统支持不好,所以需要在嵌入式 Linux 内核中需要添加zc301摄像头的USB驱动程序。还需要将捕捉到的视频信息显示出来,所以还需要一块显示屏。我选用的万通W35的液晶屏,由于linux系统中没有这款液晶屏的驱动程序,所以还需要在linux内核中添加该液晶屏的驱动程序。视频采集系统的硬件方案基本上就确定了,只是开发板中还有一些我们没有用到的资源,这里就没有一一介绍了。硬件图如图2所示:图2 视频采集系统硬件实物图2.2.2 ARM9简介ARM微处理器是一种性能很高、功耗低的32位微型处理器,嵌入式系统中经常用到ARM芯片。ARM9是ARM公司一款非常主流的微型处理器,已经在电话、电视机顶盒、个人数码相机、GPS、个人数字助理以及因特网设备等方面有非常广泛的应用。ARM芯片从开始主要有ARM1系列,ARM1系列,ARM2系列,ARM3系列,ARM6系列,ARM7系列,ARM9系列,ARM10系列,ARM11系列,Cortex系列等。每一代更新都在性能和能耗方面有了很大进步。现在一般通用的ARM芯片大部分采用ARM7系列和ARM9系列。本设计采用的ARM9内核的芯片。ARM9 系列微处理器在高性能和低功耗特性方面提供最佳的性能。具有以下特点:(1)5 级整数流水线,指令执行效率更高;(2)提供 1.1MIPS/MHz 的哈佛结构;(3)支持 32 位 ARM 指令集和 16 位 Thumb 指令集;(4)支持 32 位的高速 AMBA 总线接口;(5)全性能的 MMU ,支持 Windows CE 、 Linux 、 Palm OS 等多种主流嵌入式操作系统;(5)MPU 支持实时操作系统;(6)支持数据 Cache 和指令 Cache ,具有更高的指令和数据处理能力;(7)ARM9 系列微处理器主要应用于无线设备、仪器仪表、安全系统、机顶盒、高端打印机、数字, 照相机和数字摄像机等。ARM9 系列微处理器包含ARM920T、ARM922T和ARM940T三种类型,以适用于不同的应用场合。2.3 视频采集系统的软件设计设计的软件包括linux操作系统、USB摄像头的驱动以及视频采集应用程序。整个软件系统的设计都是以ARM芯片以及外围电路硬件为基础设计的。软件设计整体思想和框图如图3所示。图3 软件设计整体框图2.3.1 嵌入式操作系统的选择嵌入式操作系统是指用于嵌入式硬件系统的操作系统。它是一种用途非常广泛的系统软件,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等。嵌入式操作系统负责嵌入式系统的全部软、硬件资源的分配、任务调度,控制、协调并发活动。嵌入式操作系统主要用于智能手机、智能电视、平板电脑、以及一些精度要求较高的控制领域。嵌入式操作系统具有通用操作系统的基本特征:能够有效的管理越来越复杂的系统资源;能够虚拟化硬件设备,把开发人员从繁忙的驱动程序移植和维护中解放出来;能够提供库驱动程序、函数、工具集以及应用程序,大大提高了应用系统的开发效率。与通用操作系统不同,嵌入式操作系统在硬件依赖性、系统实时性、软件固化以及专用性等方面具有较为突出的特点。对于开发而言,对于系统的选择应该考虑以下几个特点:可剪裁性:嵌入式系统没有 电脑那样大的存储资源,可利用资源有限,因此就要求嵌入式操作系统的内核具有可剪裁的特性,可以使不同的嵌入式系统能够剪裁出最合适本系统的操作系统。可移植性:现在市场上嵌入式微处理器种类很多而且都占有一定市场,所以嵌入式操作系统必须支持尽可能多的微处理器,这样用户选择硬件的范围就更加广泛。实时性:视频采集系统采集的数据一般都是实时变化的,对实时性的要求较高,所以必须选择一个实时操作系统。技术支持和开发工具:开发工具和技术支持的缺乏会使开发的难度加大,所以选择好的、主流的操作系统在遇到问题时能够更快的解决问题,缩短开发周期。成本控制:嵌入式操作系统的选择不能只去考虑系统性能,成本也是必须考虑的因素之一,如果成本过高会导致产品的市场占有率下降等,所以成本控制是非常重要的。嵌入式linux操作系统是由UNIX系统发展而来,是一种与UNIX操作系统类似的操作系统。Linux操作系统是开源的操作系统,它的内核可以自由定制,所以有很多不同的Linux版本,但它们都使用了Linux内核。Linux可以被安装在各种各样的类计算机硬件设备中,例如手机、路由器、平板电脑、台式计算机、视频游戏控制台、大型机和超级计算机。Linux是一个应用广泛的主流操作系统,世界上运算最快的10台超级计算机运行的都是Linux操作系统。严格来讲,Linux这个词本身只表示Linux内核,但实际上我们已经习惯了用Linux这个词来形容描述整个基于Linux内核的系统,并且使用GNU 工程各种工具和数据库的操作系统。由于linux操作系统是开源的操作系统,其中的各个接口等资源都是透明的,所以银行这种保密性较高的行业都是采用linux系统。Linux从1991年问世到现在,经过二十年的发展已经成为一款功能强大、设计完善的操作系统,可运行在X86、ARM、Alpha、MIPS、Motorola、NEC等多种硬件平台之上,并且源代码开放,可以定制。当前最热门的安卓系统和手机苹果系统都是从linux操作系统发展而来。2.3.2 视频采集系统的软件设计本设计采用了多线程的编程方式,建立了两个线程来控制程序的运行,分别是视频采集线程和网络传输线程。系统应用软件的设计方案如图4 所示。图4 应用软件设计流程图在应用程序中,视频采集线程利用V4L2(Video for Linux Two)编程接口从USB摄像头采集原始视频数据,然后进行相应的压缩处理,再把采集到的视频数据送到两个线程共享的缓冲区内存中,接下来查询客户端的请求信号,如果有信号就建立连接。将采集到的视频信号上传到网络中。程序初始化完毕以后,将打开视频采集线程,进入grab函数进行图像的抓取。采集完成后需要进行jpeg压缩处理,然后进行编码。在int converframe中,通过判断palette的值做不同的压缩处理,如果是JPEG格式的,则说明硬件采集来的视频数据已经通过硬件压缩,而zc301摄像头中自带有图像压缩的硬件,所以不用进行压缩处理。其中编码过程有以下:Z字形编码;使用DPCM对直流系数(DC)进行编码;使用RLE对交流系数(AC)进行编码;熵编码。接下来就要打开远程数据传输线程。在accept打开线程,首先在连接处读取frame_t message数据结构的内容,根据message的内容决定如何传输,下一步做循环发送。根据文件锁的锁定和非锁定状态发送锁定的内容。2.4 本章小结本章主要介绍了视频采集系统的整体方案,并介绍了相关硬件平台,采用的系统以及其选择。接下来说明了在嵌入式linux下应用软件serfox 的基本工作流程。3 Linux平台的搭建嵌入式linux系统在软件上通常可以分为四大块:引导程序suppervivi,linux内核,文件系统以及应用程序。而ARM平台不能执行linux的gcc工具编译的文件,也不能执行windows下的.exe文件,所以在linux的宿主机中必须搭建交叉编译环境,只要通过交叉编译环境编译出来的文件才能在目标机中执行。宿主机:就是用来开发将要下载到开发板中的引导程序、linux内核、文件系统、应用程序等的PC机,此PC机需要是linux系统。目标机:本设计中是指开发板。3.1 交叉编译环境的搭建交叉编译是嵌入式系统开发过程中一项非常重要的技术,它最主要是指某机器中执行的程序代码不是在本机上编译生成的,而是由另外一台机器编译生成,前者一般被称为目标机,后者一般被称为宿主机。使用交叉编译技术的主要原因是一般的嵌入式目标机并没有足够的软硬件资源进行开发,所以只能将开发调试编译等的过程转移到性能较高的宿主机上进行,然后将交叉编译好的可执行文件通过串口、USB口下载到嵌入式系统中。搭建软件开发平台的基础和前提就是交叉编译环境的搭建,交叉编译环境的搭建主要由以下几部分组成:准备宿主机:我们需要在一台装有Linux系统的PC机上定制、编译linux内核、制作根文件系统。本文采用的红帽子linux操作系统,在win7中安装虚拟机,使此linux系统运行在虚拟机中。准备目标板:本设计采用的是友善之臂的mini2440开发板。选择交叉编译工具:宿主机的x86体系结构和目标机的ARM体系结构存在着差异,为了能在宿主机上生成基于ARM体系结构的程序,必须使用交叉编译工具链来编译程序。本系统中使用的是arm-linux-gcc等交叉编译工具,源码包和使用方法都可在网上找到。配置开发环境:在系统的开发过程中,需要用到串口等通信接口,在使用前需要设置其波特率、数据位、停止位、奇偶校验等,在使用时采用putty工具设置即可,相当于超级终端,由于本文是在虚拟机下开发的,所以选择了后者。下载工具源码:下载Linux内核源代码包。本设计选择的Linux内核源代码包为linux-.tar.bz2。3.2 引导程序suppervivi介绍引导加载程序是系统加电以后运行的第一段软件代码,用于完成硬件的一些基本配置,引导嵌入式操作系统内核启动,通常从地址0x00000000 处开始运行。suppervivi 和通用的ARM的boatloader一样,只不过suppervivi 是此开发板专门的引导程序。suppervivi 和 PC 机中的 BIOS 也非常类似,虽然它运行的时间非常短,但却是系统一个非常重要的组成部分。大部分suppervivi 都有两种不同的工作模式,启动加载模式和下载模式。启动加载模式也可以叫做自主模式,是suppervivi 的正常模式,它从开发板中的Flash存储器上将操作系统加载到RAM中运行,整个过程不需要用户的参与。当suppervivi 工作在下载模式时,将通过串口或网口等通信接口从宿主机下载文件,这时它会向用户提供一个简单的命令行接口。根据启动过程的不同,suppervivi 可以分为单阶段(Single Stage)和多阶段(Multi-Stage)两种。一般来说,多阶段的suppervivi 可以提供更复杂的功能和更好的移植性。现在suppervivi 启动大多数分为两个阶段。第一阶段是阶段是与CPU和硬件紧密相关的,通常用汇编语言来编写,这个阶段的主要任务是:(1)初始化硬件设备(关闭处理器内部数据/指令cache、屏蔽中断等);(2)为下一阶段准备RAM空间;(3)复制第二阶段的代码到RAM中;(4)设置堆栈;(5)跳转到第二阶段代码的C入口点。suppervivi的第二阶段一般用C语言完成,这样可以完成更复杂的功能,也可以使代码有更好的可读性和可移植性。此阶段的主要任务是:(1)初始化本阶段所要用到的硬件设备;(2)检测系统内存映射;(3)将内核映像与根文件系统映像从Flash读到RAM中;(4)为内核设置启动参数;(5)调用内核。由于suppervivi 的移植较简单,所以这里直接使用其自带的suppervivi 版本,自己没有加以修改。3.3 嵌入式linux内核的裁剪以及移植一个操作系统的灵魂就是其内核,它负责着系统的进程调度、内存管理、网络系统和文件系统管理以及进程间的通信,决定了系统的性能和稳定性。linux内核代码可以分为体系结构相关部分和体系结构无关部分。在执行过程中,内核中的与体系相关部分的代码首先执行,主要任务是执行特定体系结构的初始化,如设置硬件寄存器,配置内存映射等。接下跳转到内核中的与体系无关部分,执行平台相关的板级初始化及系统其余部分的初始化。linux源代码是以文件的形式存放在各个目录中的,以下列出了几个主要的子目录。init:该目录包含了内核的初始化代码;mm:该目录包含所有独立于CPU体系结构的内存管理代码;arch:该目录包含了体系结构相关部分的内核代码;kernel:该目录包含存放主要的内核代码,该目录下的文件主要实现大多数Linux系统的内核函数;drivers:该目录放置系统所有的设备驱动程序,每种驱动程序分别在一个子目录;fs:该目录包括系统支持的所有文件系统的代码;include:该目录包含了编译内核所需的大部分头文件。与体系架构无关的头文件放在include/linux子目录下,而与ARM相关的头文件放在include/asm-arm子目录下。3.3.1 linux内核获取因为linux系统是开源的操作系统,所以网上都有linux内核的各个版本,只需在网上下载就可以免费得到linux内核。源代码可以在网站上下载得到。将获取的源码压缩包放在宿主机的linux系统中,用tar指令解压压缩包得到内核文件夹。现在只需要进入该文件夹使用命令make zImag就可以生产zImag文件,此文件就是可以直接下载到开发板的linux内核文件。不过此时我们还要对齐进行一系列的裁剪和定制就可以使得它能够支持zc301这款USB摄像头,而且使得系统能够最简运行效率最高。3.3.2 linux内核的移植我们移植目的是让 Linux- 可以在 mini2440 上运行。 首先,我们要使得 Linux- 的缺省目标平台成为 ARM 的平台。 修改总目录下的 Makefile 原 export KBUILD_BUILDHOST := $(SUBARCH) ARCH ?= $(SUBARCH) CROSS_COMPILE ?= 改为 export KBUILD_BUILDHOST := $(SUBARCH) ARCH ?= arm CROSS_COMPILE ?= arm-linux- 其中,ARCH 是指定目标平台为 arm,CROSS_COMPILE 是指定交叉编译器,这里指定的是系统默认的交叉编译器,如要使用其它的,则要把编译器的全路径在这里写出。接下来,要测试一下 linux 的编译是否能正常通过。 执行: #make s3c2410_defconfig ;#make ; 这里编译时间较长,大概要3个小时左右 先要修改时钟源,在 mach-mini2440.c的第 160 行static void _init smdk2440_map_io(void)函数中,把其中的16934400(代表原 SMDK2440 目标板上的晶振是 16.9344MHz)改为 mini2440 开发板上实际使用的12000000(代表 mini2440 开发板上的晶振 12MHz)。在 Linux 源代码根目录下执行 #make mini2440_defconfig ;使用 Linux 官方自带的 mini2440 配置 #make zImage ;编译内核,时间较长,最后会生成 zImage 重新编译并把生成的内核文件zImage(位于 arch/arm/boot 目录)下到板子中,可以看到内核已经可以正常启动了,但此时大部分硬件驱动还没加,并且也没有文件系统,因此还无法登陆。进入内核配置菜单,命令如下#make menuconfig。就会出现下图5所示画面。图5 内核配置根菜单从这里可以进入查看到开发板对mini2440的支持。接下来需要移植yaffs2文件系统,它是专门针对嵌入式设备,特别是使用nand flash作为存储器的嵌入式设备而创建的一种文件系统,早先的yaffs 仅支持小页(512byte/page)的nand flash,现在的开发板大都配备了更大容量的 nand flash,它们一般是大页模式的(2K/page),使用 yaffs2 就可以支持大页的nand flash。在网上可以下载到最新的yaffs2源码包,解压后进入该文件夹,执行以下语句就可以将yaffs2补丁打上。#cd yaffs2 #./patch-ker.sh c /opt/FriendlyARM/mini2440/linux- 现在需要配置和编译带yaffs2支持的内核,运行make menuconfig, File Systems-Miscellaneous filesystems-YAFFS2 file system support,按空格选中这个选项,退出保存,运行#make zImage 就配置并编译好了此内核。此外还需要一直网卡驱动才能正常使用网络,这里使用的是DM9000网卡。Linux-已经自带了完善的DM9000 网卡驱动驱动( 源代码位置:linux-/ drivers/net/dm9000.c) ,它也是一个平台设备,因此在目标平台初始化代码中,只要填写好相应的结构表即可。这里使用的MAC地址是软MAC,也就是通过驱动程序写入的可以修改的。然后在主目录下配置:make menuconfig,按照Device Drivers-Network device support - Ethernet (10 or 100Mbit)- 步骤就可以找到DM9000配置选项,选中并保存退出。此时的内核编译后就能够支持联网。接下来还需要配置RTC、添加LCD背光驱动、触屏驱动、移植LCD显示驱动、配置USB摄像头,然后make menuconfig配置内核。然后make zImage就可以生成最终的自己裁剪好的linux内核。3.4 根文件系统的制作3.4.1 文件系统简介系统启动起来以后,挂载根文件系统是操作系统要完成的最后一步操作,虽然是最后一步但却是必不可少的。在嵌入式linux操作系统中,系统引导程序会从根文件系统上把内核映像加载到内存中去运行。本设计文件系统的初始化主要是有busybox完成。由于默认的内核命令行上有init=/linuxrc, 因此,在文件系统被挂载后,运行的第一个程序是根目录下的linuxrc 。 这是一个指向/bin/busybox 的链接,也就是说,系统起来后运行的第一个程序也就是busybox 本身。这种情况下,busybox 首先将试图解析/etc/inittab 来获取进一步的初始化配置信息。而事实上,文件系统中并没有/etc/inittab 这个配置文件,根据busybox 的逻辑,它将生成默认的配置。在JFFS2文件系统中,对文件的修改并不是直接修改原来的数据,而是先在Flash尾部的空白区域申请一块新的区域来存放修改后的数据,并将原来的数据区域标记为脏,这种存储方式有效的实现了断电保护功能。由于Flash写入新数据时必须将整块区域擦除,该做法还大大减少了Flash的擦除频率,提高了写文件的效率和Flash的使用寿命。3.4.2 busybox的移植BusyBox是一个源代码开放的功能软件,仅占用1M左右的存储空间,却集成了一百多个最常用的Linux命令和工具,还集成了一个telnet服务器和一个http服务器,这些工具和命令对于一个系统来说是必不可少的。可以在网上下载busybox源码包。解压源码包,然后进入主目录修改makefile文件。修改如下:CROSS_COMPILE ?=arm-linux- /第164 行 ARCH ?=arm /第189 行 接下来就是配置busybox,输入命令make menuconfig,Busybox Settings-General Configuration-Build Options- ,选中* Build BusyBox as a static binary(no shared libs)此选项。然后编译busybox 到指定目录: make CONFIG_PREFIX=/opt/rootfs install 在rootfs 目录下会生成目录bin、sbin 、usr和文件 linuxrc 的内容。3.4.3 建立根文件系统进入到/opt目录,新建建立根文件系统目录的脚本文件create_rootfs_bash ,使用命令chmod +x create_rootfs_bash 改变文件的可执行权限,./create_rootfs_bash 运行脚本,就完成了根文件系统目录的创建,脚本文件见附录1。建立/etc目录下的配置文件:a、etc/mdev.conf 文件,内容为空。 b、拷贝主机etc目录下的 passwd 、group、shadow文件到rootfs/etc 目录下。 c、etc/sysconfig 目录下新建文件HOSTNAME,内容为”H3-Studio”。 d、etc/inittab文件: #etc/inittab :sysinit:/etc/init.d/rcS s3c2410_serial0:askfirst:-/bin/sh :ctrlaltdel:/sbin/reboot :shutdown:/bin/umount -a r e、etc/init.d/rcS文件: #!/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin runlevel=S prevlevel=N umask 022 export PATH runlevel prevlevel echo -munt al l- mount -a echo /sbin/mdev/proc/sys/kernel/hotplug mdev -s echo * echo *video system* echo Kernel version:linux- echo Student:Lu Shilin echo Date:2013.5.20 echo * /bin/hostname -F /etc/sysconfig/HOSTNAME ( 或者直接 /bin/hostname H3-Studio ) 使用以下命令改变rcS 的执行权限: Chmod +x rcS f、etc/fstab 文件: #device mount-point type option dump fsck order proc /proc proc defaults 0 0 none /tmp ramfs defaults 0 0 sysfs /sys sysfs defaults 0 0 mdev /dev ramfs defaults 0 0 g、 etc/profile 文件: #Ash profile #vim:syntax=sh #No core file by defaults #ulimit -S -c 0/dev/null 2&1 USER=id -un LOGNAME=$USER PS1=uh=W# PAT H = $ PAT H HOSTNAME=/bin/hostname export USER LOGNAME PS1 PATH 然后安装好yaffs文件制作工具,mkyaffs2image-128M rootfs rootfs.img,这样就可以将此文件系统制作成镜像文件下载到开发板。不过此时的文件系统还没有servfox应用程序。到此文件系统的基本制作已经完成。3.5 本章小结本章详细介绍了嵌入式Linux软件平台的基本构建过程,按照Linux系统的软件层次一步步进行了介绍,包括交叉编译环境的搭建、引导代码suppervivi的移植和编译、Linux内核的剪裁和移植、JFFS2根文件系统的构建和移植,并说明了在进行这些操作的过程中应该注意的问题。4 应用程序servfox的分析Servfox流程图如图6所示。图6 servfox基本流程图4.1 从命令行传递参数给变量main()函数内,首先执行的是一个for循环体. 看一下里面的几个语句:. if (strcmp (argvi, -d) = 0) if (i + 1 = argc) if(debug) printf (No parameter specified with -d, aborting.n); exit (1); videodevice = strdup (argvi + 1); .videodevice保存了摄像头设备节点名称。如果用户不指定的话,后面会将它设置为/dev/video0。if (strcmp (argvi, -g) = 0) grabmethod = 0; 通过grabmethod的设置就指定了采集图像时使用mmap()内存映射的方法还是read()读取的方法. 采用read系统调用来读取图像数据的话在连续抓取的情况下会发生频繁的用户态和内核态的切换,效率低。 通过mmap内存映射的话,把摄像头对应的设备文件映射到进程内存中,减少I/O操作,提高了效率. 因此启动servfox时不加-g选项的话默认应该是采用grabmethod=1为mmap方式。在for循环体里面还根据用户输入的选项分配了存储分辨率大小width/height,创建套接字时用的端口号serverport(默认为7070)。4.2 初始化视频采集设备接下来主要要执行的语句有:memset (&videoIn, 0, sizeof (struct vdIn); / 将结构体videoIn初始化为0先来看看videoIn这个结构体:vdIn 结构体(在spcav4l.h中定义,它里面的成员都是依据Video4Linux接口标准而定义的):接下来执行:if (init_videoIn (&videoIn, videodevice, width, height, format,grabmethod) != 0)这个函数主要是设置了grabmethod:用mmap方式还是read方式;设置videodevice成员设备文件名称,默认是 /dev/video0;设置信号vd-signalquit=1,图像宽高:vd-hdrwidth=width;vd-hdrheight=height;设置图像格式为VIDEO_PALETTE_JPEG:vd-formatIn = format;获得色深:vd-bppIn = GetDepth (vd-formatIn);init_v4l()是初始化v4l视频设备的函数,它首先通过系统调用open()打开视频设备,读取摄像头数据前,需要对摄像头进行设置,主要包括图像参数和分辨率。4.3 采集图像数据线程init_videoIn()执行完后返回main(),接下来创建采集视频图像的线程:pthread_create (&w1, NULL, (void *) grab, NULL);进入grab()函数:可以看到在死循环体里面调用v4lGrab()函数。进入v4lGrab()函数,先判断一下是用mmap方法还是用read方法。可以看出要是视频图像格式是VIDEO_PALETTE_JPEG的话,直接将pFramebuffer中的数据拷贝到ptframe缓存中去,而不压缩处理,因为获得的就是已经压缩过的jpeg格式了(是硬件或底层驱动做了,一般USB摄像头对采集到的图像都作了jpeg格式压缩(内置JPEG硬件压缩)。 获得jpeg格式文件的大小是通过调用get_jpegsize()实现的。进入get_jpegsize()可以发现,它利用了jpeg文件格式中是以0xFF 0xD9结尾的这个特性。ptframe里面的经压缩过的图像数据就是发送线程要发送出去的内容了。pFramebuffer中的数据拷贝进ptframe完成后,就截取下一帧图像数据了。执行完后,跳出v4lGrab()函数体,返回到grab()去。 正常运行状态下,将不断循环调用v4lGrab()采集图像数据。4.4 建
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 济南市2024-2025学年七年级下学期语文期末测试试卷
- 济南市2025-2026学年八年级上学期语文月考测试试卷
- 电解池课件教学课件
- 高速安全知识培训课件考试
- 高速上应急知识培训内容课件
- 高血压科普教学课件
- 高血压分级课件
- 施工电源建设EPC总承包合同
- 光伏发电项目EPC总承包工程监理合同
- 电脑小知识培训心得体会课件
- T/CADBM 33-2021水性丙烯酸防腐涂料
- DB37/T 3658-2019地质灾害治理工程施工技术规范
- 个体户餐饮股东协议书
- 常用护理技术操作并发症的预防及处理考核试题及答案
- 挖机台班合同协议书
- 安全生产行政执法要点及文书制作实务培训课件
- 科学虹吸课件
- 人教版小学数学四年级上册全册教案
- 全科医生题库-云南省基层卫生岗位练兵和技能竞赛试题
- 2025年中国智慧养殖行业市场占有率及投资前景预测分析报告
- 《立在地球边上放号》与《峨日朵雪峰之侧》比较阅读教学设计-统编版高一语文必修上册
评论
0/150
提交评论