注:最近在做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
NNLLNLX
YKfT(j9ceQyb[Y[H\HZZ[XZZ[[^][KM
KXLXX
YMMKfT(j9ceQyb[Y[H\HZZ[XZZ[[^][KM
KMLLYLLLL
Mhmz++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\JOKKHKO\
[YK
Y\[YH N]\
[YI
] NY\ N]\
\
LZ[H]KNXY\N]J
[YN \Y\ \[YKY\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 |