嵌入式系统工程师,从事视频、图像、网络、虚拟化等方面的底层软件开发与优化。
全部博文(40)
分类: LINUX
2013-08-21 09:06:40
移植thttpd Web服务器到ARM-Linux系统
1、 《Linux系统移植》:一个经典的Linux移植文档,(有的网站称之为《Linux系统全线移植文档》等等),共有95页的PDF文档,内容十分详细,里面有thttp的移植记录,值得参考。
2、 《构建嵌入式Linux系统》的第十章 设置网络服务 中的thttp移植部分。
1 下载并解压
下载地址为: 我下载的是最新的2.25b
解压:
[tekkamanninja@Tekkaman-Ninja source]$ tar -xvzf thttpd-2.25b.tar.gz
2 交叉编译thttpd
[tekkamanninja@Tekkaman-Ninja source]$ cd thttpd-2.25b
[tekkamanninja@Tekkaman-Ninja thttpd-2.25b]$ CC=/home/tekkamanninja/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-gcc ./configure –host=arm-9tdmi-linux-gnu
[tekkamanninja@Tekkaman-Ninja thttpd-2.25b]$ make
3 安装与配置
3.1 拷贝thttpd二进制可执行文件到根文件系统/usr/sbin/目录中
[tekkamanninja@Tekkaman-Ninja thttpd-2.25b]$ cp thttpd /home/tekkamanninja/working/nfs/rootfs/usr/sbin/ |
3.2 拷贝thttpd配置文件
[tekkamanninja@Tekkaman-Ninja thttpd-2.25b]$ cp contrib/redhat-rpm/thttpd.conf /home/tekkamanninja/working/nfs/rootfs/etc/ |
3.3在开发板上为thttpd创建一个独立的用户:httpd,并用此用户创建httpd服务的根目录html
[root@/root]#adduser httpd |
3.4 拷贝测试网页到httpd服务的根目(可选,测试之用):
[tekkamanninja@Tekkaman-Ninja thttpd-2.25b]$ cp index.html /home/tekkamanninja/working/nfs/rootfs/home/httpd/html/ |
我是动态编译所以查看一下需要的动态库
[tekkamanninja@Tekkaman-Ninja thttpd-2.25b]$ /home/tekkamanninja/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-readelf -d thttpd
Dynamic section at offset 0x12014 contains 21 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libcrypt.so.1]
0x00000001 (NEEDED) Shared library: [libc.so.6]
0x0000000c (INIT) 0x9548
0x0000000d (FINI) 0x16564
0x00000004 (HASH) 0x8128
0x00000005 (STRTAB) 0x8c14
0x00000006 (SYMTAB) 0x8494
0x0000000a (STRSZ) 1066 (bytes)
0x0000000b (SYMENT) 16 (bytes)
0x00000015 (DEBUG) 0x0
0x00000003 (PLTGOT) 0x220e4
0x00000002 (PLTRELSZ) 872 (bytes)
0x00000014 (PLTREL) REL
0x00000017 (JMPREL) 0x91e0
0x00000011 (REL) 0x91a0
0x00000012 (RELSZ) 64 (bytes)
0x00000013 (RELENT) 8 (bytes)
0x6ffffffe (VERNEED) 0x9130
0x6fffffff (VERNEEDNUM) 2
0x6ffffff0 (VERSYM) 0x903e
0x00000000 (NULL) 0x0
虽然这里只列出了需要libcrypt 和 libc 这两个动态库,但是想要运行thttpd还需要libnss_files 动态库,具体原因请看:http://www.jollen.org/blog/2006/10/library_dependency_1.html
[tekkamanninja@Tekkaman-Ninja thttpd-2.25b]$ cp -d /home/tekkamanninja/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/arm-9tdmi-linux-gnu/lib/libnss_files* /home/tekkamanninja/working/nfs/rootfs/lib/ |
你可以在启动文件里增加thttpd的启动命令:thttpd -C /etc/thttpd.conf
注意只有root有启动权限!
4、增加对CGI的支持
默认配置下,thttpd不可以运行GCI(特别是动态编译的CGI程序)要想使用CGI支持功能,必须更改thttpd.conf的配置:
# This section overrides defaults |
移植完成,可以测试了(只需在WEB浏览器中键入开发板的IP地址即可)。