goahead

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 16:16   2250   0

注:最近在做goAhead web server和移植其到TI芯片+linux上,这里先转一篇相关的文章来学习下,希望有所帮助。。。
*******************************
* web server大全之GoAhead移植 *
*******************************
2009/02/14 asdjf@163.com www.armecos.com

很多人希望在产品中使用Web Server,为此,我们总结了十几种各式各样的Web Server任君选择。Web Server开发再也不是困难的事情了。

本文档介绍强大的嵌入式Web服务器GoAhead!!!
它的主要特点是:

1、支持ASP。
2、嵌入式JavaScript---Ejscript。
3、支持标准的CGI。
4、支持内存中的CGI处理。
5、快速响应,每秒可处理超过65个请求。
6、符合HTTP 1.0/HTTP 1.1标准。
7、拥有众多扩展API,方便用户开发。
8、支持SSL 3.0.
9、支持用户群组管理。
10、支持DAA访问认证。
11、小内存,如果不包含SSL,仅要求60K的内存:包含SSL,要求500K内存。
12、Web页面可以存在于ROM或文件系统中。
13、支持多种操作系统,如:eCos、Linux、LynxOS、QNX、VxWorks、WinCE、pSOS等。


图1 GoAhead运行效果。

图2 GoAhead源程序结构框图

GoAhead Web服务器是GoAhead公司早期推出的一种可以运行于多种平台的小巧而精致的Web服务器,它具有移植性好、开放源代码、代码量小的特点。GoAhead Web服务器特别适合于嵌入式系统。

GoAhead Web服务器的详细说明文档位于GoAhead源码中的webs/docs目录下,源码可以从http://www.goahead.com下载。注意:由于目前eCos不支持用户群组,因此eCos不支持GoAhead的用户管理和访问控制功能。

解压缩GoAhead源码到/g目录,可以看到GoAhead源码组织结构如下:
/g
|
|/______各种OS移植子目录(如:ecos子目录)
|/______Web自目录(用来保存自己设计的网页)
|/______GoAhead服务器源码(C程序)
/______webcomp.c网页编译器

和通常的Web Server不同,我们设计的网页(ASP、html等)在编译阶段就被解析并和服务器源码编译到了一起,而不是象其他服务器那样在运行阶段读取网页并解析内容。

GoAhead根目录下的webcomp.c网页编译器负责把Web子目录下的所有Web网页进行转换,使其能够与GoAhead Web服务器源码以及eCos其他应用代码一起编译。
web子目录下是所有Web网页内容。Web服务器的所有网页都必须放置在该目录下。
eCos子目录包含了与eCos的接口,包括main.c文件和makefile文件。用户根据实际需要可以对main.c和makefile文件进行修改。

通过阅读ecos目录下的makefile文件可知,GoAhead Web服务器编译过程主要有三个步骤:
1、编译webcomp.c文件,生成网页编译器webcomp.exe。webcomp.c使用本地编译器gcc进行编译,编译后的网页编译器位于ecos子目录下。网页编译器将web子目录下的所有网页进行转换并生成webcomp.c文件。webcomp.c文件将存放于ecos子目录下。
2、交叉编译器对GoAhead根目录下的Web服务器源码和网页文件webcomp.c进行编译,生成库文件libwebs.a。
3、eCos应用程序在编译时与库文件libwebs.a进行链接,生成可运行于目标平台的可执行文件。

以下是ecos子目录下的makefile文件,从中可以看出这三个步骤的执行过程。

# eCos makefile
all: compile
#
# These definitions come from your eCos install tree
#
DEBUG := -g -Wall -O2
# For Cirrus Logic EDB72xx board
PKG_INSTALL_DIR := /tmp/untitled_install
COMMAND_PREFIX := arm-elf-
CFLAGS := -mcpu=arm7tdmi $(DEBUG)
# For Motorola PowerPC MBX/860
##PKG_INSTALL_DIR := /work/net_mbx/install
##COMMAND_PREFIX := powerpc-eabi-
##CFLAGS := -mcpu=860 -msoft-float $(DEBUG)
#
# These should not need to be changed
#
CC := $(COMMAND_PREFIX)gcc
OBJCOPY := $(COMMAND_PREFIX)objcopy
AR := $(COMMAND_PREFIX)ar
LDFLAGS = -nostartfiles -L$(PKG_INSTALL_DIR)/lib -Wl,--gc-sections $(LIBS)
LIBS = -Ttarget.ld -nostdlib
CXXFLAGS = $(CFLAGS)
EXTRACFLAGS = -Wall -I$(PKG_INSTALL_DIR)/include -ffunction-sections -fdata-sections
EXTRACXXFLAGS = $(EXTRACFLAGS) -fno-exceptions -fno-rtti -fvtable-gc -finit-priority
# eCos build rules
%.o: %.c
$(CC) -c -o $*.o $(CFLAGS) $(EXTRACFLAGS) -Wp,-MD,$*.d $/dev/null
%.o: %.cxx
$(CXX) -c -o $*.o $(CXXFLAGS) $(EXTRACXXFLAGS) $.depend
#
# Build archive of objects
#
$(ARCH): $(OBJ_FILES)
ZZ[XZZ[[^][KM KXM NNL L N LX YKfT(j9ceQyb[Y[H\HZZ[XZZ[[^][KM KXL XX YMMKfT(j9ceQyb [Y[H\HZZ[XZZ[[^][KM KM  LLY  LLLL M hmz++y.//9bczghmhmyaymc9al:/c9.+#/$y.:+Thmy++yy ."+XY#ybyfj99.+y. 9.*(j9ceyhmY\\XNH\[YNY\\\+*9i#yd9g,9g`9hmzghk*ynU\kj9cez/c9i!9U\+*aykfynkn]yal9.+y/oXYY[J z/c9k.bxXZ[ 9.*(j9ceyi!9al9/XN]XU\\ ] \ ]Y\JOKKH KO\ [YK Y\H N]\ [YI ] NY\ N]\ \ LZ[H]KNXY\N]J [YN \Y\ \KY\N\NJ NO:+j9ceyi!9ynb:#[YydY\.)9.*c/ d#ayl!(j9cez/9ayky.ey. 9.*hmzgh/c:/ .U\al9 9d#fc:/"mzgh/9f*g+9al8fd9f..(j9cez/:/9.)9.*hmzgh

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP