嵌入式Linux系统下开发USB摄像头图像采集系统论文.doc_第1页
嵌入式Linux系统下开发USB摄像头图像采集系统论文.doc_第2页
嵌入式Linux系统下开发USB摄像头图像采集系统论文.doc_第3页
嵌入式Linux系统下开发USB摄像头图像采集系统论文.doc_第4页
嵌入式Linux系统下开发USB摄像头图像采集系统论文.doc_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

摘要本文以实际应用为背景,设计实现了一种基于ARM系列的微处理器S3C2410与OV511USB摄像头的嵌入式视频技术系统。本文主要介绍了此系统的硬件部分(S3C2410芯片、OV511芯片、USB借口、LCD显示、数据传输等)、软件部分(Linux操作系统、嵌入式操作系统、Qt、Vi编译器、USB驱动程序等相关的Linux编译程序)构成,实现了所需要的相关材料的信息和试验相关的实际功能应用、程序的流程设计及程序中主要模块的部分细节和功能配置,记录了实验测试的相关情况以及最终实验完成的初步效果。 本系统最终在UP-NETARM2410-S实验平台上实现了LCD的图像数据采集及LCD显示和初步的Qt主机图像显示功能。经过实验测试,系统效果良好。在嵌入式Linux系统下开发USB摄像头图像采集系统,给出了基于S3C2410处理器的嵌入式图像采集系统的设计方案,并对如何编写符合Video for Linux 标准的摄像头图像采集程序进行了讨论。实践证明该系统也可以应用到多个领域,如:手机、照相机、投影仪、高清晰度远程摄像、无线监视器等相关便携式图像数据采集传送。实现了系统设计开发的目标。关键词:嵌入式系统;USB摄像头;视频监控AbstractBased on the actual application of background, Design and Implementation of a series of ARM-based microprocessor S3C2410 OV511USB with the embedded camera - in video technology systems. This paper describes the system hardware (S3C2410 chip, OV511 chips, USB excuse LCD display, data transmission, etc.), software (Linux operating system, Embedded operating systems, Qt, Vi compiler, USB drives procedures related to the Linux compiler) composition, achieved the necessary relevant information and materials related to the actual test function application, Design of processes and procedures for the main module and some details of the distribution function. Records of the experimental test of the relevance and the eventual completion of the preliminary experimental results. The system eventually UP-NETARM2410-S platform to achieve the LCD image data acquisition and LCD display and preliminary Qt mainframe image display function. After laboratory tests, the system effectively. Embedded Linux Systems Development USB camera image acquisition system, Based on the S3C2410 Processor Embedded Image Acquisition System Design program, how to prepare with Video for Linux standard camera image acquisition process were discussed. Practice has proved that the system can be applied to many areas, such as : mobile phones, cameras, projectors, high definition remote camera, Wireless monitors and other related portable data acquisition image transmission. Implementation of the system design and development goals. Key words: Embedded System; USB Camera; Video Surveillance目录摘要1第一章 前言4第二章 系统概述52.1 系统功能52.2 系统硬件组成62.3 系统软件设计8第三章 硬件组成113.1 硬件连接图113.2 S3C2410 CPU113.3 LCD液晶显示模块14第四章 软件设计194.1 软件系统描述194.2 视频采集模块的设计244.3 Video4Linux的图像采集254.4 FrameBuffer的图像显示284.5 Linux内核、图形界面系统及文件系统的安装294.5.1嵌入式Linux内核的定制294.5.2 图形界面系统的编译与安装30第五章 软硬件联合调试43结束语44参考文献45附录:程序清单46第一章 前言嵌入式Linux操作系统同目前广泛应用的嵌入式操作系统如pSOS、VxWorks、winCE相比,具有可移植性好、网络功能强、有优秀的GNU编译工具支持等优点。嵌入式系统是面向用户、面向产品、面向应用的,它必须与具体应用相结合才会具有生命力、具有优势。可以这样理解上述三个方面的含意,即嵌入式系统是与应用紧密结合 的,它具有很强的专用性,必须结合实际系统需求进行合理的裁减利用。从技术的角度定义:以应用为中心,以计算机技术为基础,软硬件可裁减,适合应用系统对功能,可靠性,成本,体积,功耗等严格要求的专用计算机系统, 从系统的角度定义:嵌入式系统是设计完成复杂功能的硬件和软件,并使其紧密耦合在一起的专用计算机系统.嵌入式反映了这些系统通常是更大系统中的更加完整的一个部分,称为嵌入式系统入式系统,更重要的是Linux的开放源代码和免费的优点使得系统成本显著降低。一流的程序设计和开发加上测试的开放性使得Linux系统非常可靠和稳定,因而越来越多的人开始使用Linux开发应用程序。S3C2410 CPU是一款采用ARM结构,面向高性能、低功耗设备的嵌入式处理器,非常适用于手持移动设备的开发。USB摄像头因具有低廉的价格,良好的性能,及方便使用的特性,因此很容易集成到嵌入式系统中。本文介绍的基于嵌入式Linux系统的USB摄像头图像采集系统采用OV511芯片的WEBEYE摄像头,在基于S3C241 CPU的开发板上实现了图像的采集与压缩,并可以借助Qt编译器实现linux下的主机视频传输及显示功能。第二章 系统概述2.1 系统功能 本文使用的系统平台硬件功能框图如图1所示,该平台采用Samsung公司的处理器S3C2410。该处理器内部集成了ARM公司ARM920T处理器核的32b微控制器,资源丰富,带独立的16kB的指令Cache和16kB数据Cache,LCD控制器、RAM控制器,NAND闪存控制器,3路UART、4路DMA、4路带PWM的Timer、并行I/O口、8路10位ADC、Touch Screen接口,I2C接口,I2S接口、2个USB接口控制器、2路SPI,主频最高可达203MHz。在处理器丰富资源的基础上,还进行了相关的配置和扩展,平台配置了16MB 16b的FLASH和64MB 32位的SDRAM,通过以太网控制器芯片AX88796扩展了一个网口,另外引出了一个HOST USB接口。在USB接口上外接一个带USB口的摄像头。另外,还配有分辨率为320240,256色的LCD。图1 硬件开发平台系统通过WEBEYE摄像头采集图像,对现场图像进行高速捕捉,然后将捕捉到的图像通过USB总线传输到PXA255处理器进行处理,并将图像压缩,保存为JPEG格式的文件。程序调用Encoder编码器可以将多幅JPEG格式的图像合成一段AVI视频流,实现视频回放,这在安全监控、事故鉴定、车辆防盗等领域中都有广泛应用。最后,系统还可以通过以太网口或UART口将保存的图片和视频流传到服务器上,实现网络监控。2.2 系统硬件组成 一、2410-S开发平台硬件资源1、S3C2410 Core 小板:S3C2410 ARM CPU、64M SDRAM、64M NAND FLASH,通过 200Pin精密插座与主板连接。 2、Double 100M EtherNet网卡:由两片 AX88796构成的双网卡3、4 HOST / 1 DEVICE USB接口:2410的主USB口扩展为4个,由AT43301构成USB HUB,其中电源管理用 MIC2525。USB 从口保持处理器本 1 个。 4、3 UART/IrDA:保持 2 个 RS232 串口,增加 1个 RS485 串口,1 个 IrDA收发器,均从处理器的 UART2 引出。 5、168Pin EXPORT:提供一个 168Pin 扩展卡插槽,引出所有总线信号和未占用资源。 6、LCD 显示屏:兼容多种 LCD,可采用 5 寸 256 色屏或 8 寸 16bit 真彩屏,同时预留一个24bit 接口。 7、TouchScr: 采用 ADS7843,保留了直接用 2410 内部 ADC构成的转换电路接口 8、AUDIO:采用 UDA1341,具有放音、录音等功能。 9、PS2 KEYPAD:使用 ATMEGA8 单片机控制 2个 PS2 接口和板载 17 键小键盘。两个 PS2可接 PC 键盘和鼠标。 10、LED:使用 ZLG7290 只驱动8 只小数码管。同时可作 IIC 总线实验。 11、POWER SUPPLY、RESET、RTC等必须资源。 12、ADC:板载 3 个电位器和选择跳线,同时在板上设模拟电压输入专用接口。 13、IDE/CF卡插座:扩展有笔记本 CF卡接口电路。 14、PCMCIA 和 SD卡插座:由 EPM3128A100 CPLD实现 PCMCIA 控制。 15、IC 卡。也由 ATMEGA8 单片机控制。 16、DC/STEP电机。步进电机由 74HC573 扩展 IO接出,软件形成时序来控制。同时剩余 IO可以控制 CAN等电路,以节省 CPU的 GPIO资源。直流电机由 PWM 控制。 17、CAN BUS:设置 1 个CAN 口,采用 MCP2510和 TJA1050芯片构成。 18、Double DA:设置两个 10位 DAC 端口,采用 MAX504 接SPI 总线,输出两路模拟电压。 19、可以提供配套的 GPRS/GPS、FPGA 等扩展板。二、网眼v2000视频摄像头网眼v2000视频摄像头采用的是Omnivision生产的OV511视频芯片,它采用的是目前最前沿的CMOS视频采集技术。Omnivision开发的高科技CMOS工艺技术,结合专有的象素结构和先进的图像处理算法,从而为产品提供了高速度和高额的成本效益,即优质的camerachip系列。此系列产品有很高的市场容量。通过此产品获得的清洁光学 Omnivision还开发了具有革命性的新技术管线结构方案,这将有助于塑造未来数码影像技术。 Omnivision生产的camerachip产品不需要额外的处理能力,并提供高品质的帧影像,有别于多晶片图像传感器解决方案。最终一个规模偏小,消耗能量较小,有一个更大的环境范围内运作,成本低的解决方案诞生了。 2.3系统软件设计一、嵌入式Linux简介 嵌入式Linux(Embedded Linux)是指对Linux经过小型化裁减后,能够固化在容量只有几百K字节的存储器芯片或弹片机中,应用于特定嵌入式场合的专用Linux操作系统。该操作系统具有相当多的优点,他的内核小、运行稳定、功能强大、支持多种硬件平台、源代码完全开放,可裁减和低成本的特性非常适合于嵌入式应用,并且Linux本身直接提供完整的TCP/IP协议,可非常方便地进行网络应用。但Linux内核本身不具备强实时性,且内核体积较大,而且嵌入式系统的硬件资源有限,因此把Linux用于嵌入式系统必须对Linux进行实时化和嵌入式化,即通过配置内核,裁减shell和嵌入式C库对系统定制,使整个系统能够存放到容量较小的FLASH中,Linux的动态模块加载,使Linux的裁减极为方便,高度模块化的部件使添加非常容易。 整个系统软件是在嵌入式Linux的基础上构建的。S3C2410平台使用的Linux内核是在Linux2.4.18内核打上patch2.4.18S3C2410这个补丁后编译而成。S3C2410平台使用的文件系统是yaffs,文件系统包括应用程序、模块、配置文件和库等,图像的采集和显示是建立在嵌入式Linux内核之上的,整个软件系统如图2所示。 应用程序(图像采集、显示以及其他程序) Linux内核摄像头驱动引导程序(Bootloader)图2 软件结构通常宿主机和目标板上的处理器不同,宿主机通常为Intel处理器,而目标板如图1所示为SAMSUNG S3C2410,所以程序需要使用针对处理器特点的编译器才能生成在相应平台上可运行的代码,GNU编译器提供这样的功能,在编译时,可以选择开发所需的宿主机和目标机,从而建立开发环境。在进行嵌入式开发前的第一步工作就是把一台PC机作为宿主机开发机,并在其上安装指定操作系统。对于嵌入式Linux,宿主机PC上应安装Linux系统。之后,在宿主机上建立交叉编译调试的开发环境,开发环境的具体建立这里不细谈。本文采用移植性很强的C语言在宿主机上编写视频采集程序,再利用交叉编译调试工具编译链接生成可执行代码,最后向目标平台移植。 二、Qt简介 Qt是一个跨平台的C+图形用户界面库,由挪威的TrollTech公司出品,目前包括Qt, 基于 Framebuffer 的 Qt Embedded,快速开发工具 Qt Designer,国际化工具 Qt Linguist ,以及面向嵌入式Linux的综合应用平台Qtopia等部分 Qt 支持所有 Unix 系统,当然也包括 Linux,还支持 WinNT/Win2k/WinXP,Win95/98 平台。TrollTech公司成立于1994年,但早在1992年成立TrollTech公司的那些程序员就开始设计Qt了,Qt的第一个商业版本发布于1996年,在随后的日子里Qt发展非常迅速。下面列出了TrollTech公司成立至今的重大事件:1. 1994: Trolltech公司在挪威首都奥斯陆成立2. 1996:第一个商业版本的Qt发布3. 1998: KDE free Qt 基金会成立4. 1999: Qt 2发布5. 2000: Qt/Embedded发布6. 2000: 发布了使用GPL标准的Qt/X117. 2001: Qtopia被夏普公司采用8. 2001: Qt 3发布9. 2002: TermBuilder发布10. 2003: QSA 发布11. 2003: 发布了使用GPL标准的Qt/Mac12. 2004: Qtopia Phone发布 Qt/Embedded是一个为嵌入式设备上GUI和应用程序开发而设计的C+工具开发包。它可以运行在多数处理器上,通常被应用在嵌入式Linux系统上。如果不考虑X Window系统的需要,Qt/Embedded应用程序可以直接对Framebuffer进行写操作。除了类库以外,Qt/Embedded还包含几个加快和简化开发的工具。使用标准的Qt API,应用程序可以在常用的Windows和Unix编程环境下开发。Qtopia是TrollTech公司为采用嵌入式Linux系统的消费电子设备而开发的综合应用平台。它包括三个版本:Qtopia手机版Qtopia PDA版和Qtopia消费电子产品平台。1、Qtopia手机版(Qtopia Phone)是Qtopia的一个自定义版本用于内存有限的智能手机和功能手机它的用户界面可自定义内存占用量低手机制造商使用它可以创建令人赞叹的图形用户界面从而令手机卓越超群Qtopia手机版有两个版本键盘驱动和手写笔驱动。2、Qtopia PDA版(Qtopia PDA)是一个强大的平台专用于基于Linux操作系统的PDA个人数字助理设备许多PDA都已采用了QtopiaQtopia PDA版已经成了事实上的Linux 标准它代表了可行的第三种PDA设计方案Qtopia PDA版具有可定制的用户界面支持多种不同的屏幕尺寸以及横向和纵向布局。3、Qtopia 消费电子产品平台(Qtopia CEP)则是一套高层次开发平台适用于那些希望自行设计和开发应用套件的制造商Qtopia CEP使得制造商能够在形形色色的手写笔和键盘驱动的设备上创建自定义的环境这些设备包括电视机Web Pad无线联网板机顶盒以及许多其它基于Linux的设备等等。第三章 系统硬件介绍3.1 硬件连接图连接宿主机RS232接口JTAGFLASH存储器ARM数码摄像头SDRAM256色LCD图3 S3C2410平台硬件结构框图3.2 S3C2410 CPUS3C2410 CPU是韩国三星公司推出的基于ARM920T内核和AMBA总线的微处理器;它使用0.18um CMOS标准宏单元和存储器单元工艺;集成LCD、UART、IIC、SPI、IIS、USB、SD 控制器等片内外围设备;支持ROM和NAND Flash引导,单片机具有结构简单、控制功能强、可靠性高、体积小、价格低等优点,在许多行业都得到了广泛应用。在航空航天、地质、石油、冶金、采矿、机械、电子等诸多领域单片机都发挥了巨大作用。开发板特性及资源:1、S3C2410 CPU集成了大量的功能单元,包括:(1)、内部1.8V,存储器3.3V,外部I/O3.3V,16KB数据Cache,16KB指令Cache,MMU。(2)、内置外部存储器控制器(SDRAM控制和芯片选择逻辑)。(3)、LCD控制器,一个LCD专业DMA。(4)、4个带外部请求线的DMA。(5)、3个通用异步串行端口(IrDA1.0,16-Byte Tx FIFO and 16-Byte Rx FIFO),2通道SPI(6)、一个多主I2C总线,一个I2S总线控制器。(7)、SD主接口版本1.0和多媒体卡协议版本2.11兼容。(8)、两个USB HOST,一个USB DEVICE(VER1.1)。(9)、4个PWM定时器和一个内部定时器。(10)、看门狗定时器。(11)、117个通用I/O。(12)、56个中断源。(13)、24个外部中断。(14)、电源控制模式:标准、慢速、休眠、掉电。(15)、8通道10位ADC和触摸屏接口。(16)、带日历功能的实时时钟。(17)、芯片内置PLL。(18)、设计用于手持设备和通用嵌入式系统。(19)、16/32位RISC体系结构,使用ARM920T CPU核的强大指令集。(20)、带MMU的先进的体系结构支持WinCE、EPOC32、Linux。(21)、指令缓存(Cache)、数据缓存、写缓存和物理地址TAG RAM,减小了对主存储器带宽和性能的影响。(22)、ARM920T CPU核支持ARM调试的体系结构。(23)、内部先进的位控制器总线(AMBA)(AMBA2.0,AHB/APB)。2、系统管理:(1)、小端/大端支持(2)、地址空间:每个BANK128MB(全部为1GB)。(3)、每个BANK可编程为8/16/32位数据总线。(4)、BANK0到BANK6为固定起始地址。(5)、BANK7可编程BANK起始地址和大小。(6)、一共8个存储器BANK。(7)、前6个存储器BANK用于ROM、SRAM和其它。(8)、两个存储器BANK用于ROM、SRAM、和SDRAM(同步随机存储器)。(9)、支持等待信号用以扩展总线周期。(10)、支持SDRAM掉电模式下的自刷新。(11)、支持不同类型的ROM用于启动(NOR/NAND Flash、EEPROM和其它)。S3C2410专有接口特性:表1 S3C2410专有接口特性序号名称描述1COMI-314针2.0mm间距接口直接引出CPU内部三串口2KEBOARD10针2.0mm间距接口引出IO键盘3CON-LCDLCD/STN液晶屏借口(50针2.0mm间距),可以接各种单色,伪彩,真彩液晶屏,含有触摸屏接口4CON-GPIOGPIO等接口(36针2.0mm间距),含有10个中断引脚,6路AD输入,1个SPI接口,2个时钟输出,2个GPIO口5BUSCON总线接口(44针地址数据线,14针控制线),带有16位数据线,25位地址线等信号系统存储器英蓓特公司 S3C2410 开发板上的存储器包括 SDRAM 和 FLASH。系统配置了两片32MB 的三星 SDRAM;一片 intel strata flash(16MB),一片atmel 的 AT49LV1614A,2MB NOR flash (可兼容 AMD 的 AM29LV160DB/320DB),另外还配置了 SD 卡座和SMC 卡座。 开发板采用两片半字(half-word)SDRAM 器件共同组成一个 32 位数据宽度的SDRAM系统,提高了其与 CPU 的通信效率。更好的发挥 S3C2410芯片的潜能。3.3 LCD液晶显示模块LCDLiquid Crystal Display,中文多称“液晶平面显示器”或“液晶显示器”。其工作原理就是利用液晶的物理特性:通电时排列变得有序,使光线容易通过;不通电时排列混乱,阻止光线通过,说简单点就是让液晶如闸门般地阻隔或让光线穿透。常见的液晶显示器按物理结构分为四种: (1)、扭曲向列型(TNTwisted Nematic) (2)、超扭曲向列型(STNSuper TN) (3)、双层超扭曲向列型(DSTNDual Scan Tortuosity Nomograph)(4)、薄膜晶体管型(TFTThin Film Transistor) TFT-ThinFilmTransistor薄膜晶体管是有源矩阵类型液晶显示器AM-LCD中的一种,TFT在液晶的背部设置特殊光管,可以“主动的”对屏幕上的各个独立的像素进行控制,这也就是所谓的主动矩阵TFT(activematrixTFT)的来历,这样可以大大地提高反应时间,一般TFT的反应时间比较快,约80ms,而STN则为200ms,如果要提高就会有闪烁现象发生。而且由于TFT是主动式矩阵LCD可让液晶的排列方式具有记忆性,不会在电流消失后马上恢复原状。TFT还改善了STN闪烁(水波纹)-模糊的现象,有效地提高了播放动态画面的能力。和STN相比,TFT有出色的色彩饱和度、还原能力和更高的对比度,但是缺点就是比较耗电,而且成本也比较高。1、液晶显示器的类型(按物理结构分类)LCD按照物理结构,可以分为双扫描无源阵列显示器(DSTN- LCD)和薄膜晶体管有源阵列显示器(TFT-LCD)。而快速DSTN(HPA),性能界于两者之间。具体参数比较见表2。表2 LCD显示器参数比较类型反应时间(ms)对比度视角DSTN30025:120度HPA15035:125度TFT80100:145度2、DSTN(Dual Scan Tortuosity Nomograph)双扫描扭曲阵列它是通过双扫描方式来扫描扭曲向列型液晶显示屏,来达到完成显示的目的。DSTN是由超扭曲向列型显示器(STN)发展而来的,由于DSTN采用双扫描技术,因而显示效果较STN有大幅度提高。笔记本电脑刚出现时主要是使用STN,其后是DSTN。STN和DSTN的反应时间都较慢,一般约为300ms左右。从液晶显示原理来看,STN的原理是用电场改变原为180度以上扭曲的液晶分子的排列从而改变旋光状态,外加电场通过逐行扫描的方式改变电场,在电场反复改变电压的过程中,每一点的恢复过程较慢,因而就会产生余辉现象。用户能感觉到拖尾(余辉),一般俗称为“伪彩”。由于DSTN显示屏上每个像素点的亮度和对比度不能独立控制,以至于显示效果欠佳,由这种液晶体所构成的液晶显示器对比度和亮度较差、屏幕观察范围较小、色彩欠丰富,特别是反应速度慢,不适于高速全动图像、视频播放等应用,一般只用于文字、表格和静态图像处理,但是它结构简单并且价格相对低廉(其价格一般要比同等配置下的TFT笔记本电脑低3千元左右),耗能也比TFT-LCD少,而视角小可以防止窥视屏幕内容达到保密作用,结构简单可以减小整机体积,因此,在少数笔记本电脑中仍采用它作为显示设备,目前仍然占有一定的市场份额。 其实DSTN-LCD并非真正的彩色显示器,它只能显示一定的颜色深度,与CRT的颜色显示特性相距较远,因而又称为“伪彩显”。DSTN的工作特点是这样的:扫描屏幕被分为上下两部分,CPU同时并行对这两部分进行刷新(双扫描),这样的刷新频率虽然要比单扫描(STN)重绘整个屏幕快一倍,它提高了占空率,改善了显示效果。由于DSTN分上下两屏同时扫描,上下两部分会出现刷新不同步,所以当元件的性能不佳时,一般在使用过程中,显示屏中央会出现一条模糊的水平亮线。不过,现在采用DSTN-LCD的电脑因CPU和RAM速率高且性能稳定,这种不同步现象已经很少碰见到了。3、HPA一般称为高性能定址或快速DSTN。是DSTN的改良型,能提供比DSTN更快的反应时间、更高的对比度和更大的视角,由于它具有与DSTN相近的成本,因此在低端笔记本电脑市场具有一定的优势。4、TFT(Thin Film Transistor)即薄膜场效应晶体管。所谓薄膜晶体管,是指液晶显示器上的每一液晶象素点都是由集成在其后的薄膜晶体管来驱动。从而可以做到高速度、高亮度、高对比度显示屏幕信息。由于彩色显示器中所需要的像素点数目是黑白显示器的4倍,在彩色显示器中像素大量增加,若仍然采用双扫描形式,屏幕不能正常工作,必须采用有源驱动方式代替无源扫描方式来激活像素。这样就出现了将薄膜晶体管(TFT)、或薄膜二极管、或金属绝缘体金属(MIM)等非线性有源元件集成到显示组件中的有源技术,用来驱动每个像素点,使每个像素都能保持一定电压,达到100的占空化,但这无疑是将增加设备的功耗。TFT属于有源矩阵液晶显示器(AM-LCD)中的一种,TFT-LCD的每个像素点都是由集成在自身上的TFT来控制,是有源像素点。因此,不但反应时间可以极大地提高,起码可以到80ms左右,而且对比度和亮度也大大提高了,同时分辨率也达到了空前程度。因其具有比其他两种显示器更高的对比度和更丰富的色彩,荧屏更新频率也更快,俗称“真彩”。S3C2410芯片集成了液晶控制器,支持 TFT 彩屏,最高分辨率可达 680 480;支持单色,4 级灰度,16 级灰度,256 色及 4096 色 STN LCD,最高分辨率为 640*480,开发板已经预留有 LCD 接口,用户可通过该接口转接不同类型不同尺寸的 LCD 屏。同时,若客户由于特殊需要,不使用 S3C2410芯片集成的 LCD 控制器,还可通过预留的外部扩展总线对 LCD 控制器进行扩展。LCD 接口如下: 图4 LCD接口开发板与PC机的连接:开发板的串口UART0(J410)通过交叉串口线与 PC 主机的 COM0或者 COM1相连 开发板的 USB 从口(USB DEVICE)与 PC 主机的 USB 口相连 开发板的 JTAG 口通过 20PIN 排线与仿真器相连,仿真器再通过并口线与PC主机的并口相连 通过+5V 直流变压器给开发板供电 如图所示:图5 PC机与硬件系统连接第四章 系统软件设计4.1 软件系统概述Liunx系统中对USB设备的支持是通过如图6所示的结构实现的。Linux内核中的USB Core为设备和主控制器提供API接口。USB Core包含所有的USB设备和主控制器的一些通用操作,为向上和向下操作提供一个接口。在Linux系统中,设备驱动可分为字符设备、块设备以及网络设备。其中,字符设备面向字符I/O操作,没有缓冲,顺序读取;而块设备面向数据块,所有操作都通过内核地址空间的I/O缓冲区完成,支持随机存取操作。USB设备通过快速串行通信的方式工作,应作为字符设备来处理。系统加载设备驱动的方式有模块加载和内核初始化加载两种:前者通过用户使用insmod命令动态加载到内核中,通过rmmod命令卸载驱动模块;后者是把驱动编进内核,在内核初始化时自动加载。USB主口程序由HCD(主机控制器驱动)、USBD (USB驱动程序)以及客户程序组成。其中USBD负责管理所有HCD、设备驱动和所有连接到USB总线上的设备,是USB主机软件的核心。如图2所示,Linux系统中USB子系统采用分层结构,其中USBD和HCD提供了支持设备驱动程序开发的API。USB设备驱动程序不是通过I/O操作访问设备,而是通过USB Core提供的标准接口与设备交互,它采用由管道组成的通道与设备进行通信。设备驱动程序根据USBD创建所需的管道,并为其分配传输所需的缓冲空间。USB主控制器驱动USB主控制器驱动USB COREUSB设备驱动USB设备驱动图6 Linux下USB系统软件结构 USB的传输分为控制传输、中断传输、批量传输以及等时传输四种模式。对于时间性极强但是准确性不高的视频捕捉应用来说,摄像头应采用等时传输模式。Linux系统中,任何USB传输都需要通过URB(USB请求块)来实现。为了尽可能快地得到图像数据,需要加大URB的缓冲,这样可以降低每个USB事务中握手信息所占的比例,提高有效数据传输比例。由于每次USB传输都要包括URB的建立、发送、回收、数据整理,而在这些阶段中不产生有效数据,因此可建立两个URB交替工作,一个URB在等待回收时初始化另一个URB。获得图像的过程如图所示。图7 获得图像过程摄像头视频捕获程序的编写 摄像头属于视频类设备,遵循的标准为Video for Linux (V4L)标准。这个标准定义了一套API接口,内核、驱动、应用程序都以这个接口为标准进行交流。目前的V4L涵盖了音视频捕捉及处理等内容,也包括USB摄像头。 Linux系统中一般的文件操作是通过read、write等系统调用完成,但这些系统调用是通过内核态与用户态之间相互进行数据拷贝实现的。对于图像数据来说,进行拷贝必然会增加时间开销,因此需要使用内存映射的办法来加以解决。 首先应申请足够大的内核态内存作为图像数据缓存,将URB带来的数据暂存;然后将其用remap_page_range函数映射到用户态空间。这样,用户态空间的图像处理程序就可以使用mmap()函数,直接读写内核态帧缓冲区,减少了额外开销。要进行视频捕捉必须用到VIDIOCMCAPTURE 和VIDIOCSYNC这两个ioctl函数。VIDIOCGMBUF包含有所用缓冲器的设置与地址。VIDIOCMCAPTURE用于开始捕捉;VIDIOCSYNC用于等待捕捉完成。为加快数据处理速度,一般使用双缓冲设置,即buffer0捕捉数据时,buffer1传输数据;buffer1捕捉数据时,buffer0传输数据。 整个图像采集程序的流程图如图4所示。将采集到的图像保存为JPEG格式,然后调用Mplayer中的Mencoder编码器,即可将多幅JPEG文件合成一段视频流,实现视频回放。图8 图像采集程序的流程图图9 全屏视频图像显示图10 四分屏视频图像显示整个系统软件是在嵌入式Linux基础之上构建的。Sitsang板使用的嵌入式Linux内核是在linux-2.4.19内核上打上patch-2.4.19-sitsang2这个补丁后编译而成。Sitsang板使用的文件系统是针对Flash的无缓冲机制的jffs2文件系统,文件系统中包含应用程序、模块、配置文件、图形界面和库等。Sitsang板使用的是基于Qt/Embedded的图形界面系统。视频信号的采集、压缩和传输是建立在图形界面和嵌入式Linux内核之上的。整个软件系统如图2所示。系统的设计可以被分为以下几个大部分:1、嵌入式Linux内核的移植和编译,文件系统和图形界面系统的安装2、基于嵌入式Linux视频采集模块的设计3、视频图像压缩模块的设计4、基于嵌入式Linux的网络视频流服务模块的设计4.1.1 开发环境及开发工具系统在软件程序设计过程中使用了Linux开发环境,其是集项目管理编译程序、工具配置、编辑器、高效的调试器的IDE,本系统在软件编写时使用了高效的MCS-51汇编语言。 Linux仿真器是德国Linux公司出品的一款兼容单片机C语言和汇编语言的软件开发系统,它集编辑,编译,仿真等于一体,它是一款具有灵活、直观、可视化的开发软件,完全的Windows界面,界面友好,易学易用,是使用者更直观、更清晰的了解每一句程序所对应的单片机内部操作,这对开发者在开发过程中考虑内存和线路的分配很有帮助,同时在错的查找、执行过程中的数据查找等方面都变的简化了。同时Linux仿真器还提供了丰富的库函数和功能强大的集成开发调用工具。Linux它还支持众多不同公司的MCS51架构的芯片,在开发过程中可以给开发者更多的选择空间,多时在选择不同型号芯片的时候,他还会提供该芯片的相关信息介绍,这也是多开发者很有帮助的一个方面,因此很多开发51应用的工程师或普通的单片机爱好者,都对它十分喜欢Linux在安装运行后,可以首先要建立工程,在这一过程中最关键的是选择单片机的型号,在初学的时候经常会疏忽这一工作了造成不必要的麻烦。然后可以直接编写汇编.ASM文档了,保存之后工程里就可以直接调入进来,并构造目标文件了。它会自动完成编译的过程,这为我们省去了很多时间,如果通过了编译没有错误的话,我们就可以查看程序的仿真运行情况了。它为我们提供了更方便的查看模式,我们可以把原程序在汇编和机器语言间切换,而且我们还可以单步执行程序,能够清晰的看出在程序运行过程中,单片机每一个接口和存储器的工作情况,这也是对开发者最有利的方面。4.2视频采集模块的设计在嵌入式Linux的内核定制和编译阶段,已经加入了对Video4Linux模块以及OV511设备的支持,所以运行在Linux下的视频图像采集程序,可以通过Video4Linux模块提供的编译接口(API)从OV511设备中获取图像帧。1、 加载USB及OV511设备驱动模块,同时加载Video4Linux模块。分别使用命令:modprobeusbcor、modprobeusb-uhci、modprobevodeodev和modprobeov511。加载后将生成视频设备文件/dev/video0,为了和Video4Linux模块相协调,使用ln-s/dev/video0/dev/video为Video4Linux模块的默认视频设备voideo与物理视频设备video0建立连接。2、 使用Video4Linux模块提供的API进行视频采集程序的设计。Video4Linux模块的视频采集接口设备为/dev/video,采集程序打开此接口设备并扫描它以寻找自己所需要的数据。这里将简要介绍一下Video4Linux模块提供的主要API函数:VIDICGCAP函数以数据结构video_capability返回视频采集设备的性能参数;VIDIOCSFBUF函数使用数据结构video_buffer设备采集设备的帧缓存参数,如果设备不支持帧缓存则此调用无效;VIDIOCGWIN函数使用数据结构video_window来设备采集窗口参数,使用参数1调用VIDIOCCAPTURE则开始视频信号采集,使用参数0则结束采集;VDIOCGCHAN函数用来查询不同的采集通道(包括音频信道),使用数据结构video_channel返回通道属性;VIDIOCSPICT函数使用数据结构video_picture来获取和设置采集图像帧的属性,比较重要的是图像帧的调色板参数;read函数读取采集通道中效的下一帧图像,所读取的图像格式和尺寸由前面介绍的VIDIOCSPICT函数和VIDIOCGWIN函数决定,这些API函数以及数据结构定义在头文件中。4.3VideoLinux的图像采集 Video4Linux是Linux中关于视频设备的内核驱动,他为针对视频设备的应用程序编程提供一系列接口函数,在Linux下,视频采集设备的正常使用依赖于对Video4 Linux标准的支持。如果使用Video4Linux,在编译内核时,一定要选中Multimedia Devices下的Video for Linux选项,本文针对的设备文件是 / dev / video,使用的器件是基于OV511的USB摄像头。在运行程序前,一定要先加载USB及OV511设备驱动模块,同时加载Video4Linux模块,分别使用命令:modprobe usbcore,modprobe usbohci,modprobe videodev和modprobe ov511,以确保生成设备文件/dev/video,若使用的Linux操作系统不支持modprobe命令,也可使用insmod命令。一般来讲,基于Video4Linux的图像采集的程序流程如下图所示。 图11 基于Video4Linux图像采集程序的流程程序的编写,在这里只给出关键部分的实现代码。首先,必须声明包含2个头文件: #include #include 第一部分,设备的初始化: Int fd=open(“/dev/video”,()_RDWR); /*打开设备文件*/ Struct video_capability grab_capability; Ioctl(fd,VIDIOCGCAP,&grab_capability); /*获得struct video_capability中摄像头的信息*/ Struct video_picture grab_picture; Ioctl(fd,VIDIOCGPICT,&grab_picture); /*获得图像的信息*/在获取图像信息后,还可根据需要改变这些信息,例如对比度、亮度、调色板等,具体做法是先给video_picture中相应变量赋新值,再利用VIDIOCSPICT ioct1函数。 第2部分,使用mmap方式的单帧图象采集: struct video_mmap grab_buf; /*以下为设置图像帧缓冲区信息*/grab_buf.frame=0; /*一次只采集一帧*/grab_buf.height=240; /*图像高度*/grab_buf.width=320; /*图像宽度*/grab_buf.format=VIDEO_PALETTE_RGB24;/*图像的调色板格式,24位真彩色*/UNSIGNED CHAR * DATA=MMAP(0.240*320*3.PROT_READ|PROT_WRITE.MAP_SHARED.df.0) /*内存映射*/ioctl(fd.VIDIOCMCAPTURE.&grab_buf) /*采集图像*/然后调用ioct1(grab_fd,VIDIOCSYNC,frame)函数,该函数成功返回则表示采集完毕,采集到的图像数据放到以data为起始地址,长度为2403203的内存区域中,读取该内存中的数据便可得到图像数据。 在此基础上同样可实现连续帧的采集,即一次采集连续多帧图像的数据,Video4Linux最多支持一次采集32帧,此时首先要设置grab_buf.frame为要采集的帧数,而每一帧的数据在内存中的位置为datagrab_vm.offsetsframe,其中grab_vm为video_mbuf结构体变量的一个声明,利用ioct1(fd,VIDIOCGMBUF,grab_vm)便可获得grab_vm的信息。 4.4 FrameBuffer的图象显示 当Video4Linux使用mmap方式采集图像时,他总是尽最大努力将图像直接显示在屏幕上,但并不一定能够完成,因此一个完整的设备应该具有图像显示的功能,一般来讲,嵌入式Linux下显示一幅图像总共有以下几种方法: (1)在利用Video4Linux采集图像时,将采集到的图象数据直接放到FrameBuffer的内存映射区中,而Video4Linux也支持这种功能,利用VIDIOCSFBUF和VIDIOCGFBUF这两个ioct1函数,可设置和获得struct video_buffer。但该方法并不是每个图像采集设备都支持。 (2)进图像数据存成各种格式(例如bmp),在各种GUI软件中,均会直接显示不同格式的图像的函数,如MiniGui中的FillBoxWithBitmap函数。 (3)直接将图像数据写入FrameBuffer中。 在这里主要介绍第3种。FrameBuffer设备是运行在Linux控制台上的一个优秀的图形接口,他几乎支持所有的硬件,提供了统一的API接口,很好地实现了硬件无关性,他可以直接操作显存,而且还留有提供图形加速功能的接口,运行时不需要root权限;FrameBuffer的设备节点是/dev/fb,用户若要使用他,需要在编译内核时选中FrameBuffer,其简单的使用程序如下: struct fb_var_screeninfo vinfo;struct fb_fix_screeninfo finfo;int fb=open(“/dev/fb0”.O_RDWR);ioctl(fd.FBIOGET_FSCREENINFO.&finfo);ioctl(fd.FBIOGET_VSCREENINFO.&finfo);从vinfo和finfo中取得显存起始地址、分辨率、色深等信息,然后根据这些计算出需映射显存的大小。 scrccnsize=vinfo,xres*vinfo.yres*vinfo.bits_per_pixel/8;Char*fbp=mmap(0.screensize.PROT_READ|PR()T_WRITE.MAP_SHARED.fd.0);由此便可直接操作大小为screensize,起始地址为fbp的内存区域,在LCD上直接显示图像、图形、文字等,例如执行memset(fbp,0,screensize)将进行清屏操作。 需要注意的是,对于色深为8位或8位以下的设备,在进行绘图操作前还需要设置合适的调色板,操作调色板要用到fb_camp结构,执行ioctl(fd,FBIOGETCMAP,old_cmap)将保存调色板信息,执行ioctl(fd,FBIOPUTCMAP,new_cmap)将设置新的调色板。以下介绍如何显示一个象素,这里假设LCD为24位色的。 x=1

温馨提示

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

评论

0/150

提交评论