本文共 6473 字,大约阅读时间需要 21 分钟。
一、下载并解压下载的官方主页: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文件夹内,然后将其复制到开发板的根文件系统的根目录下。我之所以这样做是因为这个软件在make
install时会配置他私有的库文件的路径,在开发板运行时会在-prefix=
的文件加下找他的私有库文件。而我又是交叉编译给开发板,这样配置比较方便移植。
--disable-FEUTARE -disable-ipv6 -disable-lfs 可以不加。
[tekkamanninja@Tekkaman-Ninja lighttpd-1.4.18]$ make
三、程序安装[tekkamanninja@Tekkaman-Ninja lighttpd-1.4.18]$ make install
拷贝配置文件到开发板根文件系统的etc文件夹并进行适当修改:[tekkamanninja@Tekkaman-Ninja lighttpd-1.4.18]$ cp doc/lighttpd.conf /home/tekkamanninja/working/nfs/rootfs/etc/
[tekkamanninja@Tekkaman-Ninja lighttpd-1.4.18]$ kwrite /home/tekkamanninja/working/nfs/rootfs/etc/lighttpd.conf
必需修改的地方有:
server.document-root = "/srv/www/htdocs/"改为server.document-root = "/home/lighttpd/html/"
你可以自己定义,这里就是设置web服务的根目录。
屏蔽一下语句,不然嵌入式这样的小系统下可能无法启动#$HTTP["url"] =~ "\.pdf$" {# server.range-requests = "disable"#}
开看程序需要那些动态库:[tekkamanninja@Tekkaman-Ninja
lighttpd-1.4.18]$
~/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-readelf
-d src/lighttpd
Dynamic section at offset 0x20790 contains 21 entries: Tag Type Name/Value 0x00000001 (NEEDED) Shared library: [libdl.so.2] 0x00000001 (NEEDED) Shared library: [libc.so.6] 0x0000000c (INIT) 0xc200 0x0000000d (FINI) 0x231c0 0x00000004 (HASH) 0x8128 0x00000005 (STRTAB) 0xa338 0x00000006 (SYMTAB) 0x8b48 0x0000000a (STRSZ) 5946 (bytes) 0x0000000b (SYMENT) 16 (bytes) 0x00000015 (DEBUG) 0x0 0x00000003 (PLTGOT) 0x30860 0x00000002 (PLTRELSZ) 960 (bytes) 0x00000014 (PLTREL) REL 0x00000017 (JMPREL) 0xbe40 0x00000011 (REL) 0xbe00 0x00000012 (RELSZ) 64 (bytes) 0x00000013 (RELENT) 8 (bytes) 0x6ffffffe (VERNEED) 0xbd70 0x6fffffff (VERNEEDNUM) 2 0x6ffffff0 (VERSYM) 0xba72 0x00000000 (NULL) 0x0
拷贝动态库:[tekkamanninja@Tekkaman-Ninja
lighttpd-1.4.18]$ cp
~/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/arm-9tdmi-linux-gnu/lib/libdl-2.3.2.so~/working/nfs/rootfs/lib/[tekkamanninja@Tekkaman-Ninja
lighttpd-1.4.18]$ cp
~/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/arm-9tdmi-linux-gnu/lib/libdl.s* ~/working/nfs/rootfs/lib/
在开发板为此程序新建一个用户及存储网页的根目录以及一个log目录:
开发板操作:[root@~]#adduser -g user lighttpdChanging password for lighttpdEnter the new password (minimum of 5, maximum of 8 characters)Please use a combination of upper and lower case letters and numbers.Enter new password:Bad password: too short.
Warning: weak password (continuing).Re-enter new password:passwd[786]: password for `lighttpd' changed by user `root'Password changed.[root@~]#
HOST 操作:[tekkamanninja@Tekkaman-Ninja lighttpd-1.4.18]$ cd ../../nfs/rootfs/home/lighttpd/[tekkamanninja@Tekkaman-Ninja lighttpd]$ su口令:[root@Tekkaman-Ninja lighttpd]# mkdir html[root@Tekkaman-Ninja lighttpd]# chmod 777 html/[root@Tekkaman-Ninja lighttpd]# mkdir ../../var/log/lighttpd[root@Tekkaman-Ninja lighttpd]# chmod 777 ../../var/log/lighttpd
将移植好的程序(整个目录,其中包含了bin、sbin、lib和share目录)拷贝到开发板根文件系统的根目录下:[root@Tekkaman-Ninja lighttpd]# mv /lighttpd /home/tekkamanninja/working/nfs/[root@Tekkaman-Ninja lighttpd]# exitexit
四、运行程序
在开发板上操作:
[root@~]#/lighttpd/sbin/lighttpd -f /etc/lighttpd.conf将测试静态网页放在server.document-root设置的目录下,并在HOST的浏览器下输入开发板IP,测试通过。
至于CGI的运行,我还不懂配置,有空再研究!
三:移植shttpd Web服务器到嵌入式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-gccAR = /home/tekkamanninja/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-arCFLAGS = -DNO_SSL
加上CFLAGS = -DNO_SSL,是因为如果编译SSL支持,会因符号未定义而无法通过。所以我去除了SSL 支持。
交叉编译:
[tekkamanninja@Tekkaman-Ninja src]$ make unix
开看程序需要那些动态库:[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
Dynamic section at offset 0x12cc8 contains 20 entries: 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/
三、运行shttpd
因为shttpd 没有配置文件,所以配置是由启动参数加的,比如我在开发板中操作如下:[root@~]#shttpd -root /var/www -ports 80 &
意思是Web 根目录为/var/www 用80端口提供服务。
还有别的参数如下:[root@~]#shttpd --helpSHTTPD version 1.39 (c) Sergey Lyubkausage: shttpd [options] [config_file] -A -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
这里说明一下-cgi_ext :shttpd没有CGI 目录的概念,它是通过认文件扩展名来识别的。要运行CGI 程序,默认情况下就要在编译好的程序后面加上 “.cgi””pl””php”等后缀。而 -cgi_ext 是你可以自定义其后缀。
四、开发板测试
静态网页测试
在开发板的 /var/www(由-root指定的根目录)放入测试网页:index.html 在HOST的浏览器中输入开发板地址,测试通过!
CGI测试
在 /var/www (由-root指定的根目录)放入测试 CGI 程序:helloworldCGI.cgi 在流览器中输入(开发板地址)192.168.1.2/helloworldCGI.cgi ,测试通过!
转载地址:http://idevl.baihongyu.com/