基于嵌入式Linux的USB视频信号采集的研究
2010-10-27黄晓乾湖南交通工程职业技术学院421001
黄晓乾 湖南交通工程职业技术学院 421001
基于嵌入式Linux的USB视频信号采集的研究
黄晓乾 湖南交通工程职业技术学院 421001
基于ARM体系的RISC设计思想,给出了基于ARM处理器的USB摄像头视频播放器的设计方案。通过基于三星公司的S3C2410A作为图像处理和中央控制芯片硬件平台上配置嵌入式Linux操作系统,并将Linux上编译好的视频采集程序镜像移植到硬件平台上,来采集连接在USB接口上的USB摄像头,并显示在与S3C2410A相连接的液晶显示器上。
embedded Linux operating system;USB camera head
1. 引言
随着图像压缩技术的进步,特别是MPEG-I、MPEG-II图像压缩芯片的大量推广应用,2000年至今,数字图像采集产品进入了一个快速发展时期,产品也由原来的数字监控录像主机发展到网络摄像机、网络传输设备、电话传输设备、专业数字硬盘录像机等多种产品。无论是从国家战略的高度还是从国民生产的具体需要,都需要研制新一代的视频采集系统,而超大规模集成电路和嵌入式软硬件技术的迅猛发展,为我们找到了一种解决问题的新思路,即研制嵌入式结构的视频采集系统。
2. 系统总体构成
视频采集系统的应用主要包括前端采集用的通用产品(有镜头、CCD摄像机、云台、报警开关等)和后端的控制系统(主要包括主机控制设备、视频采集卡、视频压缩卡、解码器、总控设备和图像采集软件系统)。
嵌入式系统一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成[1],如图1所示,用于实现对其他设备的控制、监视或管理等功能。嵌入式系统的组成软硬兼施,互利互惠,融为一体,成为产品。芯片加软件成为产品,但要开发工具辅助进行开发。
图1 嵌入式系统体系结构
3. 硬件系统总体设计
由于嵌入式系统的高速处理特性以及在图像信号处理中的优势和其它方面如技术支持和设备条件等原因,选用了三星公司的S3C2410A作为图像处理和中央控制芯片。整个硬件电路功能框图如图2所示。
本设计的视频信号采集系统硬件电路,主要是要在满足视频信号数据时序要求严格、数据量大、采集速度快等特点的情况下,保证数据能够稳定可靠的采集并实现压缩,最后传输给计算机作进一步处理。
图2 系统硬件框图
3.1 S3C2410处理器模块
主控制器模块是整个系统的核心,采用的S3C2410处理器是Samsung公司基于ARM920T处理器核的16 /32位微控制器[3],该处理器最高运行频率可达到203 MHz,它的低功耗、精简和全静态设计特别适合于对成本和功耗敏感的应用。S3C2410提高了丰富的片内资源,支持Linux操作系统,是本系统的合适选择。它能完成整个系统的调度工作,在系统上电时配置所需要工作的芯片的功能寄存器,完成视频流的编码。
3.2 系统存储电路模块
主控制器还需一些外围存储单元,如Nand Flash和SDRAM。Nand Flash中包括Linux的Boodloader、系统内核、文件系统、应用程序以及环境变量和系统配置文件等。SDRAM是运行操作系统及各类数据的缓存。设计采用了 64M的Nand Flash和64M的SDRAM。
3. 3 外围电路模块
设计中还需要用到的外部设备包括USB接口、RS232接口和JTAG接口。通用串行总线(USB)设备控制器设计用DMA接口提供一个高性能完备的速率功能控制解决方案[3],视频监控终端的USB主控制器模块通过专用的USB集线器与USB摄像头相连。在实时监控状态下,各个摄像头上捕获的图像数据通过USB集线器传输到视频监控终端的USB主控制器模块上,然后再由USB主控制器模块交由S3C2410处理器集中处理。S3C2410对采集到的图像进行实时编码压缩,编码之后的码流直接传输到发送缓冲区中,等候发送。
S3C2410A可以很方便地用UART实现RS232串口功能,但S3C2410A的供电电压为1.8V/3.3V,所以I/O口的最大逻辑电平也是3.3V,要实现RS232串口功能还要加电平转换电路,故用MAX3232来实现这一功能。
JTAG接口[4]是一个业界标准,主要用于芯片测试和配置等功能,使用IEEE Std 1149. 1 联合边界扫描接口引脚[5]。现在JTAG接口还常用于芯片的在线配置,对PLD、Flash 等器件进行配置。为了完成系统的调试, 任何原型系统都支持J TAG配置方式,因而J TAG配置也就成为最广泛支持的配置方式。
4 系统的软件设计
嵌入式系统的软件和硬件往往只需针对某种特别的应用定制,因此嵌入式操作系统需要量体裁衣,除去冗余,同时尽可能发挥系统的潜力。Linux具有许多优点,如开放源码;功能强大的内核,支持多用户、多线程、多进程、实时性好、功能强大稳定,大小功能可定制,支持多种体系结构。
嵌入式Linux的软件设计流程如图3所示,其中的主要内容包括:
(1)在硬件上搭建一个软件平台,搭建嵌入式Linux软件开发平台需要完成启动程序Bootloader移植、嵌入式Linux操作系统内核移植以及嵌入式Linux操作系统的设备驱动程序的开发等工作。
(2)在软件平台的基础上,开发系统的应用程序。
图3 嵌入式Linux软件设计流程图
4.1 配置嵌入式Linux系统
Linux对每一个外围的物理设备,统一抽象定义为字符设备、块设备或者网络接口,可以按照规范开发驱动程序,加载成一个模块而装入内核中,通过虚拟文件系统(VFS)等方便的管理和维护。
在Linux 2.6 内核下进行内核编译的基本步骤如下:
(1)键入命令make menuconfig,对内核进行配置,选择YAFFS文件系统,支持NFS启动,系统使用的是USB接口的摄像头,故要启动USB 设备支持模块,包括USB设备文件支持模块、USB主控制器驱动模块等。此外USB摄像头属于视频设备,为了使应用程序能够访问它,还需要启动Video4Linux2模块。
(2)用make dep命令生成内核程序间依赖关系。
(3)Make zlmage命令生成内核映像文件。
(4)Make modules 和make modules_ install命令生成系统可加载模块。
这样就生成了zlmage内核映像文件,把它下载到目标平台的flash中。
4.2 视频采集程序开发
Linux 2.6 内核中的视频子系统Video4Linux2为视频应用程序提供了一套统一的应用程序编程接口 (Application Programming Interface,API)。通过Video4Linux2 API 进行编程,来实现图像的采集流程图如图4所示。
图4 采集程序流程图
USB摄像头采集到的视频数据可以直接输出到显示器,我们通过VIDIOC_S_WIN IOCTL为视频输出设备设置视频窗口的位置和大小。在VIDIOC_S_WIN IOCTL中设置的显示窗口宽度和高度与视频采集设备设置的VIDIOC_S_FMT IOCTL中的值一致。
5. 结论
本文针对USB摄像头,通过基于ARM体系的RISC设计思想,在嵌入式Linux上调用Video4Linux2 APIs编程实现USB摄像头视频采集功能。由于Linux良好的移植性,且程序的主要部分是通过调用Video4Linux2 API函数实现,使得只需要对程序源代码稍加修改,进行交叉编译后就能移植到其他USB摄像头的嵌入式系统中使用。该系统将图像采集、图像处理、图像显示集成在一起,实用性强,在很多领域都具有应用性(如可视电话、多媒体IP电话等手持式或便携式图像处理设备)和研究价值。
[1] 何加铭主编. 嵌入式32位微处理器系统设计与应用. 电子工业出版社. 2006年
[2] 杨继华,严国萍. 基于嵌入式Linux与S3C2410平台的视频采集. 单片机与嵌入式系统应用. 2004,11:69-71
[3] 黄大勇,李鉴,张建正. 基于USB 2.0 接口的高速数据采集系统设计[J].现代电子技术.2007,30 (24):69 - 72
[4] SUMSUANG ELECTRONICS.S3C2410X user’s manual[Z]. Republic of Korea: Sumsang,2003,1-160
[5] IEEE Std. 1149.1-2001 ,Test Access Port and Boundary Scan Architecture,IEEE .2001
[6] 赵永勇,张永健. 基于Video4Linux的视频图像采集实现. 电脑编程技巧与维护[J].2006.5: 75-77
The RISC design concept based on ARM system gives the the ARM rocessor-based USB camera, video player design. That works as : to configure an embedded Linux operating system on a hardware platform which has Samsung's S3C2410A-based image processing and central control as the chip, and transplant Linux-compiled Video Capture program image to the hardware platform to collect USB camera head connected to the USB port, then show on the LCD screen which is connected with the S3C2410A.
嵌入式Linux系统;USB摄像头