第三步boa的执行
这一步的工作也在电脑主机上完成。但是操作到的目录跟嵌入式板子上的目录有关。
1.将根文系统ramdisk在电脑主机上mount –o loop ramdisk 目标 目录进行展开
进入展开后ramdisk的根文件夹,然后执行下面:
# mkdir /var/log
# mkdir /var/log/boa(创建日志文件目录)
# mkdir /var/www (创建HTML文档的主目录)
# mkdir /etc/boa
将第二步中修改过的boa.conf文件从电脑主机上别的目录拷贝到ramdsik的相关目录下
# cp /电脑主机目录/ boa-0.94.13/boa.conf /etc/boa/
将mime.types文件复制到嵌入式板子ramdsik的/etc目录下,通常mime.types可以从linux电脑主机的 /etc目录下直接复制即可。
# cp / etc/mime.type /etc/
上面第一步骤中编译生成的boa可执行文件,将其复制到展开后ramdsik的bin目录里面。
# cp /电脑主机目录/ boa-0.94.13/src/boa /bin/
2.测试操作
可以将主机 /usr/share/doc/HTML/目录下的index.html(这个是静态的html网页显示文件,是RedHat9的欢迎主页,当在局域网的 PC的IE上输入嵌入式板子的IP地址时会显示这个默认的静态网页)文件和img目录复制到嵌入式ramdsik的/var/www目录下
# cp /usr/share/doc/HTML/index.html /var/www/
# cp /usr/share/doc/HTML/img /var/www/
# cp /usr/share/doc/HTML/index-ZH_CH.html /var/www/
3.将ramdisk文件重新打包压缩下载到嵌入式板子上。
Ramdisk重新大包压缩下载到板子上后,在板子的超级终端的根目录下输入./boa,看boa是否可以执行。
可能提示错误如:libso.0.6 GLIB2.2版本问题,这个一般是boa执行时需要动态共享库,解决的办法是,在编译boa的时候用静态的方式进行编译,即
进入:/电脑主机目录/boa-0.94.13/src目录下,修改makefile文件中:
LDFLAGS = -g
修改为:LDFLAGS = -static 就可以了。
执行boa时,可能出现其他的错误,则可以在开发板的/var/log/boa/error_log文件中找原因。大部分是跟boa.conf配置文件的正确与否有关。如:
问题:在执行./boa时出现错误:boa执行时,出错 log.c:73 unable to dup2 the error log:bad file descriptor
解决方法:在log.c里注释掉那个if语句。
又出现了另个问题:unable to dup2 the error log: Bad file descriptor
解决方法:在boa.conf里注释掉#AccessLog /var/log/boa/access_log
4.CGI脚本测试
书写下面的test.c测试程序,
#include <stdio.h>
#include <string.h>
int main(void)
{
printf("Contenttype:text/html\n\n");
printf("<html>\n");
printf("<head><title>An HTML Page From a CGI</title></head>\n");
printf("<body><br>\n");
printf("<h2> This is an HTML page generated from with in a CGI program..</h2>\n");
printf("<hr><p>\n");
printf("<a href=https://www.linuxidc.com/Linux/2011-01/\"output.html#two\"><b> Go back to out put.html page </b></a>\n");
printf("</body>\n");
printf("</html>\n");
fflush(stdout);
}
交叉编译生成test.cgi
# /usr/local/arm/2.95.3/bin/arm-linux-gcc -o test.cgi test.c
将test.cgi拷贝至嵌入式板子的/var/www/cgi-bin/下,当在局域网PC的IE上输入 嵌入式板子的IP地址/cgi-bin/test.cgi
可以显示出test.cgi的网页。
有关CGI的知识可以学习:用C语言实现CGI相关资料。
注意:上面代码执行时,可能会出现错误提示:
502 Bad Gateway
The CGI was not CGI/1.1 compliant.
可能出现的原因:
1.测试下看是否能浏览静态网页,以保证网络是正确的。
在上面“第三步的 2.测试操作”后局域网的PC的IE上输入嵌入式板子的IP地址,如果能显示redhat9的欢迎主页,说明静态访问是正确的了。
2.将.cgi文件拷贝至目标板上后,必须改变其权限
chmod 755 test.cgi
否则,上位机浏览时会提示上面错误
3.最有可能是CGI程序本身的问题。
我们已经看到test.c的打印开头有使用MIME头信息″Content type :text/html\n\n″来表示输出HTML源代码给Web服务器。请注意任何MIME头信息后必须有一个空行,就是加了\n\n,
所以这点必须保证。
4.Test.c的原文件是在文本模式下编辑的,在linux下不能执行
可以改动:dos2unix test.c 改动后再进行编译
5.还有一种可能,test.cgi被编译成了动态形式,然而程序执行时在嵌入式中找不到动态库文件,所以在编译程序时加上-static,编译成静态的形式,但是这样编译出来的文件很大,在嵌入式中不适宜采用这种方式。