首页 | Linux 基础 | 资讯动态 | Linux 应用 | Linux 服务器 | Linux 开发 | Linux 安全 | 专题 | 联盟论坛
  当前位置:主页>Linux 开发>Linux 嵌入式>文章内容
嵌入式Linux系统的图像采集与显示
来源:www.unix5.com 作者:riechelr_hl 发布时间:2007-05-26  

1 系统平台的硬件结构

本文使用的系统平台硬件功能框图如图1所示,该平台采用Samsung公司的处理器S3C2410。该处理器内部集成了ARM公司ARM920T处理器核的32位微控制器,资源丰富,带独立的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 16位的FLASH和64MB 32位的SDRAM,通过以太网控制器芯片AX88796扩展了一个网口,另外引出了一个HOST USB接口。在USB接口上外接一个带USB口的摄像头。另外,还配有分辨率为320×240,256色的LCD。

 

 

2 嵌入式Linux简介

Linux操作系统具有相当多的优点,他的内核稳定、功能强大、支持多种硬件平台、源代码完全开放,可裁减和低成本的特性非常适合于嵌入式应用,并且Linux本身直接提供完整的TCP/IP协议,可非常方便地进行网络应用。但Linux内核本身不具备强实时性,且内核体积较大,而且嵌入式系统的硬件资源有限,因此把Linux用于嵌入式系统,必须对Linux进行实时化和嵌入式化,即通过配置内核,裁减shell和嵌入式C库对系统定制,使整个系统能够存放到容量较小的FLASH中,Linux的动态模块加载,使Linux的裁减极为方便,高度模块化的部件使添加非常容易。

整个系统软件是在嵌入式Linux的基础上构建的。S3C2410平台使用的Linux内核是在Linux-2.4.18内核打上patch-2.4.18-S3C2410这个补丁后编译而成。S3C2410平台使用的文件系统是yaffs,文件系统包括应用程序、模块、配置文件和库等,图像的采集和显示是建立在嵌入式Linux内核之上的,整个软件系统如图2所示。

 

 
通常宿主机和目标板上的处理器不同,宿主机通常为Intel处理器,而目标板如图1所示为SAMSUNG S3C2410,所以程序需要使用针对处理器特点的编译器才能生成在相应平台上可运行的代码,GNU编译器提供这样的功能,在编译时,可以选择开发所需的宿主机和目标机,从而建立开发环境。在进行嵌入式开发前的第一步工作就是把一台PC机作为宿主机开发机,并在其上安装指定操作系统。对于嵌入式Linux,宿主机PC上应安装Linux系统。之后,在宿主机上建立交叉编译调试的开发环境,开发环境的具体建立这里不细谈。本文采用移植性很强的C语言在宿主机上编写视频采集程序,再利用交叉编译调试工具编译链接生成可执行代码,最后向目标平台移植。

3 基于Video4Linux的图像采集

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的图像采集的程序流程如图3所示。

 

 

以下简单介绍程序的编写,在这里只给出关键部分的实现代码。

首先,必须声明包含2个头文件:

 

 

在获取图像信息后,还可根据需要改变这些信息,例如对比度、亮度、调色板等,具体做法是先给video_picture中相应变量赋新值,再利用VIDIOCSPICT ioct1函数。

第2部分,使用mmap方式的单帧图象采集:

 

 

然后调用ioct1(grab_fd,VIDIOCSYNC,&frame)函数,该函数成功返回则表示采集完毕,采集到的图像数据放到以data为起始地址,长度为240×320×3的内存区域中,读取该内存中的数据便可得到图像数据。

在此基础上同样可实现连续帧的采集,即一次采集连续多帧图像的数据,Video4Linux最多支持一次采集32帧,此时首先要设置grab_buf.frame为要采集的帧数,而每一帧的数据在内存中的位置为data+grab_vm.offsets[frame],其中grab_vm为video_mbuf结构体变量的一个声明,利用ioct1(fd,VIDIOCGMBUF,&grab_vm)便可获得grab_vm的信息。

4 基于FrameBuffer的图象显示

当Video4Linux使用mmap方式采集图像时,他总是尽最大努力把图像直接显示在屏幕上,但并不一定能够完成,因此一个完整的设备应该具有图像显示的功能,一般来讲,嵌入式Linux下显示一幅图像总共有以下几种方法:

共2页: 上一页 1 [2] 下一页
 
如果您对本文有任何疑问或者建议,请到论坛讨论区发表您的意见: >> 论坛入口
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
  热点文章
·嵌入式Linux系统下图形库讲解及
·Qt/Embedded在嵌入式Linux中的应
·嵌入式Linux:uClinux操作系统移
·嵌入式系统 Boot Loader 技术内
·嵌入式 用户图形接口uC/GUI的简
·基于GTK+和X的GUI在嵌入式Linux
·嵌入式Linux系统下的MiniGUI研究
·Linux串口上网的简单实现 (图解)
·在Ubuntu上建立Arm Linux的开发
·嵌入式Linux操作系统启动信息完
·Linux 2.6 内核的嵌入式系统应用
·嵌入式Linux在Blackfin处理器上
  相关文章
·主流嵌入式Linux系统下GUI解决方
·教你一种实现嵌入式Linux系统新
·关于嵌入式Linux系统进程调度的
·嵌入式Linux系统的GDB远程调试的
·基于μClinux的SoPC应用系统设计
·细看嵌入式Linux时代发展
·嵌入式系统 Boot Loader 技术内
·嵌入式程序员应知道的几个基本问
·Linux 2.6 内核的嵌入式系统应用
·基于嵌入式Linux平台的多协议路
·嵌入式Linux在Blackfin处理器上
·精华:学习嵌入式Linux的笔记和

本站信息源至:互联网络,均为学习,交流所用,如有版权问题,请联系我们.
站长QQ:397422079 E_mail:riechelr_hl@unix5.com
转载本站内容请注明原作者名.谢谢!