全部博文(77)
分类: LINUX
2008-12-24 15:13:17
一、Boa程序的移植
1、下载Boa源码
下载地址:
目前最新发行版本: 0.94.13 (几年没更新版本了)
下载 boa-0.94.13.tar.gz,
解压:
[root@Localhost source]$tar xzf boa-0.94.13.tar.gz |
2、生成Makefile文件
进入boa-0.94.13,直接运行src/configure文件
[root@Localhost src]$./configure |
3、修改Makefile文件
把arm-linux-gcc加入到PATH路径信息中
CROSS = arm-linux- CC = $(CROSS)gcc CPP = $(CROSS)gcc -E #CC = gcc #CPP = gcc -E |
arm-linux-gcc: installation problem, cannot exec `cpp0': ?????????
arm-linux-gcc: installation problem, cannot exec `cpp0': ?????????
arm-linux-gcc: installation problem, cannot exec `cc1': ?????????
arm-linux-gcc: installation problem, cannot exec `cpp0': No such file or directory
解决的办法,把arm-linux-gcc安装在他的默认目录。
2.95.3 /usr/local/arm/2.95.3/bin/
(注意:必须用cross-2.95.3, 如使用
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
4、交叉编译
[root@Localhost src]$ make |
5、去除调试信息,减小体积,大约能减小一半还多。(可选)
[root@Localhost src]$ arm-linux-strip boa |
6、将编译好的程序放入根文件系统的/bin目录下。
二、配置Boa(以下部分未亲自测试,文字来源于转载博客)
Boa需要在/etc目录下建立一个boa目录,里面放入Boa的主要配置文件boa.conf。在Boa源码目录下已有一个示例boa.conf,可以在其基础上进行修改。
[root@Localhost src]$ cd ../.. |
1、Group的修改
修改 Group nogroup
为 Group user(开发板上有的组)
修改 User nobody
为 User boa (user组中的一个成员)
根据你的开发板的情况设定。一定要存在的组和用户。
以下是我在开发板上的操作:
[root@~]#adduser -g user boa |
2、ScriptAlias的修改
修改 ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
为 ScriptAlias /cgi-bin/ /var/www/cgi-bin/
这是在设置CGI的目录,你也可以设置成别的目录。比如用户文件夹下的某个目录。
3、ServerName的设置
修改 #ServerName
为 ServerName
注意:该项默认为未打开,执行Boa会异常退出,提示“gethostbyname::No such file or directory”,所以必须打开。其它默认设置即可。你也可以设置为你自己想要的名字。比如我设置为:ServerName tekkaman2440
此外,还需要:
将mime.types文件复制/etc目录下,通常可以从linux主机的 /etc目录下直接复制即可。
(以下配置和boa.conf的配置有关)
创建日志文件所在目录/var/log/boa
创建HTML文档的主目录/var/www
创建CGI脚本所在录 /var/www/cgi-bin
[root@Localhost log]$ mkdir -m 777 boa |
三、运行Boa
开发板操作:
[root@~]#boa
如果发现boa没有运行,则可以在开发板的/var/log/boa/error_log文件中找原因。
比如端口已被其他程序占用:
[root@~]#cat /var/log/boa/error_log
[20/Feb/2008:21:21:57 +0000] boa.c:194 - unable to bind: Address already in use
或是用户设置错误等等,都可以查到。
Q:无法启动 Boa,error log 显示 "boa.c:266.icky Linux kernel bug!:No such file"
A:修改 src/boa.c,将以下判断注释掉:
/*if (setuid(0) != -1) {
DIE("icky Linux kernel bug!");
}*/
重新编译
Q:无法启动 Boa,error log 显示 "boa.c:211 - getpwuid....略"
A:修改 src/boa.c,将以下判断注释掉:
/*if (passwdbuf == NULL) {
DIE("getpwuid");
}
if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
DIE("initgroups");
}*/
重新编译
四、功能测试
静态网页测试
将静态网页存入根文件系统的/var/www目录下(可以将主机 /usr/share/doc/HTML/目录下的index.html、homepage.css和img、stylesheet-images目录复制到/var/www目录下)
我参考《嵌入式Web服务器移植 》的做法如下:
在根文件系统的/var目录下
[root@Localhost var]$ cp /usr/share/doc/HTML/index.html www/ |
直接在浏览器中输入开发板的IP地址(比如我的是) ,出现fedora的欢迎网页。静态HTML调试成功。
CGI功能测试
1、编写HelloworldCGI.c程序
[root@Localhost source]$ vi helloworldCGI.c
(主程序的程序开头一定要用Tab,而不是空格,不然编译可能不通过)
#include<stdio.h> |
2.交叉编译生成CGI程序
[root@Localhost source]$ /home/root/working/gcc |
将helloworldCGI 拷贝至根文件系统的/var/www/cgi-bin/下
[root@Localhost source]$ cp helloworldCGI ../nfs/rootfs/var/www/cgi-bin/ |
3.测试
浏览器输入
网页出现 Hello,world. 调试成功!