1.Web服务器: BOA 与 cgic库 本节内容摘自网络流传的教程,我曾经在s3c2440和ep9315系统亲手移植过BOA,没有遇到问题. cgic只是需要交叉编译一下,不需要做什么修改和配置. 移植 第一步:从 www.boa.org 下载Boa源码,将其解压并进入源码目录的src子目录。 # tar xzf boa-0.94.13.tar.gz # cd boa-0.94.13/src 生成Makefile文件 # ./configure 修改Makefile文件,找到CC=gcc和CPP=gcc -E,分别将其改为交叉编译器安装的路径CC=某路径下arm-linux-gcc和CPP=某路径下arm-linux-gcc -E并保存退出。 然后运行make进行编译,得到可执行程序boa # make # 某路径下arm-linux-strip boa 第二步:Boa的配置。 Boa需要在/etc目录下建立一个boa目录,里面放入Boa的主要配置文件boa.conf。在Boa源码目录下已有一个示例boa.conf,可以在其基础上进行修改。 1. Group nogroup修改成Group 0,由于在/etc/group文件中没有nogroup组,所以设成0 另外在/etc/passwd中有nobody用户,所以User nobody不用修改。 2. ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 修改成 ScriptAlias /cgi-bin/ /var/www/cgi-bin/ 其它默认设置即可。 还需要创建日志文件所在目录/var/log/boa,创建HTML文档的主目录/var/www,将静态网页存入该目录下(可以将主机/usr /share/doc/HTML/目录下的index.html文件和img目录复制到/var/www目录下),创建CGI脚本所在目录/var /www/cgi-bin,将cgi的脚本存放在该目录下。另外还要将mime.types文件复制/etc目录下,通常可以从linux主机的/etc 目录下直接复制即可。 第三步:测试 1.静态HTML网页 在目标板上运行boa程序,将主机与目标机的ip设成同一网段,然后打开任一个浏览器(linux或window下都可),输入目标板的ip地址(http://10.10.10.2)即可打开/var/www/index.html网页 2.CGI脚本测试 boa源码中有cgi-bin测试脚本(examples/cgi-test.cgi),但由于它不是在我们目标平台下编译的,所以不能将它复制到/var/www/cgi-bin目录下进行测试。 下面是一个简单的hello, world!程序,代码如下: #include void main(){ printf("Content-type: text/html\n\n"); printf("\n"); printf("CGI Output\n"); printf("\n"); printf("Hello, world.\n"); printf("\n"); printf("\n"); exit(0); } Boa移植时常出现的问题 1. 当运行boa程序时出现错误,如下: # ./boa [27/Nov/1990:13:22:25 0000]boa.c:266.icky Linux kernel bug!:No such file 将 User 0修改成 User nobody 2. 打开网页时,网页中的图片无法显示 就将存放图片的子目录/var/www/images修改成/var/www/img 3. 在测试cgi脚本时,当在浏览器地址中输入“http//10.10.10.2/cgi-bin/helloworld.cgi”时,浏览输出下述错误: 502 Bad Gateway The CGI was not CGI/1.1 compliant (sanicle注:此种错误在使用BOA时十分常见,原因基本都是自己写的cgi程序的输入输出问题) 在目标板的调试终端中输出下述错误: ……cgi_header:unable to find LFIF 上述错误是在boa原码中的cgi_header .c文件中的process_cgi_header函数产生,如下: buf = req->header_line; c = strstr(buf, "\n\r\n"); if (c == NULL) { c = strstr(buf, "\n\n"); if (c == NULL) { log_error_time(); fputs("cgi_header: unable to find LFLF\n", stderr); //出错信息 #ifdef FASCIST_LOGGING log_error_time(); fprintf(stderr, "\"%s\"\n", buf); #endif send_r_bad_gateway(req); return 0; } } 我们可以定义FASCIST_LOGGING,使产生该错误时将buf内容打印出来,结果如下: ……cgi_header:unable to find LFIF Content-type: text/html CGI Output Hello, world. 原来buf中的内容就是helloworld.c中输出的内容,查看输出结果,再看process_cgi_header函数中的语句:c = strstr(buf, "\n\n"),很明显buf中没有两个连续的换行符"\n\n",所以是helloworld.c文件中的语句:printf("Content- type: text/html\n\n");错写成了printf("Content-type: text/html\n"); 上述行通过标 准输出将字符串″Contenttype:text/plain\n\n″传送给Web服务器。它是一个MIME头信息,告诉Web服务器随后的输出是以纯ASCII文本的形式。在这个头信息中有两个新行符,这是因为Web服务器需要在实际的文本信息开始之前先看见一个空行。 WEB应用开发 CGIC库的移植 从CGIC的主站点 http://www.boutell.com/cgic/ 上下载源码,将其解压并进入源码目录。 # tar –zxvf cgic.tar.gz # cd cgic205 修改Makefile文件,同样是改为使用交叉编译。 然后输入make进行编译,可以将生成的capture和cgictest.cgi文件复制到目标板目录/var/www/cgi-bin/下,以测试正确性。 2.数据库: sqlite (结合web服务器,小型嵌入式设备也可以做各种BS结构的应用和web服务) 网上同样有教程,我就不再转载了,我在ep9315上的linux2.4.21和s3c2440上的2.6.14都曾用过sqlite3,这里我直接把移植好的一个版本提供过来(sqlite3.3.14). screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('http:///fileicon/rar.gif');}" onmousewheel="return imgzoom(this);" alt="" /> 文件:sqlite3-arm-linux.rar 大小:2950KB 下载: 下载 3.GUI: MiniGUI QT 涉及商业使用中的文档,暂略,等有适合放出的再放吧. 4.USB摄象头获取视频并由以太网传出: 驱动spca5xx 视频服务器servfox 视频客户端spcaview 我曾经在各种系统上(如s3c2410,ep9315,rm9200等)尝试使用常见的301p摄象头,用spca这些东西感觉很不错,移植容易,基本也就是交叉编译一下,作者是一个和蔼可亲的法国大胡子老爷爷.这一堆东西具体可以看这里: http://mxhaard.free.fr/embedded.html (我刚才上不去..不知道是我的网络人品还是那个站人品了..汗) 我07年的时候对这些还是蛮有兴趣的,但可惜的是经常使用的Video4Linux相关的东西,由于时间安排,我还没有详细研究. spcaview在fifth的努力下可以在windows使用,代码简明易懂,以下是fifth的blog中的相关内容: http://blog.chinaunix.net/u/27015/showart_223753.html 5. (待续) |
|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )
GMT+8, 2024-9-30 05:33 , Processed in 0.126481 second(s), 12 queries , Gzip On, MemCache On.
Powered by Discuz! X3.5
© 2001-2023 Discuz! Team.