【移植boa】
平台:TQimx6ul
rootfs:rootfs256M_2K_v1.4.img(TQ官方镜像)
----------------------------------------------------------------------------------------------------
一、下载|解压|交叉环境配置
官网:Boa Webserver http://www.boa.org/
下载boa-0.94.13.tar.gz(官网最新版是这个,好像很多年没更新了)
解压:
#tar xvf boa-0.94.13.tar.gz -C /
在src目录下运行:
#./configure
生成Makefile
检查交叉编译工具链,不要太新,
我选的工具链版本是TQ官网的5.3.1版本
二、修改代码
【注意】源码有几处要修改,虽然此时make只有一个错误,但复制到开发板后运行时会有一些问题。
【修改以下几处:】
【1】修改Makefile:
CC=arm-linux-gnueabihf-gcc
CPP=arm-linux-gnueabihf-gcc –E
(按实际填写)
【2】解决报错:util.c:100:1: error: pasting "t" and "->"does not give a valid preprocessing token make: *** [util.o]
修改 src/compat.h
找到
#defineTIMEZONE_OFFSET(foo) foo##->tm_gmtoff
修改成
#defineTIMEZONE_OFFSET(foo) (foo)->tm_gmtoff
【3】修改boa.c 文件
注释掉下面两句话:
#if 0
if (passwdbuf == NULL) {
DIE(”getpwuid”);
}
if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
DIE(”initgroups”);
}
#endif
否则会出现错误: getpwuid: No such file or directory
注释掉下面语句:
#if 0
if (setuid(0) != -1) {
DIE(”icky Linux kernel bug!”);
}
#endif
否则会出现错误: - icky Linux kernel bug!: No such file or directory
【4】修改 src/log.c
注释掉
if (dup2(error_log, STDERR_FILENO) == -1) {
DIE("unable to dup2 the error log");
}
-----------------------------------------------------------
三、编译
#make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
编译成功会生成boa文件
四、移植
【以下步骤在开发板上进行】
挂载NFS:
#mount -t nfs -o nolock 192.168.1.74:/nfsroot /mnt
(1.74为虚拟机ip,/nfsroot为NFS目录)(要先安装好NFS相关工具)
在开发板根目录下创建以下目录:
mkdir /etc/boa
mkdir /var/www/cgi-bin
复制虚拟机里的boa和boa.conf到开发板的/etc/boa目录下:
[root@Embedsky 1022]# cp boa boa.conf /etc/boa
复制mime.types到开发板的/etc目录下:
[root@Embedsky 1022]# cp mime.types /etc/
复制hello.html(自己写一个)到开发板的/var/www目录下:
[root@Embedsky 1022]# cp hello.html /var/www
-------------------------------------------------------------
五、修改开发板的开机自启动脚本(/etc/init.d/rcS)
建议先备份原来的rcS:
#mv rcS rcS-backup
建议在虚拟机下编辑代码,
添加以下几行:
udhcpc -i eth0
(动态分配ip)
mkdir /var/log/boa
cd /etc/boa
./boa
修改后注意赋予权限:
chmod 777 /etc/init.d/rcS
否则重启后会:can't run '/etc/init.d/rcS': Permission denied
(注意:/var/log/boa目录重启后会被删除,故写在开机启动脚本里)
----------------------------------------------------------------------------------------------------------
六、说明
【1】[root@Embedsky boa]# ./boa
./boa: line 1: syntax error: unexpected "("
[原因]:没有修改Makefile,是用gcc编译的,应该改成是arm-linux-gcc编译。
【2】
http://192.168.1.224/hello.html(板ip)
hello.html放在板 /var/www下
【3】
在开机自启动脚本设置动态分配ip,boa服务器也设置成开机自启动,开发板上电后主机浏览器即可访问。
若开发板需要修改ip,修改后主机访问的url做相应更改即可。
【注:后续还要移植CGI】
附:hello.html
<html>
<head><title>这是我的第一个html</title></head>
<body>
Hello World
</body>
</html>