经过了接近两个星期的研究,查阅了太多资料,编译的过程中出了很多问题,不断的在网络上搜寻答案。网上的编译移植版本有的有好几种,有的甚至没有,就这样不断的尝试,不断的失败,不断的从头开始,终于成功移植。
开发板:天嵌科技TQ3358
编译器:arm-linux-gcc 4.4.6版本
平台:ubuntu 11.10 amd64
嵌入式服务器的移植包括apache ,php ,mysql。这里我们用的版本分别是apache-2.2.20(httpd-2.2.20),php-5.3.6 ,mysql-5.1.69。
Apache-2.2.20的嵌入式移植
首先得说下,我之前移植的是apache-1.3.39,由于程序代码用的是2.2.20,所以移植进去之后有很多bug,后来又改成apache-2.2.20。这两个版本的移植方法稍微有些不同,不过也是大同小异。我之前找的一个移植版本说要先移植apr,pcre几个库,后来我又找了一种方法也就是下面的方法则不需要。
1.编译apache要编译两个版本,一个是基于PC的,一个是基于ARM的。首先将apache-2.2.20.tar.gz解压,目录可以自己选择,我这里分别解压到了两个目录,
Home/jason/PC/apache-2.2.20 和/home/jason/arm/apache-2.2.20.
2.先编译本机代码
#Cd Home/jason/PC/apache-2.2.20
3.# ./configure
4.# make 这里不需要make install,我们只是在编译基于ARM版的时候要用到这里的make后的几个文件。
5.编译基于arm的代码
这里有一点要特别注意,有的情况下我们需要apache运行在root下,比如如果php扩展了sockets功能,用到socket的相关函数,由于这类socket需要root权限,所以要让apache运行在root权限下。
那么要让apache运行在root下要做的就是:
在apache源码包的include/http_config.h文件里面,在文件的最开始添加下面几句:#ifndef BIG_SECURITY_HOLE#define BIG_SECURITY_HOLE#endif
然后再做下面的工作。最后记得做的就是讲apache的配置文件httpd.conf里面的user跟group选项都改成root,这样apache就可以以root权限运行了。
6.#Cd Home/jason/arm/apache-2.2.20
7.#CC=arm-linux-gcc ./configure --host=arm-linux --prefix=/usr/local/apache --enable-so --with-mpm=worker ac_cv_file__dev_zero=yes ac_cv_func_setpgrp_void=yes apr_cv_process_shared_works=yes apr_cv_mutex_robust_shared=yes apr_cv_tcp_nodelay_with_cork=yes ap_cv_void_ptr_lt_long=no
8.# make make的过程中出了一些错误,按照下面的方法解决即可
7.1error:redefinition of 'struct iovec'
解决方法:在 srclib/apr/include/apr_want.h中,注掉struct iovec {...}这个结构体
7.2 error./dftables: cannot execute binary file
解决方法:因为交叉编译出的文件不能在编译的主机上运行,所以将编译的本地版本 的/src/lib/pcre/dftables文件拷贝过来,覆盖掉原来的。
7.3 error :./gen_test_char :cannot execute binary file
解决方法:将本地编译生成的这个文件拷贝过来,覆盖掉原来的。
8.# make install
9.将/usr/local/目录下的apache文件夹复制到开发板的相同目录下,即/usr/local/下。不过我这里复制的时候出了些问题,有些库没有复制进去,开启httpd服务的时候根据错误提示又把这些库复制进去了。其实是电脑上的/usr/local/apache/lib里面有些库没有复制到开发板里面,只要单独将那些没有复制出来的库复制到开发板里面相同的目录下,也行。
10.由于apache拒绝使用root用户运行,所以要增加一个用户和用户组,具体做法就是在开发板的linux文件系统的/etc/目录中建立两个文件passwd,group。
passwd文件的内容如下:
root::0:0:root:/:/bin/sh
nobody::65534:65533:nobody:/:/bin/sh
group文件的内容如下:
nobody::65533
nogroup::65534:nobody
root::0:
users::100
11.修改配置