apache嵌入式平台移植

来源:互联网 发布:模型的矩阵 编辑:程序博客网 时间:2024/04/29 05:26

要开发一个智能网关实现web访问,首先就想到了apache这个东西 ,前一段时间移植了一下usbwifi驱动到omap平台下,对嵌入式开发有了进一步的认识,接下来就是对apache的移植了,用来实现通用友好的web访问。

首先检索了一下前辈们的移植经验:

这个文章是帮了大忙了的了,贴出来引用了:http://blog.csdn.net/fontlose/article/details/6539257

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

一 环境 
   fedora 14  gcc 4.5.1
   arm-linux-gcc 4.4.1
   apache_1.3.39

二 编译过程 

1. 从http://www.apache.org/ 上下载apache_1.3.39.tar.gz,然后解压缩两次,两个目录命名为apache_1.3.39_x86和apache_1.3.39_arm。

(**apache已经发展的很成熟了,在官方的网站上已经将apache命名为httpd了,为了保险起见还是还是选了个一致的版本,免得出现麻烦了**)


2.进入apache_1.3.39_x86 运行:./configure
3. make 完成后不用make install
问题: htpasswd.c定义的静态函数和库函数类型冲突,可能是gcc版本太高的原因,既然是静态的把htpasswd.c的getline改成sgetline,只有一处调用该函数。

htpasswd.c:101:12: 错误:与‘getline’类型冲突
/usr/include/stdio.h:673:18: 附注:‘getline’的上一个声明在此
make[2]: *** [htpasswd.o] 错误 1
make[2]: 离开目录“/opt/FriendlyARM/mini6410/apache_1.3.39_x86/src/support”
make[1]: *** [build-support] 错误 1
make[1]: 离开目录“/opt/FriendlyARM/mini6410/apache_1.3.39_x86”
make: *** [build] 错误 2

同样的改htdigest.c 和logresolve.c

4.进入apache_1.3.39_arm
运行:
export CC="arm-linux-gcc" (修改为自己对应的交叉编译器)
./configure --prefix=/apachebin/ --without-execstrip --enable-module=so(这个prefix就是apache的安装路径了)
make
然后运行make 命令,这时编译会在apache_1.3.39/src/main/gen_test_char处失败,因为arm版本该程序无法在本地机器运行,需要把前面编译的x86版本的apache_1.3.39/src/main/gen_test_char拷贝到这里,然后修改main下的Makefile,注释掉关于生成gen_test_char的命令。同样的把x86编译出来的gen_uri_delims考到main下,注释掉关于生成gen_uri_delims的命令

(将gen_test_char复制过去后就不许要注释掉了,发现存在这个文件后将直接跳过不编译了,而且后面的gen_uri_delims也不需要处理了,之前为了图方面,直接将这两个文件复制了过来,结果倒还除了问题了,这两者之间可能还生成了些什么东西,折腾了两次,发现,首先复制gen_test_char这个文件过来就没问题了,后面没出现什么问题)


继续make 出现 getline’类型冲突,解决方法和x86编译一样。
make install
5 将/apachebin文件夹拷至开发板
    接下来还必须在rootfs上建立nobody用户和nogroup组,因为apache拒绝使用root用户运行。具体来说就是在ARM Linux根文件系统上/etc/passwd和/etc/group两个文件加入内容可以如下:
/etc/passwd
root::0:0:root:/:/bin/ash 
nobody::65534:65533:nobody:/:/bin/ash

/etc/group
nobody::65533:
nogroup::65534:nobody
root::0:
users::100:
(在这一步的时候,第一次的prefix设置的是在用户的主目录中,后面编译安装的目录也放在了用户的主目录了,结果最后的执行文件中出现了“~”这个符号,并提示无法打开httpd.conf这个文件,我修改了权限还是不行,于是重新修改了安装路径直接放到了更目录下,/apache1.3.39,然后全部复制到目标板的根目录下,httpd成功启动了,另外可能是我板子的原因,我的目标系统中已经存在了nobody用户了nogroup用户组了,所以也省去了修改)

(在启动的过程中还是遇到了:httpd: Could not determine the server's fully qualified domain name, using 127.0.0.1 for ServerName的错误,

http://300second.blog.51cto.com/7582/767697

修改httpd.conf文件的ServerName参数为localhost, httpd才启动)

6 进入apachebin/bin文件夹,执行./httpd
7 测试主机 http://192.168.2.230:80    看是否能打开网页

(测试访问主机的时候发现默认并不是采用的80端口,而是用的8080,也小疑惑了一下,看了httpd.conf文件就晓得了)

apache成功测试了,接下来一直php!

0 0