嵌入式设备使用的web服务器 ——thttpd移植 (非常详细,仔细品味一定会有收获)

1.官网下载 http://www.acme.com/software/thttpd/
 版本thttpd-2.25b.tar.gz

2.解压
 tar -zxvf thttpd-2.25b.tar.gz

3../configure
4.修改makefile
CC = gcc -> CC = arm-none-linux-gnueabi-gcc
总共有3个makefile要改
压缩根目录包1个,cgi-src目录1个,extras目录1个
5.make

 

6.
拷贝thttpd-2.25b/contrib/redhat-rpm/thttpd.conf文件到目标板文件系统/etc目录下

[cpp]  view plain copy
  1. # This section overrides defaults  
  2. dir=/etc/thttpd/html  
  3.   
  4. chroot  
  5. user=root  
  6. logfile=/etc/thttpd/thttpd.log  
  7. pidfile=/etc/thttpd/thttpd.pid  
  8. cgipat=/cgi-bin/*.cgi  
  9. # This section _documents_ defaults in effect  
  10. # port=80  
  11. # nosymlink# default = !chroot  
  12. # novhost  
  13. # nocgipat  
  14. # nothrottles  
  15. # host=0.0.0.0  
  16. # charset=iso-8859-1  

7.
拷贝thttpd到目标板文件系统/bin目录下
8.
目标板文件系统创建/etc/thttpd目录(属性755)
目标板文件系统创建/etc/thttpd/html目录(属性755)
9.
拷贝主页index.html到html目录(属性644)
10.
运行thttpd -D -C /etc/thttpd.conf //加载配置文件
11.
浏览器输入ip地址可以看到主页了

================================================================================

另一篇 :

Porting thttpd web server to ARM-Linux

Development:
    kernel:2.6.31-14-generic ubuntu9.10
    cross-tools:arm-linux-gcc version 4.1.2
Target
    kernel: 2.6.28.9 MOZART380 armv5tejl

<1>下载thttpd
    下载地址:http://www.acme.com/software/thttpd/ 
    Version:2.25b
<2>解压thttpd
    tar -xvzf thttpd-2.25b.tar.gz
    cd thttpd-2.25b/
<3>configure
    export CC=arm-linux-gcc (path/to/arm-linux-gcc)
    ./configure --host=arm-linux
    make
<4>拷贝thttpd
    cp thttpd /path/to/target-filesystem/thttpd/
    cp /etc/thttpd/* /path/to/target-filesystem/thttpd/
<5>创建子dir
    cd /path/to/target-filesystem/thttpd/
    mkdir www
    mkdir log
    mkdir -m 777 -p www/cgi-bin
<6>修改运行时conf
    gedit thttpd.conf
    正确设置以下参数
    port=80
    dir=/path/to/target-filesystem/thttpd/www
    #chroot        [2]
    user=root    [3]
    cgipat=/cgi-bin/*
    throttles=./throttle.conf[4]
    logfile=/path/to/target-filesystem/thttpd/log/thttpd.log
    pidfile=/path/to/target-filesystem/thttpd/log/thttpd.pid
    host=YourHostName
<7>运行thttpd
    ./thttpd -C thttpd.conf
<8>静态页面测试
    编写测试程序
    index.html
    ///////////////////////////////////////////////////////////////////////////
        <html>
        <head>
        <title>Welcome to nginx!</title>
        </head>
        <body bgcolor="white" text="black">
        <center><h1>Welcome to thttpd !</h1></center>
        </body>
        </html>
    ///////////////////////////////////////////////////////////////////////////
        拷贝
        cp index.html /path/to/target-filesystem/thttpd/www/
    测试
    http://YOURSIP/
<9>CGI脚本测试
    编写测试程序
    number.c
    ///////////////////////////////////////////////////////////////////////////
       #include <stdio.h>

        int main(void)
        {
        int i = 10;
        printf("Content-type: text/html\n\n");
        printf("<html>\n");
        printf("<head><title>CGI Output</title></head>\n");
        printf("<body>\n");
        while(i)
            printf("<h1>%d\n</h1>\n",i--);
        printf("<body>\n");
        printf("</html>\n");
        return 0;
        }
    ///////////////////////////////////////////////////////////////////////////
    交叉编译
    arm-linux-gcc -o number.cgi number.c
    拷贝至cgi-bin
        cp number.cgi /path/to/target-filesystem/thttpd/www/cgi-bin/
    更改属性
        chmod 755 number.cgi
    测试
        http://YOURSIP/cgi-bin/number.cgi

Q/A:
1.thttpd.conf可以在何处获取
A:thttpd-2.25b并没有thttpd.conf,可以使用host端的thttpd.conf
   如果host没有安装thttpd
   sudo apt-get install thttpd
   cp /etc/thttpd/* /path/to/target-filesystem/thttpd/

2.无法打开throttle.conf: No such file or directory
A:查看thttpd.conf,确保throttle.conf的配置路径指向其存放路径
  由于bean将其放在了thttpd/目录下,所以设置如下
  throttles=./throttle.conf

3.出现“unknown user - 'www-data' ”的错误
A:查看thttpd.conf,确保user的配置在target中存在
  bean裁剪filesys没有提供adduser,所以设置如下
  user=root

4.出现“chdir: No such file or directory ”的错误
A:查看thttpd.conf, 确保dir的设置正确
  bean将所有的测试放于/exchange下,关于dir的设置如下
  dir=/exchange/thttpd/www
  此处的dir是cgipat的父目录

5.出现“cannot load the lib xxxxx”
A:查看thttpd以来的动态库
  arm-9tdmi-linux-gnu-readelf -d thttpd
  ************************************************************************

Dynamic section at offset 0x11368 contains 22 entries:
  Tag        Type                         Name/Value
 0x00000001 (NEEDED)                     Shared library: [libcrypt.so.0]
 0x00000001 (NEEDED)                     Shared library: [libc.so.0]
 0x0000000c (INIT)                       0x9468
 0x0000000d (FINI)                       0x15acc
 0x00000019 (INIT_ARRAY)                 0x2135c
 0x0000001b (INIT_ARRAYSZ)               4 (bytes)
 0x0000001a (FINI_ARRAY)                 0x21360
 0x0000001c (FINI_ARRAYSZ)               4 (bytes)
 0x00000004 (HASH)                       0x8108
 0x00000005 (STRTAB)                     0x8cd0
 0x00000006 (SYMTAB)                     0x84a0
 0x0000000a (STRSZ)                      1022 (bytes)
 0x0000000b (SYMENT)                     16 (bytes)
 0x00000015 (DEBUG)                      0x0
 0x00000003 (PLTGOT)                     0x21440
 0x00000002 (PLTRELSZ)                   872 (bytes)
 0x00000014 (PLTREL)                     REL
 0x00000017 (JMPREL)                     0x9100
 0x00000011 (REL)                        0x90d0
 0x00000012 (RELSZ)                      48 (bytes)
 0x00000013 (RELENT)                     8 (bytes)
 0x00000000 (NULL)                       0x0

  ************************************************************************
可以看出thttpd以来libcrypt和libc lib,将arm-linux-tools的lib目录下的相应库文件拷贝至target的/lib目录
如果依然出现错误,将libnss_files lib拷贝至target的/lib目录,bean个人认为是前两个库依赖libnss_files[未验证]。

当然, 也可以直接使用静态库文件

cd thttpd-2.25b/

vi Makefile
指定静态链接二进制文件
LDFLAGS = static

重新编译


6,无法解析cgi.
A:检查thttpd的配置,默认配置时打开了chroot,此时不支持运行cgi
  修改thttpd.conf,将chroot注释掉,并保证user/logfile/pidfile/port/cgipat的有效设置

 

参考:

http://www.4ucode.com/Study/Topic/1594382

你可能感兴趣的:(嵌入式设备使用的web服务器 ——thttpd移植 (非常详细,仔细品味一定会有收获))