Chinaunix首页 | 论坛 | 博客
  • 博客访问: 365967
  • 博文数量: 242
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 1134
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-20 10:53
文章分类

全部博文(242)

文章存档

2015年(1)

2014年(10)

2013年(18)

2012年(213)

分类:

2012-11-07 10:20:45

 
 采用的是:servfox+spcaview(要用http-java-applet)+boa的方法。 集合一下网上的资料和实际情况总结一下:

板上内核版本:linux-2.6.28.6(版本稍有不同也可以)

交叉编译工具:arm-linux-gcc 4.5.1

boa-0.94.13.tar.gz,servfox-R_1_1_2.tar.gz,spcaview-20061208.tar.gz

 boa-0.94.13.tar.zip    servfox.rar    spcaview-20061208.tar.zip   

1。先移植boa,制作嵌入式web服务器

解压boa后进入src目录 ./configure,

修改Makefile,找到CC=gccCPP=gcc -E将其改为交叉编译器安装的路径CC=arm-linux-gccCPP=arm-linux-gcc -E 并保存退出。

make;

其中make的过程中可能会遇到一些错误··

错误1:

  debian:/home/a/boa-0.94.13/src# make

  yacc -d boa_grammar.y

  make: yacc: Command not found

  make: *** [y.tab.c] Error 127

  解决方法:

  debian:/home/a/boa-0.94.13/src# apt-get install bison

错误2:

  debian:/home/a/boa-0.94.13/src# make

  lex boa_lexer.l

  make: lex: Command not found

  make: *** [lex.yy.c] Error 127

  解决方法:

  debian:/home/a/boa-0.94.13/src# apt-get install flex

错误3:

  debian:/home/a/sss/boa-0.94.13/src# make

  gcc -g -O2 -pipe -Wall -I. -c -o util.o util.c

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

  make: *** [util.o] Error 1

  解决方法:

  修改 src/compat.h

  找到

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

  修改成

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

  然后

  debian:/home/a/sss/boa-0.94.13/src# make clean

  debian:/home/a/sss/boa-0.94.13/src# make

最后 # arm-linux-strip boa 去掉调试信息。

Boa的配置

    修改boa的主要配置文件boa.conf

1Group的修改

修改 Group nogroup和User nobody为

User root

Group root

这样也行,关键是看你的/etc/group文件中是否有这个组和这个组中是否有这个用户。

2ScriptAlias的修改

修改 ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

ScriptAlias /cgi-bin/ /var/www/cgi-bin/

3ServerName的设置

修改 ServerName

ServerName

    注意:该项默认为未打开,执行Boa会异常退出,提示“gethostbyname::No such file or directory,所以必须打开。其它默认设置即可。

boa.conf的控制文件中可以设置 ErrorLog /etc/console这样错误信息,就可以马上输出到控制台上了,其实我移植的时候,这些都是默认的。若在移植的过程中出现:

boa.c:266.icky Linux kernel bug!:No such file

解决该问题的方法是将boa.c文件中以下几行判断去掉即可。

if (setuid(0) != -1) {

    DIE("icky Linux kernel bug!");

}

Boa的执行

成功配置以后,还需要创建日志文件所在目录/var/log/boa,创建HTML文档的主目录/var/www,将静态网页存入该目录下(可以将主机/usr/share/doc/HTML/目录下的index.html文件和imges目录复制到/var/www目录下),创建CGI脚本所在录/var/www/cgi-bin,将cgi的脚本存放在该目录下。另外还要将mime.types文件复制/etc目录下,通常可以从linux主机的/etc目录下直接复制即可。

实际运行时,可以将boa.conf文件、index.html文件、img目录和mime.types文件放到CF卡目录下,建立目录后,拷贝至相应目录。

    制作run.sh

mkdir /etc/boa

cp /cf/boa/boa.conf /etc/boa/

mkdir /var/log

mkdir /var/log/boa

mkdir /var/www

cp /cf/boa/index.html /var/www/

cp -r /cf/boa/imges /var/www/

mkdir /var/www/cgi-bin

cp /cf/boa/mime.types /etc/

cp /cf/boa/boa /

./boa &

直接在浏览器中输入(开发板的IP地址),出现Fedora的欢迎网页。静态HTML调试成功。

 

2.servfox的移植 采集摄像头数据

解压servfox,修改Makefile,第二行的-I 跟的是内核源码的头文件目录

CC=arm-linux-gcc

SERVFLAGS= -O2 -DLINUX $(WARNINGS) -I /usr/src/linux-headers-2.6.32-21-generic/include

再修改spcav4l.c,将蓝色字部分都注释掉,否则移植到板上会出现"Not a JPEG webcam sorry Abort "或者“could't set video palette Abort" 错误

/* Only jpeg webcam allowed */
/*if(vd->cameratype != JPEG) {
exit_fatal ("Not a JPEG webcam sorry Abort !");
}*/

   if(debug) printf ("StreamId: %d Camera\n", vd->cameratype);
/* probe all available palette and size Not need on the FOX always jpeg
   if (probePalette(vd ) < 0) {
   exit_fatal ("could't probe video palette Abort !");
   }
   if (probeSize(vd ) < 0) {
   exit_fatal ("could't probe video size Abort !");
   }

err = check_palettesize(vd);
if(debug) printf (" Format asked %d check %d\n",vd->formatIn, err);
*/

vd->videopict.palette = vd->formatIn;
vd->videopict.depth = GetDepth (vd->formatIn);
vd->bppIn = GetDepth (vd->formatIn);

   //vd->framesizeIn = (vd->hdrwidth * vd->hdrheight * vd->bppIn) >> 3; // here alloc the output ringbuffer
   vd->framesizeIn = (vd->hdrwidth * vd->hdrheight >> 2 ); // here alloc the output ringbuffer jpeg only
erreur = SetVideoPict (vd);
erreur = GetVideoPict (vd);
/* if (vd->formatIn != vd->videopict.palette ||
      vd->bppIn != vd->videopict.depth)
    exit_fatal ("could't set video palette Abort !");
if (erreur < 0)
    exit_fatal ("could't set video palette Abort !");*/

之后make一下,会生成servfox文件,将它放到mini6410上,输入命令

./servfox -d /dev/video2 -g -s 640x480 -w 7070

注意:/dev/video2 是我的摄像头设备名,有的是/dev/video0,最好用cat /dev/video2 > /usr/a.jpg 测试一下能不能拍摄到图片到/usr/a.jpg文件上,以便确定摄像头名称。

正常是应该如下显示:

./servfox -d /dev/video2 -g -s 640x480 -w 7070
servfox version: 1.1.2 date: 07:10:2005 (C)

Waiting .... for connection. CTrl_c to stop !!!!

3.spcaview部分

解压spcaview-20061208.tar.gz,这里主要用到里面的http-java-applet文件夹,将该文件夹里的所有文件复制到mini6410上的/var/www/目录中(我这里新建一个webcam目录来存放)。

测试一下:

接上摄像头,终端分别输入./boa ./servfox -d /dev/video2 -g -s 640x480 -w 7070

然后在windows或者linux的浏览器中打开网址(此时开发板和宿主机须采用网线或者无线网卡组成局域网才行)

这时候就能看到摄像头的内容了

(IE上显示java可能需安装jre环境,直接安装jre-6u10-windows-i586-p-s.exe就可以了,下载地址:)

 

 

备注:由于开发板/var/www下的内容每次断电后都会消失,其他目录下则不会。因此将里面的内容最好备份一份到其他路径如/root下。上电后先执行拷贝操作,将/root/www内容拷贝到/var/www里即可。具体指令为:

cp -r /root/www /var

mkdir /var/log/boa

./boa&

./servfox -d /dev/video2 -g -s 640x480 -w 7070

 

阅读(267) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~