本文内容概要:详细描述了移植goAhead 2.5到S3C2440的linux系统的过程、步骤、遇到的问题及其解决方法。

开发环境:

宿    主   机:window XP;

虚    拟   机:ubuntu9.10;

交叉编译器:arm-uclibc-gcc(arm-linux-gcc-4.3.2可以顺利编译通过)

———————————————————————————————————————————————————————————————————

1. GoAhead Web服务器介绍

goAhead Web服务器,小巧、精致,提供了值得称道的性能,特别适合于嵌入式系统,因此,在很多嵌入式产品如路由器中都用到了goAhead作为嵌入式web服务器。

goAhead Web服务器,具有如下特点:

支持ASP;

嵌入式的JavaScript,即Ejscript;

支持内存中的CGI处理;

快速响应,每秒中可处理超过65个请求;

符合HTTP1.0/HTTP1.1标准;

拥有众多扩展API,方便用户开发;

支持SSL3.0(Secure Sockets Layer),如MatrixSSL(最新版本为:MatrixSSL 3-2);

支持用户群组管理;

支持DAA访问认证;

占用很小内存,如果不包含SSL,仅要求60K内存;包含SSL,要求500K内存;

Web页面可存在于ROM或文件系统中;

支持多种操作系统,如linux、wince、vxworks等等;

当前最新版本为:WebServer 2.5,本次移植即是这个版本。

2. 获取Goahead源码包

地址为:http://www.goahead.com/products/webserver/Download.aspx,当前最新版本为:WebServer 2.5

注:当前下载源码包,需要填写一些个人资料才能下载。

下载后,解压压缩包:

#tar -xzvf webs-2-5.tar.gz

#cd webs-2-5/

3. goAhead源码结构

进入goAhead的源码目录webs-2-5/,很容易了解其源码结构。

webs-2-5/

| 各种OS移植子目录,分别有:CE、ECOS、LINUX、LYNX、MACOSX、NW、QNX4、VXWORKS、WIN

| utils:当前只有webcomp.c,即网页编译器

| www:存放web网页

| wwwdemo:goAhead带的demo网页,里面包含了goAhead的一些文档

| goAhead服务器源程序文件(C程序文件)

从上面可以看到,goAhead支持window系统的,有兴趣的可以在PC机上移植试试。

得到源码后,建议用source insight等工具建一个goAhead工程,便于代码的阅读或者查询API函数等。

4. goAhead自带帮助文档

进入goAhead的wwwdemo目录,找到Webs25GettingStarted.pdf文件,这就是goAhead带的帮助文档,移植前,建议先看下。

5. GoAhead Web服务器移植到arm-linux步骤

在获取源码包并解压后,现在把goAhead移植到arm-linux中,arm指S3C2440,linux-2.6.30.4。

移植步骤很简单,基本上在编译阶段不会出现什么问题,而且这几个步骤在网上诸多博客中都有说明。但在测试服务器的时候,遇到了问题,在浏览器死活都打不开网页,不过,最终还是解决了,请看下面说明。

5.1 修改Makefile文件

进入goAhead源码下的LINUX目录,用UE打开Makefile文件。

Makefile文件默认是虚拟机的本身的GCC编译器,因此,指定其交叉编译器,注意,交叉编译器的版本应与你的文件系统用的交叉编译器一致。

在Makefile文件开头添加如下信息:

CROSS_COMPILE   =/usr/local/arm-uclibc/bin/arm-uclibc-

AS      = $(CROSS_COMPILE)as

LD      = $(CROSS_COMPILE)ld

CC      = $(CROSS_COMPILE)gcc

CPP     = $(CC) -E

AR      = $(CROSS_COMPILE)ar

NM      = $(CROSS_COMPILE)nm

STRIP   = $(CROSS_COMPILE)strip

OBJCOPY = $(CROSS_COMPILE)objcopy

OBJDUMP = $(CROSS_COMPILE)objdump

同时把Makefile中的语句:

matrixsslDir:=$(shell ls -d ../matrixssl-3-1*/)

屏蔽掉。这一句是用来启动SSL matrixssl的,具体参考Webs25GettingStarted.pdf文档中的说明(Page8)。

5.2 修改LINUX/main.c文件:initWebs()函数中指定IP地址

由于LINUX/main.c文件:initWebs()函数中原程序无法正确获得服务器IP;因此置服务器一个静态IP地址。

修改如下:

/*

*  Define the local Ip address, host name, default home page and the

*  root web directory.

*/

/* del by gyr 2011.09.17

if (gethostname(host, sizeof(host)) < 0) {

error(E_L, E_LOG, T("Can't get hostname"));

printf("initWebs::Can't get hostname.n");      // added by gyr 2011.09.17

return -1;

}

if ((hp = gethostbyname(host)) == NULL) {

error(E_L, E_LOG, T("Can't get host address"));

printf("initWebs::Can't get hostname...n");    // added by gyr 2011.09.17

return -1;

}

memcpy((char *) &intaddr, (char *) hp->h_addr_list[0],

(size_t) hp->h_length);

*/

intaddr.s_addr = inet_addr(T("192.168.1.168"));     // added by gyr 2011.09.17

5.3 编译:make clean;make

在shell中进入LINUX目录下,执行命令make clean;make即可编译通过。

编译通过后,在LINUX目录下,得到两文件,分别为:libwebs.a和webs可执行文件。用如下命令查看webs执行文件依赖的库文件:

/usr/local/arm-uclibc/bin/arm-uclibc-readelf -d webs

其中,arm-uclibc-依你用的交叉编译器而定。

得到如下信息:

Dynamic segment at offset 0xf638 contains 18 entries:

Tag        Type                         Name/Value

0x00000001 (NEEDED)                     Shared library: [libfloat.so.1]

0x00000001 (NEEDED)                     Shared library: [libc.so.0]

0x0000000c (INIT)                       0x8e2c

0x0000000d (FINI)                       0x15aa0

0x00000004 (HASH)                       0x8130

0x00000005 (STRTAB)                     0x8924

0x00000006 (SYMTAB)                     0x83a4

0x0000000a (STRSZ)                      712 (bytes)

0x0000000b (SYMENT)                     16 (bytes)

0x00000015 (DEBUG)                      0x0

0x00000003 (PLTGOT)                     0x1f704

0x00000002 (PLTRELSZ)                   552 (bytes)

0x00000014 (PLTREL)                     REL

0x00000017 (JMPREL)                     0x8c04

0x00000011 (REL)                        0x8bec

0x00000012 (RELSZ)                      24 (bytes)

0x00000013 (RELENT)                     8 (bytes)

0x00000000 (NULL)                       0x0

从上面可看到,webs依赖libc.so.0和libfloat.so.1两动态文件,查看文件系统中lib目录下是否包含了这两动态文件,如果没有,则需从交叉编译器安装路径中获取这两个动态库文件到文件系统lib目录中。

5.4 测试webs服务器

用FTP把webs执行文件传到目标板中,本人把其放到了/mnt/webs/目录中。

需要注意的是,在goAhead2.5版本中,web网页的根目录是在webs程序的../www或../wwwdemo(webs执行时带 -demo参数)中,这一点可查看LINUX/main.c文件中190行处代码和注释。因此,把goAhead源码目录下的www和wwwdemo两文 件夹传用FTP传到/mnt/目录下。

在PC机用IE浏览器浏览goAhead服务器的网页,输入http://192.168.1.168:8080/

192.168.1.168是目标板的IP地址即goAhead服务器的地址,8080是goAhead用的端口号,这是默认的端口号,定义在webs.h文件。

5.4.1 测试问题

用浏览器死活不管怎样,都打不开home.htm网页的,提示是404错误,意思是:

Access Error: Site or Page Not Found

Cannot open URL

5.4.2 不能打开网页的原因和解决方法

折腾许久,决定从源代码着手。最后定位在default.c文件中websDefaultHandler()函数中,这个函数是处理默认网页的。

具体代码段如下:

/*

*  We do whitelist validation in addition to standard URL validation.

*  The whitelist should really catch anything invalid first.

*  If the whitelist check fails, rebuild the list and try again.

*  Also validate if we are not on a secure connection, but the whitelist

*  entry has the SSL flag set, do not serve the page.

*/

#ifdef WEBS_WHITELIST_SUPPORT

if ((rc = websWhitelistCheck(wp->url)) < 0) {

websBuildWhitelist();

if ((rc = websWhitelistCheck(wp->url)) < 0) {

websError(wp, 404, T("Cannot open URL"));

return 1;

}

}

if (!(flags & WEBS_SECURE) && (rc & WHITELIST_SSL)) {

websError(wp, 500, T("HTTPS access required"));

return 1;

}

#endif /* WEBS_WHITELIST_SUPPORT */

问题就出现在上面这个代码中,我的理解是goAhead关于网页安全方面功能,即网页白名单(WHITELIST)功能支持。

把宏WEBS_WHITELIST_SUPPORT关闭,重新编译,再测试,OK了,可以打开网页了。

上述只是简单的移植测试,然我们最终的目的是要把goAhead移植到我们的应用程序中的,在大多数的应用中,它也只是应用程序中的一个模块,因此,后面的工作量还是蛮多的,包括SSL的移植等等。

6. 参考资料

http://www.docin.com/p-67202641.html

http://www.cnitblog.com/zouzheng/archive/2008/01/04/38464.html

http://www.dzjs.net/html/qianrushixitong/2009/0812/3890.html

http://blog.csdn.net/zyboy2000/article/details/6191266

http://www.bianceng.cn/webkf/aspx/201103/25071.htm

http://blog.chinaunix.net/space.php?uid=22982394&do=blog&id=116136

arm linux goahead,goAhead 2.5嵌入式web服务器移植到arm9 2440 + linux中相关推荐

  1. goaheadlinux移植_goAhead2.5嵌入式web服务器移植

    1. GoAhead Web服务器介绍 goAhead Web服务器,小巧.精致,提供了值得称道的性能,特别适合于嵌入式系统,因此,在很多嵌入式产品如路由器中都用到了goAhead作为嵌入式web服务 ...

  2. 嵌入式Web服务器移植

    第一步 Boa程序的移植 1.下载Boa源码 下载地址: http://www.boa.org/, 或者http://sourceforge.net 最新发行版本: 0.94.13 下载 boa-0. ...

  3. 三种嵌入式web服务器(Boa / lighttpd / shttpd)的 linux移植笔记

    一:移植Boa(web服务器)到嵌入式Linux系统 一.Boa程序的移植 1.下载Boa源码     下载地址: http://www.boa.org/     目前最新发行版本: 0.94.13  ...

  4. 常见嵌入式WEB服务器

    常见嵌入式WEB服务器 最近在搞一款应用到嵌入式WEB的产品,早期常为搭建服务器头疼,故在此列出几款常用的.不过我公司现在使用的goahead,下载见www.goahead.com 2.5.1版本.下 ...

  5. 嵌入式 boa服务器移植

    随着Internet技术的兴起,在嵌入式设备的管理与交互中,基于Web方式的应用成为目前的主流,这种程序结构也就是大家非常熟悉的B/S结构,即在嵌入式设备上运行一个支持脚本或CGI功能的Web服务器, ...

  6. goahead(嵌入式Web服务器)之交叉编译、移植篇

    GoAhead简介: GoAhead是一个开源(商业许可).简单.轻巧.功能强大.可以在多个平台运行的嵌入式Web Server. GoAhead主要特性: 1 很小的内存消耗 2 支持认证功能Dig ...

  7. goahead(嵌入式Web服务器)之总结篇

    goahead编译环境介绍 本次章节主要讲解goahead在不同平台的编译,如x86.arm平台.提供gohead源码集成编译,支持https协议,提供openssl源码以及不同平台的编译环境,提供g ...

  8. goahead服务器性能,嵌入式Web服务器GoAhead的研究与应用

    摘要: 随着计算机及网络技术的发展和应用,嵌入式系统的研究成为国内外的研究热点,而嵌入式Web服务器也显示出越来越重要的作用.如今嵌入式Web服务器已经成为国内外嵌入式领域的一个研究热点.目前大部分网 ...

  9. goahead(嵌入式Web服务器)之文件传输篇

    goahead文件上传原理: 使用html form即表单提交文件上传请求,web服务器核心处理接收客户端Post过来的文件数据(注意post的是二进制数据),最后,web服务器把接收到文件数据以二进 ...

最新文章

  1. java中double类型精度丢失问题及解决方法
  2. 酒桌上,领导将酒泼到你脸上......
  3. [CodeForces1603D] Artistic Partition(四边形不等式 + 决策单调性优化dp + 分治 + 线性筛 + 数论分块)
  4. 使用CreateThread函数创建线程
  5. Lua游戏开发----模块
  6. Java File类详解
  7. PicoDet的学习笔记
  8. 转:百度又开始踢新浪屁股了
  9. MapGuide Open Source 2.2发布
  10. 跳棋java课程设计,C语言课程设计(论文)跳棋.doc
  11. HTML技术(基础/列表/表格/表单)
  12. 在手机与计算机之间进行文件传输的方式,电脑和手机传输文件方法_电脑和手机如何传文件-win7之家...
  13. 【K8S系列】快速初始化⼀个最⼩集群
  14. 《树莓派实战秘籍》——1.15 技巧15连接GPIO脚到面包板上
  15. 中国象棋游戏Chess(3) - 实现走棋规则
  16. C语言execvp实现简易Shell的两种方法
  17. Flume之生产正确的使用方式一(Singel Agent)
  18. 无关风月怎谈价格:个性化直播源码打造多功能一对一交友、直播程序功能
  19. 基础Java练习16:学生喂养动物
  20. 去了北京大兴机场后,我果断抛弃首都机场,去北京,首选大兴

热门文章

  1. Java多线程(Thread)间通信和共享数据
  2. python爬取交通违法记录_python爬虫爬取汽车页面信息,并附带分析(静态爬虫)...
  3. 宝塔 开启xdebug_Xdebug 使用说明
  4. Centos7安装WPS打开无反应
  5. 大家小心~~财付通故意留下bug给骗子留下后门
  6. img图片加载失败选择默认替换图片
  7. python数据结构与算法 河内塔问题
  8. Android 经典蓝牙开发
  9. RTMP 协议MP4(f4v)格式视频VOD点播实现过程
  10. 推荐 5 个 火火火火 的 CSS 项目