linux下最常用的web服务器:Apache。开源。 嵌入式web服务器主要有:lighttpd、thttpd、shttpd、BOA等
CGI : Common Gate Intetgace 是一段运行在web服务器上的程序,提供同客户端html页面的接口。
CGIC:是一个支持CGI开发的开放源码的标准C库,目的帮助用户进行大量字符串处理。
对比了一下:决定使用BOA,资料教程也比较多。
第一部分 移植BOA
https://blog.csdn.net/hnxyxiaomeng/article/details/85993285 参考了这篇文章。
一、从http://www.boa.org/下载Boa源码,将其解压并进入源码目录的src子目录。
tar -zxvf boa-0.94.13.tar.gz
cd boa-0.94.13/src
//生成Makefile文件
./configure
二、修改Makefile文件
a.找到CC=gcc,将其改成CC = arm-linux-gnueabihf-gcc,
b.找到CPP = gcc –E,将其改成CPP= arm-linux-gnueabihf-gcc –E, 保存退出。
三、编辑src下的compat.h和src/boa.c文件
在compat.h的大概120行处
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff 改为
#define TIMEZONE_OFFSET(foo) foo->tm_gmtoff
在src/boa.c中
注释掉下面语句:
if(setuid(0) != -1) {
DIE(”icky Linux kernel bug!”);
}
即修改为:
#if 0
if(setuid(0) != -1) {
DIE(”icky Linux kernel bug!”);
}
#endif
四、编译
make
arm-linux-gnueabihf-strip boa //减小可执行文件的大小
五、修改/etc/boa下的boa.conf文件
User(48行)默认nobody,改为0
Group(49行)默认nogroup,改为0
#ServerName www.your.org.here (90行左右) 去掉#
再修改下图所示4个地方,即把 log/boa 修改为 log_boa。这里是因为我的zynq_linux会自动在相同路径下创建同名文件,不改的话有冲突。
六、拷贝到zynq开发板
将生成的boa可执行程序(在/src目录下)拷贝到开发板的/bin目录下,在开发板/etc目录下建boa目录,将boa.conf拷贝到板子的/etc/boa目录。
创建日志文件所在目录/var/log_boa,创建HTML文档的主目录/var/www,创建CGI脚本所在目录/var/www/cgi-bin/,在/var/www中放置一个index.html文件。上述目录若不存在,均需手动创建,这些都是boa运行需要的目录。index.html就是打开网址时的网页。
将虚拟机/etc目录下的mime.types文件到开发板/etc目录。
七、运行boa
在zynq上执行
/bin/boa
,即可运行起来web服务器,可通过top
、ps
命令确定。打开电脑上的浏览器,输入开发板的IP地址(10.113.214.205)即可看到之前放入的index.html的内容。如下图。
如果有问题,上述过程确没有提示任何错误。可查看zynq开发板的/var/log_boa/error_log来分析。
第二部分 测试CGI
https://blog.csdn.net/hnxyxiaomeng/article/details/86029449参考了这篇文章。
一、创建一个test.c文件,内容如下
#include <stdlib.h>
#include <stdio.h>
int 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) ;
return 1;
}
二、编译
arm-linux-gnueabihf-gcc -o test.cgi test.c
三、拷贝到 ZYNQ开发板
将生成的test.cgi拷贝到移植Boa时在开发板文件系统中建立的/var/www/cgi-bin中,并修改文件权限为777。
在/etc/boa/boa.conf中找到ScriptAlias(最后一行)
本来为:ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
修改为:ScriptAlias /cgi-bin/ /var/www/cgi-bin/
四、验证
打开网页,http://10.113.214.205/cgi-bin/test.cgi, 即可看到test.c中输出的字符串。
第三部分 移植CGIC
一、从github下载CGIC源码,解压。
二、修改Makefile文件。
CC=arm-linux-gnueabihf-gcc
AR=arm-linux-gnueabihf-ar
RANLIB=arm-linux-gnueabihf-ranlib
$(CC) $(CFLAGS) cgictest.o -o cgictest.cgi ${LIBS}
$(CC) $(CFLAGS) capture.o -o capture ${LIBS}更改完的Makefile如下图:
三、编译
make
生成了CGIC库libcgic.a。还有capture调试程序、cgitest.cgi测试程序用来验证生成CGIC库的正确性。
四、拷贝到 ZYNQ开发板
将libcgic.a拷贝到开发板的/lib文件夹下,将capture和cgictest.cgi拷贝到开发板的/var/www/cgi-bin目录下,并修改capture和cgictest.cgi的权限为777。
五、验证
在Windows的浏览器地址栏输入10.113.214.205/cgi-bin/cgictest.cgi,可以看到页面,CGIC库和测试脚本都移植成功。该页面中含有CGIC的常用控件,通过分析代码可看出怎么使用控件。如下图: