ARM基于Linux系统下的视频监控(初步)

    技术2022-05-20  38

    注:此文是转的别人的,出处已忘,如果您知道出处,请告知,尊重原创。

     

     

     在内核汇中添加摄像头驱动

    一、移植gspcav1-20071224gspcav1-20071224 下载地址:http://www.slackware.com/%

    7Ealien/slackbuilds/gspcav1/build/gspcav1-20071224.tar.gz

    FS2410开发板上移植的是Linux-2.6.22.6内核,USB及CS8900A均能工作,由于linux-

    2.6.22.6/drivers/usb 目录下没有 media 目录,故移植步骤如下:

    步骤一、在 linux-2.6.22.6/drivers/usb 目录下新建 media 目录,将gspcav1-20071224.tar.gz copy

    到 media 下并解压。

    步骤二、为了使media 编译进内核,需修改linux-2.6.22.6/drivers/usb 目录下的Kconfig、Makefile

    文件。[linux@weijing usb]$ pwd/work/kernel/linux-2.6.22.6/drivers/usb

    [linux@weijing usb]$ vi Kconfig添加source "drivers/usb/media/Kconfig"

    [linux@weijing usb]$ vi Makefile添加obj-$(CONFIG_USB_SPCA5XX)        += media/

    步骤三、为加载gspcav1-20071224驱动编译选项,在 media 下新建 Kconfig、Makefile 文件。

    [linux@weijing media]$ pwd/work/kernel/linux-2.6.22.6/drivers/usb/media[linux@weijing media]$ vim Kconfig

    ## USB Multimedia device configuration#comment "USB Multimedia devices"        depends on USB

    config USB_SPCA5XX        tristate "USB SPCA5XX Sunplus/Vimicro/Sonix jpeg Cameras"        depends on USB && VIDEO_DEV        ---help---          Say Y or M here if you want to use one of these webcams:

              The built-in microphone is enabled by selecting USB Audio support.

              This driver uses the Video For Linux API. You must say Y or M to          "Video For Linux" (under Character Devices) to use this driver.          Information on this API and pointers to "v4l" programs may be found          at <file:Documentation/video4linux/API.html>.

              To compile this driver as a module, choose M here: the          module will be called spca5xx.

    [linux@weijing media]$ vim Makefile## Makefile for USB Media drivers#

    obj-$(CONFIG_USB_SPCA5XX)   += gspcav1-20071224/

    步骤四、修改 gspcav1-20071224 的 Makefile

    [linux@weijing gspcav1-20071224]$ pwd/work/kernel/linux-2.6.22.6/drivers/usb/media/gspcav1-20071224[linux@weijing gspcav1-20071224]$ vi Makefile

    gspca-objs := gspca_core.o decoder/gspcadecoder.oobj-$(CONFIG_USB_SPCA5XX) += gspca.o

    clean:        rm -f *.[oas] .*.flags *.ko .*.cmd .*.d .*.tmp *.mod.c         rm -rf .tmp_versions

    步骤五、编译内核(1)Device Drivers   --->            Multimedia devices   --->  [*]Enable Video For Linux API 1 (DEPRECATED)                <*>Video For Linux     [*]video capture adapters --->        [*]V4L USB devices --->(2)Device Drivers   --->            USB support   --->                <*>Support for Host-side USB              --- USB Host Controller Drivers                 <*>OHCI HCD support              --- USB Multimedia devices                <M>USB SPCA5XX Sunplus/Vimicro/Sonix jpeg Cameras

    此时,可能会提示 drivers/usb/media/gspcav1-20071224/gspca_core.c 的一些轻微错误,稍作修改即

    可://static const char gspca_version[] = GSPCA_VERSION;static const char gspca_version[] = "00.60.00";编译内核及内核模块 make uImage modules 把uImage拷到交叉编译的内核下载文件架中生成的内核模块/drivers/usb/media/gspcav1-20071224/gspca.ko文件拷到交叉编译的文件系统的任意文

    件夹如/tmp然后在板上安装模块 insmod gspca.ko

    插上usb摄像头出现如下信息:# usb 1-1: new full speed USB device using s3c2410-ohci and address 3usb 1-1: configuration #1 chosen from 1 choicedrivers/usb/media/gspcav1-20071224/gspca_core.c: USB GSPCA camera found.(ZC3XX)drivers/usb/media/gspcav1-20071224/gspca_core.c: [spca5xx_probe:4276] Camera type JPEGdrivers/usb/media/gspcav1-20071224/Vimicro/zc3xx.h: [zc3xx_config:638] Find Sensor PB0330.

    Chip revision 0drivers/usb/media/gspcav1-20071224/gspca_core.c: [spca5xx_getcapability:1250] maxw 640 maxh

    480 minw 160 minh 120说明移植的驱动已经能识别设备,如果udev安装好的话,设备名所在路径 /dev/video0。

    到此内核加载驱动完成,但这样需要每次启动都手动安装模块。(把驱动编译进内核会有问题,问题未解

    决)

    安装好驱动后就可以使用测试程序mouse_capture进行抓图了把mouse_capture-daily3文件夹的mouse_capture拷到网络文件系统下 /opt/filesystem/tmp然后在板上运行./mouse_capture就可以自动抓拍到一张图片1.jpg存放在/tmp目录下这时可以通过从虚拟机的ubuntu界面进入网络文件系统的tmp目录下查看该图片。

     

    移植servfox

    修改Makefile文件为:

    CC=arm-linux-gnu-gcc

    SERVFLAGS= -O2 -DLINUX $(WARNINGS) -I/home/yuaf/linux-2.6.22.6/include(I地址填你的内核的

    include文件夹位置)

    然后make一下,在当前文件夹下就可以看到生成的可执行文件 servfox,把此可执行文件拷贝到网络文件

    系统下 /opt/filesystem/bin

    在开发板中运行 servfox -d /dev/video0 -s 640x480 -w 7070(7070为服务器端口号),就可以看到如下

    的提示信息:

    # ./servfox -d /dev/video0 -s 640x480 -w 7070 servfox version: 1.1.2 date: 07:10:2005 (C) mxhaard@magic.frdrivers/usb/media/gspcav1-20071224/gspca_core.c: [gspca_set_isoc_ep:946] ISO EndPoint found

    0x81 AlternateSet 7drivers/usb/media/gspcav1-20071224/gspca_core.c: [spca5xx_do_ioctl:2125] Bridge ZC301-2drivers/usb/media/gspcav1-20071224/gspca_core.c: [gspca_set_isoc_ep:946] ISO EndPoint found

    0x81 AlternateSet 7Waiting .... for connection. CTrl_c to stop !!!!说明servfox视频服务器已成功运行起来了。

    ubuntu上安装spcaview

    编译ubuntu上的spcaview.由于此软件包依赖与libsdl,所以在安装spcaview之前,必须要安装 SDL-

    1.2.14.

    解压源码包:  tar zxvf SDL-1.2.14.tar.gz

    安装源码包:  cd SDL-1.2.14

    运行 ./configure 文件

    编译文件 make

    安装文件 sudo make install

    在安装的过程中,注意安装的路径,可以通过查看配置文件获得安装路径或者修改路径。

    安装spcaview软件:

    把spcaview-20061208文件夹拷到ubuntu中

    cd spcaview-20061208

    make

    sudo make install

    ok啦,在源文件目录上,可以看到三个可执行文件,spcacat spcaserv spcaview

    spcacat 简单图片的抓取工具,不能用于网络监视客户端。

    Spcaserv shi 流媒体服务器,

    Spcaview 工具是用来纪录数据流,也能用来播放数据,也能作为网络监视客户端用。

    我们可以在ubuntu上运行:

    ./spcaview -g -w 192.168.7.103(IP为板子IP)即可在电脑上看到视频了注意:运行上述行时,驱动模块gspca.ko必须已经装上且servfox已经在板上跑起来。

    如果出现“ warning:  Clock skew detected.  Your build may be incomplete.”的警告而引起的

    SDLinit错误,在SDL的安装目录下把SDL下载。命令:sudo make uninstall;即可

     

     

    移植boa

    1.下载Boa源码

    下载地址: http://www.boa.org/

    最新发行版本: 0.94.13

    下载 boa-0.94.13.tar.gz

    解压:# tar xzf boa-0.94.13.tar.gz

    2.安装需要工具bison,flex

    sudo apt-get install bison flex

    否则会出现如下错误

    make: yacc:命令未找到       make: *** [y.tab.c] 错误 127

    make: lex:命令未找到       make: *** [lex.yy.c] 错误 127

    3.修改文件

    (1)修改 src/compat.h

    找到

    #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff

    修改成

    #define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff

    否则会出现错误:

    util.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing token make:

    *** [util.o] 错误 1

    (2)修改 src/log.c

    注释掉

    if (dup2(error_log, STDERR_FILENO) == -1) {                         DIE("unable to dup2 the error log");                   }

    为:

    /*if (dup2(error_log, STDERR_FILENO) == -1) {                         DIE("unable to dup2 the error log");                   }*/

    否则会出现错误:

    log.c:73 unable to dup2 the error log:bad file descriptor

    (3)修改src/boa.c

    注释掉下面两句话:

    if (passwdbuf == NULL) {        DIE(”getpwuid”);        }        if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {        DIE(”initgroups”);        }

    #if 0        if (passwdbuf == NULL) {        DIE(”getpwuid”);        }        if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {        DIE(”initgroups”);        }        #endif

    否则会出现错误:boa.c:211 - getpwuid: No such file or directory

    注释掉下面语句:

    if (setuid(0) != -1) {                        DIE(”icky Linux kernel bug!”);        }

    #if 0         if (setuid(0) != -1) {                        DIE(”icky Linux kernel bug!”);                }

    #endif

    否则会出现问题:boa.c:228 - icky Linux kernel bug!: No such file or directory

    4、生成Makefile文件

    执行:

    #cd boa-0.94.13/src#./configure

    5、修改Makefile

    vim Makefile

    修改CC = gcc 为 CC = arm-linux-gnu-gcc

    修改CPP = gcc -E 为 CC = arm-linux-gnu-gcc -E

    6、编译

    makels -l boa-rwxr-xr-x 1 david david 189223 2009-05-31 13:44 boa

    然后为生成的二进制文件boa瘦身

    arm-linux-gnu-strip boals -l boa-rwxr-xr-x 1 david david 61052 2009-05-31 13:51 boa

    可以发现boa的大小前后差距很大这为我们节省了很大的空间

    7、Boa的配置

    这一步的工作也在电脑主机上完成。

    回到boa-0.94.13目录下,有一个boa.conf文件,进行修改如下:

    #vi boa.conf

    (1)Group   user的修改

    改User nobodyGroup nogroup为 user 0Group 0

    (2)AccessLog修改

    屏蔽AccessLog /var/log/boa/access_log为#AccessLog /var/log/boa/access_log

    否则会出现错误提示:“unable to dup2 the error log: Bad file descriptor”

    (3)ServerName的设置

    打开#ServerName www.your.org.here为ServerName www.your.org.here否则会出现错误“gethostbyname::No such file or directory”

    (4)DoucmentRoot的修改

    修改DoucmentRoot /var/www为DoucmentRoot /www

    (5)ScriptAlias的修改

    改ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/为 ScriptAlias /cgi-bin/ /www/cgi-bin/

    以下配置和boa.conf的配置有关,都是在ARM根文件系统中创建

    以下步骤在开发板上进行:

    创建目录/etc/boa并且把boa 和 boa.conf拷贝到这个目录下

    mkdir /etc/boa

    创建HTML文档的主目录/www

    mkdir /www

    创建CGI脚本所在录 /www/cgi-bin

    mkdir /www/cgi-bin

    以下步骤在ubuntu下进行:

    将boa.conf和boa拷贝到开发板根文件系统的/etc/boa下

    #cp boa.conf src/boa /opt/filesystem/etc/boa

    将ubuntu下/etc/mime.types拷贝到开发板根文件系统的/etc下

    #cp /etc/mime.types /opt/filesystem/etc

    启动boa

    cd /etc/boa

    ./boa当提示以下信息时说明boa已经成功启动。# ./boa[01/Jan/1970:00:20:55 +0000] boa: server version Boa/0.94.13[01/Jan/1970:00:20:55 +0000] boa: server built Feb 23 2011 at 10:45:42.[01/Jan/1970:00:20:55 +0000] boa: starting server pid=794, port 80

    把spcaview目录中的http-java-applet文件夹拷贝到网络文件系统的/www目录下

    设置/www/http-java-applet下文件的权限

    cd /opt/filesystem/www/http-java-applet/

    chmod 777 *

    想要在windows下通过网页看视频还要安装支持windows的jre的exe文件如可从网上下载安装jre-6u4-windows-i586-p.exe

    安装完之后,就可以在windows的浏览器下输入:

    http://192.168.7.103/http-java-applet/index.html这时就能看到摄像头的视频了。

    注意:在执行上述行时gspca.ko必须已经装上且能识别摄像头。板上的,boa已经启动,servfox已经启动

     

     

     

     


    最新回复(0)