APP下载

机顶盒上搭建Linux的USB视频数据采集平台

2010-06-25于鸿洋

电视技术 2010年1期
关键词:源码机顶盒应用程序

巫 莉,于鸿洋,张 萍

(电子科技大学 电子工程学院,四川 成都 611731)

1 引言

Linux是一套自由软件,用户可以无偿地得到其源代码和大量的应用程序,并可以任意修改和补充[1],这样使得开发者可以更方便地开发机顶盒的功能,但是由于Linux本身各种软件的复杂的依赖性以及缺乏稳定完善的维护,Linux的开发不像Windows那么方便容易[2]。

通用串行总线(USB)具有易于使用、速度快、可靠性强、成本低等优点[3],在市场上已经广泛普及。USB摄像头的视频播放也越来越受欢迎。笔者首先介绍了采用的STi7109芯片的机顶盒的硬件及软件系统,然后阐述了在Linux上搭建USB摄像头视频数据采集平台的过程,同时也使读者对在Linux上怎样进行软件开发有更深的认识。

2 基于STi7109的机顶盒体系结构

2.1 硬件体系结构

本设计采用STMicrotronics公司最新的增强型高清多标准视音频解码芯片STi7109作为主芯片。STi7109在一个芯片上集成了2个频率为266 MHz的ST231CPU以及 VC-1,MPEG-2和 H.264视音频解码器,PAL/NTSC/SECAM编码器,1个16 kbyte的I-Cache和1个32 kbyte的D-Cache,传输过滤解扰、解复用模块,显示和图形引擎功能模块。STi7109拥有16个级别的中断控制器,定义了6个可扩展的8位可编程输入/输出端口(GPIO)。除MPEG-2外,该系统芯片解决方案还支持高清H.264/MPEG-4 AVC,以及MPEG-4 P2标清标准。其强大的视频解码能力为视频播放系统的实现提供了硬件条件。

STi7109开发板包含1个USB接口,支持USB2.0协议,支持高速USB设备。STi7109数字机顶盒硬件平台如图1所示。

图1 STi7109数字机顶盒硬件平台

数字信号流(包括公开的和加密的)通过缆线传输到高频头,通过芯片STb0468b处的QAM/QPSK解调处理,传输到STi7109集成芯片进行解复用和PES流分组解析,从而产生对应的视频信号和音频信号。

2.2 软件体系结构

STi7109的USB摄像头视频数据采集平台从软件的角度看,主要分为5个层次:Bootloader,Linux内核,文件系统,加载驱动模块和应用软件。STi7109平台上的软件系统如图2所示。

图2 STi7109平台上的软件系统

3 移植Linux下USB摄像头驱动

由于USB摄像头根据摄像头芯片的不同驱动也不同,在Linux内核上很少带有或几乎没有USB摄像头的驱动,需要自己开发安装。在开源项目中,spca5xx驱动以及后来的gspca驱动涵盖了大部分主流的摄像头驱动,但是也无法包含各种品牌的所有型号的摄像头。因此需要在熟悉USB摄像头驱动的情况下对驱动进行修改,并按照Linux上的特殊要求来完成对USB摄像头的安装。

下面介绍在Linux下怎样移植、安装USB摄像头驱动,并使其适用于自己的USB摄像头。

1)下载开源项目的USB摄像头驱动

笔者首先在CSDN下载频道上下载“gspcav120071224.tar.gz”。其次在 Linux 上的下载命令为“wget-c http∶//mxhaard.free.fr/spca50x/Download/gspca120071224.tar.gz”。最后解压驱动压缩包“tar zxvf gspca120071224.tar.gz”。

2)使USB摄像头驱动适合自己的摄像头

USB摄像头驱动直接相关的是USB摄像头芯片型号。在Windows下右键点击“我的电脑”-“管理”-“设备管理器”-“图像处理设备”选择摄像头设备双击,在“详细信息”一栏可以看到USB摄像头的UID和VID,也可以通过Linux下lsusb命令进行查看。笔者采用的是ID 0ac8∶307b的摄像头。通过分析USB摄像头驱动源代码判断是否适合自己的摄像头芯片。

进入 “gspca120071224”文件夹,其中最核心的是gspca_core.c文件以及gspca.h头文件。gspca_core.c包括设备注册、注销和各种操作方法集。gspca.h的主要内容有:(1)定义所支持的Vendor ID号;(2)对支持的DSP桥接控制芯片型号进行编号;(3)对支持的CMOS/CCD图像传感器型号进行编号。另外,还定义了图像格式相关的常量和数据结构(如色彩空间、调色板、图像分辨力等),帧数据结构,摄像头操作方法集等。

Conexant,EtomsSonix,PixArt,Vimicro 和 Sunplus 等文件夹中定义了各传感器相关的头文件。decoder文件夹中包含了对各种图像格式进行编解码的源代码。

通过查看gspca_core.c和gspca.h两个文件,发现使用的USB摄像头的Vendor ID,DSP芯片和image sensor已包含在其中。如果不在其中,则要定义DSP和sensor芯片的相应头文件,并在gspca.h中添加相应的设备信息,还要把摄像头加入到 gspca_core.c的摄像头设备列表中。

3)安装USB摄像头驱动于Linux系统

Linux下对于硬件驱动,可以将驱动程序静态编译进内核中,也可以将它作为模块在使用时再加载[4]。每块可以在运行时添加到内核的代码,被称为一个模块。Linux内核提供了对许多模块类型的支持,每个模块由目标代码组成[5]。

由于Linux中摄像头驱动必须要有(Video For Linux,V4L)的支持,V4L是Linux中关于视频设备的内核驱动,它为针对视频设备的应用程序编程提供一系列接口函数,因此必须先加载V4L相关的videodev.ko模块。USB设备也需要USB主控制器驱动,由于STi7109嵌入式系统提供了OHCI/EHCI的主控制器驱动模块,因此不需要另外加载。

在gspca驱动程序文件夹内包含了自动化编译的Makefile文件以及安装加载模块的脚本文件gspca_build,通过运行“./gspca_build”,即可完成对gspca驱动的安装,也可以根据自己的需要对Makefile和gspca_build进行修改。

安装USB摄像头驱动并在机顶盒上插上USB摄像头后,通过运行命令“lsmod|grep videodev”,看到videodev已经安装,运行命令“ls/dev|grep video”,看到“/dev”文件夹下有了video和video0两个文件,说明已经识别到了USB摄像头设备。

4 搭建USB摄像头视频信号采集平台

4.1 在Linux下安装GTK+库

GTK(GIMP Toolkit)是一套跨多种平台的图形工具包,目前已发展为一个功能强大、设计灵活的通用图形库,成为Linux下开发图形界面应用程序的主流开发工具之一。由于GTK+简单易用,拥有强大的功能和丰富的API,而且作为一个开放的自由软件,在Linux下已经发展得比较成熟,因此在Linux系统下可以使用GTK+库方便地对机顶盒的GUI进行开发。

由于Linux下各种源码具有很复杂的依赖性,因此首先需清楚安装GTK+所需要的条件。所需的源码包包括:GNU make工具,GNU gettext软件包(当系统上没有gettext()函数的时候需要),GNU libiconv 库(当系统上没有 iconv()函数的时候需要),fontconfig 库,FreeType 库,libpng库,jpegsrc库,tiff库,pkg-config工具,GLib 库,ATK库,Cairo库,Pango库和 GTK+库。

其中很多源码包在比较新的Linux版本系统都会自带。笔者主要安装了5个源码包,即GLib,ATK,CAIRO,PANGO和GTK。上面5个源码包由于其依赖性必须按从前到后的顺序依次安装。在Linux上进行源码安装很容易找不到需要的某个包或文件,编译出错。需要对Linux的系统原理有比较熟悉的认识,并且要仔细阅读README,install等文件,了解安装过程。

下面总结几个关系到能否成功编译的因素:1)默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件。如果安装了某些库,没有指定搜索路径,编译就会出错。此时可在“./configure”命令时指定“--prefix=/usr”,这样库文件就安装到了“/usr/lib”下,或是通过设置LD_LIBRARY_PATH 路径,添加“/usr/local/lib”路径,即没有指定安装路径时的库的安装位置,或者保存在“/etc/ld.so.conf”文件中,因为“/etc/ld.so.conf”文件记录了编译时使用的动态链接库的路径。2)改动库文件后一定要运行一下“ldconfig”命令,它的作用就是将“/etc/ld.so.conf”列出的路径下的库文件缓存到“/etc/ld.so.cache”以供使用。不然即使库文件就在“/usr/lib”下,也是不会被使用的。3)设定正确的 PKG_CONFIG_PATH。“pkg-config”是一个向configure程序提供软件和库的版本、路径等系统信息的程序,这些信息只在编译时使用。以GLib为例,如果将glib-2.x.x装到了“/usr/local/”下,那么glib-2.0.pc就会在“/usr/local/lib/pkgconfig”下,需要将这个路径添加到PKG_CONFIG_PATH下面,另外还需要将“lib/pkgconfig”目录下不需要的glib-2.0.pc删除掉,以确保configure找到正确的glib-2.0.pc,以免提示错误信息。

安装时可以把指令统一为:./configure--prefix=/usr&&make&&make install。其中&&表示当前一条命令正常结束,后面的命令才会执行。这个办法既节省时间,又可防止出错。运行完之后可以运行命令“echo$?”,表示检查上一条命令的退出状态,返回0表示程序正常退出,返回非0表示错误退出。注意到上面说的几个因素,每次安装完后运行一次ldconfig,安装过程中一般都会经过多次配置等改动。

4.2 应用GTK+库采集并显示视频数据

安装了GTK+库之后,就可以利用GTK+库提供的图形界面的API进行应用程序开发。笔者参考了camorama及spaview等Linux上的USB摄像头数据采集的应用程序。具体过程为在利用V4L提供的API获取到USB摄像头的视频图像数据后,再利用GTK+中的GDKPIXBUF库中的API函数来显示获取到的图像。GDKPIXBUF库是专门用于图像处理的,它支持多种图像格式(如TIFF,JPEG,PNG,GIF等)和动画。通过 GTK+的应用程序,在窗口中可查看到USB摄像头的视频图像。

5 小结

介绍了STi7109芯片为主芯片的机顶盒硬件平台及软件系统,介绍了安装配置USB摄像头驱动,利用GTK+库编写应用程序,搭建USB摄像头视频数据采集平台的整个过程。

本文主要在于过程方法的介绍,对于进一步功能的开发,如怎样用GTK+库来实现遥控器的控制等还有待进一步研究。主要创新点为使读者对怎样在Linux上进行机顶盒的开发有了更明确的认识,如对Linux上USB摄像头驱动开发、特殊的源码包联系性以及编译原理等都有了更深的理解。同时采用具有发展潜力的GTK+库来编写图形界面应用程序使图像采集过程更加人性化。该过程的方法也适用于其他嵌入式Linux的开发,具有很好的借鉴价值。

[1]王俊伟,吴俊海.Linux标准教程[M].北京:清华大学出版社,2006.

[2]胡宏平.基于数字电视机顶盒的嵌入式Linux操作系统的设计[J].电视技术,2005(8):52-54.

[3]AXELSON J.USB大全[M].陈逸,译.北京:中国电力出版社,2001.

[4]韦东山.嵌入式Linux应用开发完全手册[M].北京:人民邮电出版社,2008.

[5]CORBET J,RUBINI A,KROAH H G.Linux设备驱动程序[M].3版.魏永明,耿岳,钟书毅,译.北京:中国电力出版社,2005.

猜你喜欢

源码机顶盒应用程序
面向数据可靠传输的高译码率带反馈的LT码
国内一站式工程设备租赁平台众能联合完成C2、C3两轮融资
浅谈开源操作系统的历史
企业如何保护源码
机顶盒上别盖布
安全使用机顶盒注意五点
删除Win10中自带的应用程序
谷歌禁止加密货币应用程序
有线电视高清数字电视机顶盒测试系统的构建
What is Apple Watch All About?