作为一个初入嵌入式学习不久的菜鸟,在这里写博客还是挺害羞的。应一起学习的伙伴的要求,同时也想通过某种方式来记录自己学习过程的点滴,给自己一个督促,给自己一个未来。
下面介绍一下在S3C2440硬件平台上如何Boa服务器移植完成相应工作,只求勿喷,多多指教。
一、下载Boa源码
Boa源码下载地址:http://www.boa.org/或 http://labs.nevion.com/open-source/ 目前最新发行版本:0.94.13(05年更新版本),在linux上下载boa-0.94.13.tar.gz压缩包, 并将其解压并进入解压源码目录的src子目录。
1.#tar zxvf boa-0.94.13.tar.gz
2.#mv boa-0.94.13 boa_arm
3. #cd boa_arm/src
二、配置编译Boa文件
下面所有操作都在src子目录下操作
1、#vim defines.h 修改#define SERVER_ROOT "/etc/boa"统一为“/usr/boa”。
SERVER_ROOT为boa启动时的配置文件boa.conf存放路径,这里我们统一为/usr/boa.(其实这个路径可以不修改,但是记住一定要将boa.conf文件放在到S3C2440硬件平台上对应的路径下)
2、生成Makefile文件
#./configure
#vim Makefile 进入vim进行修改交叉编译器
将:CC= gcc CPP=gcc -E
改为:CC=arm-linux-gcc CPP=arm-linux-gcc -E
3、修改boa_arm/src/compat.h
找到#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
为:#define TIMEZONE_OFFSET(foo) foo->tm_gmtoff 否则在编译的时候会出现如下所示错误:
util.c: 100: 1: pasting"t"and"->"does not give a valid preprocessing token make: [util.o] Error1
4、 修改src/log.c (其实完全可以不改,只要确保日志目录对与所有用户都具有可读/写的权限)
if(dup2(error_log, STDERR_FILENO) == -1) {
DIE("unableto dup2 the error log"); }
即修改为:
#if 0
if (dup2(error_log, STDERR_FILENO) == -1) {
DIE("unable to dup2 the error log"); }
#endif
否则在编译的时候会出现如下所示错误:
log.c:73 unable to dup2 the error log:bad file descriptor
5、修改src/boa.c
注释掉下面这段程序:
if (passwdbuf == NULL) {
DIE(”getpwuid”);}
if(initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
DIE(”initgroups”);}
即修改为:
#if 0
if (passwdbuf == NULL) { DIE(”getpwuid”)}
if(initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
DIE(”initgroups”);}
#endif
否则在编译的时候会出现如下所示错误:
boa.c:211 - getpwuid: No such file or directory
注释掉下面语句:
if(setuid(0) != -1) {
DIE(”icky Linux kernel bug!”);}
即修改为:
#if 0
if(setuid(0) != -1) {
DIE(”icky Linux kernel bug!”);}
#endif
否则在编译的时候会出现如下所示错误:
boa.c:228 - icky Linux kernel bug!: No such file or directory
6、然后运行make进行编译,就可得到执行程序boa
#make
生成的boa执行文件大小为175.8KB。通过执行下面命令就可以将文件中调试信息除去,得到一个约60K的boa文件。 #arm-linux-strip boa
之后就可以将boa文件拷到S3C2440硬件平台上,至于放在哪个目录下,大家根据自己习惯来在SecureCRT中通过串口就行操作。我是把boa文件放到了bin目录下。
三、修改配置文件boa.conf(这个修改配置可以在linux下修改也可以在SecureCRT中通过串口就行操作)
以下我是在SecureCRT中操作的(前提是你已经把boa.conf从linux下拷到了开发板上)
1.在开发板/etc目录下建立/etc/boa目录, 并复制boa.conf到/etc/boa目录下,并按照以下步骤进行修改。
#mkdir /etc/boa
#cp boa.conf /etc/boa
#vim boa.conf 进入boa.conf中进行配置
2.访问端口号设置
Port 80,可以设定我们访问网页时的端口号默认为80—访问时无需指定,假如改变了此端口号为8080,必须以下列格式访问: http://192.168.1.3:8080。一般在同一个电脑上运行多个boa服务器时可采用此方法我们这里保持默认即可。(这些都是通过些大牛博客上学来的,大家不妨可以试试)
3. 修改访问权限:
修改User nobody 为 user 0
修改Group nogroup 为 group 0
4. 设定日志目录:boa日志有两部分,Errorlog 和 AccessLog
默认为/var/log/boa/error_log和/var/log/boa/access_log两个文件。因为要移植到开发板上所以我统一修改
ErrorLog /etc/boa/error_log
AccessLog /etc/boa/access_log
5. 设置html文件目录:
默认为:DocumentRoot /var/www 我们统一修改为:
DocumentRoot /etc/boa/www
6. 设置默认首页: DirectoryIndex index.html
这是访问网页时若不指定访问的网页名称,服务器默认返回的网页,我们不做修改
7. 设置cgi脚本目录: 将
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin
修改为
ScriptAlias /cgi-bin/ /etc/boa/cgi-bin
8.ServerName www.your.org.here 可以不修改,一般注释掉
9. 把mime.types文件复制到开发板/etc/boa目录。
其实以上修改没有定式,大家操作时可以根据自己习惯修改相应的目录即可。最后就比较简单了,在开发板/etc/boa目录下创建日志文件所在目录/etc/boa/log,创建HTML文档的主目录/etc/boa/www,创建CGI脚本所在目录/etc/boa/cgi-bin.剩下的就可在/etc/boa/www
下放一个自己写好的.html文件就好了。然后执行boa文件:# /bin/boa。现在就可以连接硬件网络,在电脑浏览器里访问已建立好的服务器里的.html页面了。须记得IP就是开发板的IP,大家自己#ifconfig 下就可以了。
初次,勿见怪。希望能互相学习。