这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » [原创]goAhead WebServer在VxWorks上的移植笔记

共1条 1/1 1 跳转至

[原创]goAhead WebServer在VxWorks上的移植笔记

菜鸟
2005-10-24 20:41:46     打赏
goAhead WebServer在VxWorks上的移植笔记 goAhead是一款功能比较全的开源嵌入式web server。
goAhead支持asp,嵌入式javascript,CGI以及静态页面html格式。
快速响应,每秒可处理超过50个请求。
如果不包含SSI,仅要求60K的内存;包含SSI,要求500K内存。
web页面可以存在ROM或文件系统中。
支持多种操作系统,包括VxWorks,LINUX,Windows,WinCE,pSOS等。
(一)编译源代码
1,我使用的VxWorks开发环境是Tornado2.2,把goAhead所有的源码加到自己VxWorks image编译环境中,
这个步骤可以使用Tornado来做,也可以直接修改makefile文件,建议直接修改makefile。
2,定义5个宏,-DWEBS_PAGE_ROM -DWEBS -DUEMF -DOS="VXWORKS" –DVXWORKS
makefile可以把宏传递给源文件,作用就相当于在预编译的每个每个文件中定义了这样的宏。
比如你要定义宏 WEB,就可以直接在cc后面加-Dmacr
$(CC) -DWEB
3,编译时你会发现编译不通过,说websSSL.c出错,好的,我们把这个文件remove掉,另外webcomp.c也要去除,一切ok。

(二)加入web页面文件。
web页面在iamge中存放形式有2种,一是按原目录存放在嵌入式文件系统中,二是把所有的页面文件压缩后存为静态全局数组。
嵌入式应用中大部分没有标准的文件系统,所以这里我们也使用静态数组的方式。
源码中判断一个宏“WEBS_PAGE_ROM”,如果没有定义这个宏,他就按标准的read文件方式去文件系统中取页面文件数据;
如果定义了这个宏就到数组中取数据。这就是为什么我前面要定义一个WEBS_PAGE_ROM宏。
另外在main.c中要把根路径修改成webs
#define ROOT_DIR T("webs")
(三)如何把页面文件压缩进数组
goAhead想得很周全,专门为压缩进数组写了一个文件合并程序,就是webcomp.c,在linux中编译这个文件。
进入linux子目录,修改Makefile文件,加入下面的内容:
comp:
$(CC) -I../ -I./ -o webcomp $(DEBUG) $(CFLAGS) $(IFLAGS) $(LDFLAGS) ../webcomp.c
find ../web -name "*.*" > websfile
./webcomp ../web websfile > ../webrom.c
执行make comp最后有点错,不要理会。
这样../webrom.c内容已经被修改,大小看你的web页面文件的总大小了,我把goAhead中的web压缩了有1M。
然后把这个webrom.c考过来替换你的webrom.c。
(四)启动web server服务
web server只用了系统的socket协议栈和定时器,自己没有建任务,所以为了性能监视方便,建议专门建一个任务给他。
这样web server的内存使用,任务状态就可以看到了。
如果不建任务就要在别的任务,或者干脆在usrAppinit()中加入web server入口“main(0,0)”。
到此为止全部结束,我的程序用了1M,页面上面说过1M,这样image增加了2M!!!,太大了。
对于有些OS没有完整的TCP stack,对于goAhead web server的移植就有点麻烦了,还得按照标准的协议栈补全。
如果大家碰到什么问题,欢迎和我讨论,myxy1997@hotmail.com ,myxy1997@163.com 参考资料:
1,GoAhead WebServer移植小结 by rover2 http://bbs.edw.com.cn
2,跟我一起写Makefile by 陈皓
3,goAhead web server doc by goAhead Inc.



关键词: 原创     goAhead     WebServer     VxWo    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]