ARM9+Linux下USB摄像头图像采集
作者:workhorse
折腾一周多,终于实现了在Micro2440+Linux2.6.29环境下通过NFS文件系统实现USB摄像头图像采集。在此,做一个总结,以备后续参考。
实验条件:Redhat9.0(内核版本2.4.18),Micro2440开发板,Linux2.6.29(arm9),ANC (Vimicro Corp.) USB PC摄像头,GCC,SDL-1.2.14.tar,servfox-R1_1_3[1].tar,spcaview-20061208[1].tar。
一、升级Redhat9.0内核
由于Readhat9.0内核版本是2.4,很多内核驱动未包含其中,尤其是USB万能摄像头GSPCA和UVC。升级方法参考:《redhat9.0如何升级内核?》——红联Linux门户。
二、配置编译Micro2440上运行内核
重新编译Micro2440上运行的内核,配置V4L和USB驱动。选择linux-2.6.29中的config-mini2440为参考,执行:cp config-mini2440 .config;然后make menuconfig ARCH=arm CROSS_COMPILE=arm-linux-;出现相应的图形化配置窗口。
如果需要在Linux操作系统中使用USB摄像头进行视频数据采集,则必须在进行内核配置时,应检查Linux 内核中是否已经添加了对Video4Linux驱动和对USB摄像头驱动模块的支持。
利用Linux内核配置make menuconfig命令对Video4Linux支持驱动进行配置,选中多媒体设备选项“Multimedia device->”(如图15-1所示)按回车,进入多媒体设备配置界面。在多媒体配置界面中,选中“Video For Linux”,就可以使内核实现对Video4Linux驱动的支持,为视频采集设备提供编程接口。
配置好内核对Video4Linux驱动后,返回内核配置主界面,选中USB支持选项(如图15-3 所示)“USB support—>” 按回车,进入USB支持配置界面
配置完成后,执行make uImage ARCH=arm CROSS_COMPILE=arm-linux-。完成后,uImage就生成在arch/arm/boot/中。通过uboot下载uImage到内存中,启动内核,实现NFS起文件系统。
三、安装S L-1.2.14
因为在redhat9.0中显示视频图像,调用spcaview(后面介绍)需要有SDL库的支持,否则会报错。所以,将SDL-1.2.14.tar下载传送到系统中,解压后执行.configure;make;make install。完成 的安装。
四、
五、
解压:tar xvf SDL-1.2.13.tar.tar
配置:./configure
编译:make
安装:make install
进入spcaview解压目录修改Makefile中的修改Makefile中的SDLLIBS =$(shell sdl-config --libs) 和 SDLFLAGS = $(shell sdl-config --cflags),这两句主要是指定了SDL库的库路径和编译选项。Make之后生成spcaview,在客户端运行spcaview –w 服务器ip:服务器端口号。就可以采集图像了,
[root@jxboylj spcaview-20061208]# ./spcaview -g -w 10.103.4.211:7070
Spcaview version: 1.1.7 date: 06:11:2006 (C) [email protected]
using Server 10.103.4.211 Port 7070
六、测试
将新编译的内核加载到ARM上,通过NFS文件系统运行servfox :
# ./servfox -d /dev/video0 -g -s 640x480 -w 7070
servfox version: 1.1.3 date: 11:12:2005 (C) [email protected]
wrong spca5xx device
Waiting .... for connection. CTrl_c to stop !!!!
Got connection from 10.103.4.216
在redhat9.0中执行spcaview:
[root@jxboylj spcaview-20061208]# ./spcaview -g -w 10.103.4.211:7070
Spcaview version: 1.1.7 date: 06:11:2006 (C) [email protected]
using Server 10.103.4.211 Port 7070
此时,视频能在redhat9.0窗口中显示,如图所示。
七、总结
在实现图像采集的过程中,碰到很多问题,尝试过很多方法,走了很多弯路,虽然很多碰壁,但也有不少收获。
编译内核:尝试编译高版本的内核,或者编译新内核的时候,最好选择和现有的配置文件相近的系统的配置文件作为参考。在原有基础上增加一些模块,编译,然后试验。如果一次性增加模块过多,容易造成编译错误等问题。
编译工具:在编译某些插件的时候,如:servfox、spcaview等,经常会报一些文件未定义、库不存在等错误,一般是由于系统缺少相应的库文件,需要下载安装,如SDL,或者由于系统本身版本不匹配,库文件安装位置不符造成。熟练运用goole、百度进行搜索,找到问题解决方法。同时,很多工具、库、插件等在开源社区网站都有稳定版本下载,使用这些网站提供的版本可靠性更好。
重点难点:makefile、kconfig等文件的书写,kit工具使用等。
}