移植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-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
加上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 --help
shttpd version 1.39 (c) sergey lyubka
usage: 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 ,测试通过!

直流电逆袭,再度冲击全球设备市场?
金庸去世马云悼念金庸称若无先生不知是否会有阿里 分解马云和金庸什么关系
内存容量和硬盘容量的有什么区别?如何选择合适的内存
单灯控制器工作原理是什么?单灯控制器是如何控制灯具的?
沈阳启动电网应急工程项目,将全力加快电网工程建设的进程
移植shttpd Web服务器到嵌入式Linux系统
芯片制造到底有多难?真正的芯片制造过程十分复杂
AI是否会成为下一次冷战的“核武器”?
极速智能一体机 挖掘高质量金融数据价值
工业4.0新浪潮来袭 发展过程需分成五大阶段
政策频发,2017年人工智能产业腾飞,2030年AI产业规模将超10万亿
iPhone 8将会配备全新传感器
人工智能处理器骁龙855加持 小米9升级AI体验
传音控股新产品Sparkle上线,享移动互联网发展成果
特斯拉Model Y,如约而来 七座车型,全景天窗
近5年我国OLED电视市场份额未有大突破
2021世界半导体大会|赛迪研究院成功举办“2021世界半导体大会”
浅谈贴片安规Y电容的优缺点
华南地区首个AI公园项目已正式启动
易华录提出面向数据湖的数据安全治理框架