http://blog.chinaunix.net/u1/34474/showart_488114.html
网络服务对于嵌入式Linux来说,已经是基本的内容了。对于简单的WEB服务,可以移植现成的开源软件。
现在使用于小型系统的轻量级WebServer主要有:lighttpd、thttpd、shttpd和boa等等。
早在07年5月份的时候,由于毕业设计的需要,我就移植过了Boa服务器。但是并未写出记录。趁这次系统整体移植的机会,我重新移植了Boa服务器,并写出这份记录,以备后用。
移植thttpd Web服务器到ARM-Linux系统
1、 《Linux系统移植》:一个经典的Linux移植文档,(有的网站称之为《Linux系统全线移植文档》等等),共有95页的PDF文档,内容十分详细,里面有thttp的移植记录,值得参考。
2、 《构建嵌入式Linux系统》的第十章 设置网络服务 中的thttp移植部分。
1 下载并解压
下载地址为:http://www.acme.com/software/thttpd/ 我下载的是最新的2.25b
解压:
|
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/目录中
|
3.2 拷贝thttpd配置文件
|
3.3在开发板上为thttpd创建一个独立的用户:httpd,并用此用户创建httpd服务的根目录html
Warning: weak password (continuing). 192.168.1.2 login: httpd Processing /etc/profile... [httpd@/home/httpd]$mkdir html |
3.4 拷贝测试网页到httpd服务的根目(可选,测试之用):
|
我是动态编译所以查看一下需要的动态库
Dynamic section at offset 0x12014 contains 21 entries: |
虽然这里只列出了需要libcrypt 和 libc 这两个动态库,但是想要运行thttpd还需要libnss_files 动态库,具体原因请看:http://www.jollen.org/blog/2006/10/library_dependency_1.html
|
你可以在启动文件里增加thttpd的启动命令:thttpd -C /etc/thttpd.conf
注意只有root有启动权限!
4、增加对CGI的支持
默认配置下,thttpd不可以运行GCI(特别是动态编译的CGI程序)要想使用CGI支持功能,必须更改thttpd.conf的配置:
|
移植完成,可以测试了(只需在WEB浏览器中键入开发板的IP地址即可)。
移植Boa Web服务器到ARM-Linux系统
一、Boa程序的移植
1、下载Boa源码
下载地址: http://www.boa.org/
目前最新发行版本: 0.94.13 (几年没更新版本了)
下载 boa-0.94.13.tar.gz,
注意:若从boa上下载的是boa-0.94.13.tar.tar,解压方式一样
解压:
|
2、生成Makefile文件
进入boa-0.94.13,直接运行src/configure文件
|
3、修改Makefile文件(注意:必须用cross-2.95.3, 如使用3.4.1、4.1.1等等会出错)
|
4、交叉编译
|
5、去除调试信息,减小体积。(可选)
|
6、将编译好的程序放入根文件系统的/bin目录下。
|
二、配置Boa
Boa需要在/etc目录下建立一个boa目录,里面放入Boa的主要配置文件boa.conf。在Boa源码目录下已有一个示例boa.conf,可以在其基础上进行修改。
|
1、Group的修改
为 Group user(开发板上有的组)
修改 User nobody
为 User boa (user组中的一个成员)
Warning: weak password (continuing). |
2、ScriptAlias的修改
修改 ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
为 ScriptAlias /cgi-bin/ /var/www/cgi-bin/
这是在设置CGI的目录,你也可以设置成别的目录。比如用户文件夹下的某个目录。
3、ServerName的设置
修改 #ServerName www.your.org.here
为 ServerName www.your.org.here
注意:该项默认为未打开,执行Boa会异常退出,提示“gethostbyname::No such file or directory”,所以必须打开。其它默认设置即可。你也可以设置为你自己想要的名字。比如我设置为:ServerName tekkaman2440
此外,还需要:
将mime.types文件复制/etc目录下,通常可以从linux主机的 /etc目录下直接复制即可。
(以下配置和boa.conf的配置有关)
创建日志文件所在目录/var/log/boa
创建HTML文档的主目录/var/www
创建CGI脚本所在录 /var/www/cgi-bin
|
三、运行Boa
开发板操作:
[root@~]#boa
如果发现boa没有运行,则可以在开发板的/var/log/boa/error_log文件中找原因。
比如端口已被其他程序占用:
或是用户设置错误等等,都可以查到。 |
四、功能测试
静态网页测试
将静态网页存入根文件系统的/var/www目录下(可以将主机 /usr/share/doc/HTML/目录下的index.html、homepage.css和img、stylesheet-images目录复制到/var/www目录下)
我参考《嵌入式Web服务器移植 》的做法如下:
在根文件系统的/var目录下
|
直接在浏览器中输入开发板的IP地址(比如我的是http://192.168.1.2) ,出现fedora的欢迎网页。静态HTML调试成功。
CGI功能测试
1、编写HelloworldCGI.c程序
[tekkamanninja@Tekkaman-Ninja source]$ vi helloworldCGI.c
(主程序的程序开头一定要用Tab,而不是空格,不然编译可能不通过)
|
2.交叉编译生成CGI程序
|
将helloworldCGI 拷贝至根文件系统的/var/www/cgi-bin/下
|
3.测试
浏览器输入
http://192.168.1.2/cgi-bin/helloworldCGI
网页出现 Hello,world. 调试成功!
移植shttpd Web服务器到ARM-Linux系统
下载的官方主页:http://shttpd.sourceforge.net/
我下的是目前最新的shttpd-1.39.tar.gz
解压:
[tekkamanninja@Tekkaman-Ninja source]$ tar zxvf shttpd-1.39.tar.gz
[tekkamanninja@Tekkaman-Ninja source]$ cd shttpd-1.39
[tekkamanninja@Tekkaman-Ninja shttpd-1.39]$ cd src/
[tekkamanninja@Tekkaman-Ninja src]$ kwrite Makefile
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
AR = /home/tekkamanninja/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-ar
CFLAGS = -DNO_SSL
[tekkamanninja@Tekkaman-Ninja src]$ ~/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-readelf -d shttpd
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libc.so.6]
0x0000000c (INIT) 0x9180
0x0000000d (FINI) 0x18708
0x00000004 (HASH) 0x8128
0x00000005 (STRTAB) 0x8a5c
0x00000006 (SYMTAB) 0x843c
0x0000000a (STRSZ) 807 (bytes)
0x0000000b (SYMENT) 16 (bytes)
0x00000015 (DEBUG) 0x0
0x00000003 (PLTGOT) 0x22d90
0x00000002 (PLTRELSZ) 704 (bytes)
0x00000014 (PLTREL) REL
0x00000017 (JMPREL) 0x8ec0
0x00000011 (REL) 0x8e88
0x00000012 (RELSZ) 56 (bytes)
0x00000013 (RELENT) 8 (bytes)
0x6ffffffe (VERNEED) 0x8e48
0x6fffffff (VERNEEDNUM) 1
0x6ffffff0 (VERSYM) 0x8d84
0x00000000 (NULL) 0x0
将编译好的程序放入开发板的文件系统下:
[tekkamanninja@Tekkaman-Ninja src]$ cp shttpd /home/tekkamanninja/working/nfs/rootfs/sbin/
[root@~]#shttpd -root /var/www -ports 80 &
[root@~]#shttpd --help
SHTTPD version 1.39 (c) Sergey Lyubka
usage: shttpd [options] [config_file]
-A <htpasswd_file> <realm> <user> <passwd>
-root Web root directory (default: .)
-index_files Index files (default: index.html,index.htm,index.php,index.cgi)
-ports Listening ports (default: 80)
-dir_list Directory listing (default: 1)
-cfg_uri Config uri
-protect URI to htpasswd mapping
-cgi_ext CGI extensions (default: cgi,pl,php)
-cgi_interp CGI interpreter
-cgi_env Additional CGI env vars
-ssi_ext SSI extensions (default: shtml,shtm)
-auth_realm Authentication domain name (default: mydomain.com)
-auth_gpass Global passwords file
-auth_PUT PUT,DELETE auth file
-access_log Access log file
-error_log Error log file
-mime_types Additional mime types list
-aliases Path=URI mappings
-acl Allow/deny IP addresses/subnets
-inetd Inetd mode (default: 0)
-uid Run as user
在HOST的浏览器中输入开发板地址,测试通过!
在流览器中输入(开发板地址)192.168.1.2/helloworldCGI.cgi ,测试通过!
4·移植lighttpd Web服务器到ARM-Linux系统
《在博创UP-NETARM2410-S开发板上建立嵌入式网页服务器(lighttpd)》
网址:http://hi.baidu.com/cst05001/blog/item/82c35b099c2b9eab2eddd42a.html
感谢文章作者 :alin
一、下载并解压
下载的官方主页:www.lighttpd.net
我下的是目前最新的lighttpd-1.4.18
解压:
[tekkamanninja@Tekkaman-Ninja source]$ tar xjvf lighttpd-1.4.18.tar.bz2
二、配置和交叉编译
[tekkamanninja@Tekkaman-Ninja source]$ cd lighttpd-1.4.18
[tekkamanninja@Tekkaman-Ninja lighttpd-1.4.18]$ 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 -prefix=/lighttpd -host=arm-9tdmi-linux-gnu --disable-FEUTARE -disable-ipv6 -disable-lfs
这里特别注意一下:-prefix=/lighttpd ,我是将软件先装在Host的根目录下的lighttpd文件夹内,然后将其复制到开发板的根文件系统的根目录下。