GoAhead 2.5嵌入式Web服务器移植到ARM9 2440 + Linux中

宿    主   机:window XP;

虚    拟   机:Ubuntu 9.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源码包

地址为:,当前最新版本为: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-依你用的交叉编译器而定。

得到如下信息:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwzjdp.html