Goahead简介
GoAhead WebServer 它是一个源码免费、功能强大、可以在多个平台运行的嵌入式WebServer。
- 支持ASP
- 嵌入式的javascript
- 标准的CGI执行
- 内存中的CGI处理GoForms
- 扩展的API
- 快速响应,每秒可处理超过50个请求
- 完全和标准兼容
- 如果不包含SSI,仅要求60K的内存;包含SSI,要求500K内存
- web页面可以存在ROM或文件系统中
- 支持多种操作系统,包括eCos 、LINUX 、LynxOS 、QNX 、VxWorks 、WinCE
Goahead核心
ASP过程
用来获得嵌入式系统正在运行中的进程的各种状态信息,并最终返回响应浏览
- 在goahead服务器中,网页以.asp的扩展名保存,asp是一种动态服务页面;
- 要创建一个ASP文件中的ASP脚本就必须使用asp界定符 <% function(arguments, …); %>,这里的脚本使用goahead所支持的嵌入式javascript即Ejscript;
- Ejscript由goahead提供支持,goahead提供Ejscript解析器负责解析脚本函数,定位、传递脚本函数中的实参给此脚本函数对应的c语言实现的经过注册的全局函数;
- 在goahead源码中使用一个自己定义的c函数,这个c函数通过调用goahead服务器中API函数 websAspDefine 向服务器注册此c函数,这样此c函数便成为了Ejscript的一个全局函数,负责具体实现Ejscript查询显示信息的功能。
具体实例
|
|
GoForm过程
根据Form表单Post上来的表单信息去设置和管理嵌入式系统设备
- GoAhead WebServer可以实现一个灵活的URL处理程序;
- .asp网页文件中form表单样式’ action=”/goform/ConfigInfo” action=”post” ‘,goahead服务器url处理器会自动解析goform/之后的内容;
- 解析后的内容 ConfigInfo 对应于goahead服务器中经过 websFormDefine 注册的C程序,这里与ASP过程中的注册过程类似,这里的C程序负责处理表单数据并与系统主进程通信;
- 上述的过程便是goahead提供的Goform过程,即内存中的CGI处理过程,与标准的CGI处理过程的区别是这里的Goform过程与goahead服务器进程共享地址空间,Goform过程所需得到的表单信息均由goahead服务器提供的标准的API函数 websGetVar 来获得,标准版本的CGI处理会导致在对于每一个CGIURL的请求产生一个新的进程;
具体实例
|
|
Goahead架构
GoAhead源码分析—转载
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移植
本文中的移植过程是转载自下面这篇文献的,虽然目标平台不同,但方法基本一样,致谢原作者!
Goahead 嵌入式web服务器移植到arm9 2440 + linux中
开发环境
- 宿主机
- 戴尔windows 10操作系统;
- 虚拟机
- Redhat Enterprise Linux5;
- 开发板
- 主控芯片为PowerPC架构的MPC85xx系列的实验板;
- 内核版本linux-2.6.20
- 交叉编译器
- ppc_8xx-gcc;
源码下载
移植步骤
修改Makefile文件
选择LINUX目录下的Makefile文件,添加如下内容:
这里的CROSS_COMPILE是虚拟机交叉编译环境经变量 ppc_8xx-gcc<br>
同时需要根据情况注释掉Makefile中的下列语句:
|
|
这一句是用来启动SSL matrixssl的,若当前系统不支持,就按上面所说注释掉这一句;Goahead官方文档中给出的说明如下:
- The Makefiles for LINUX and MACOSX will detect the MatrixSSL package, apply the necessary preprocessor defines, and link with the SSL library.
修改main.c文件
由于LINUX/main.c文件:initWebs()函数中原程序无法正确获得服务器IP;因此置服务器一个静态IP地址。
此处的ip地址可以是我们指定好的实验板的ip地址,也可以是在这里编写程序使得goahead服务器到flash中读取得到的地址;
修改default.c文件
在上文中提到的本次移植过程的参考文章中碰到了打不开网页的现象,我在实践过程中也遇到了相同的情况;错误提示:
参考文章给出了解决方法,这里就不详细描述了,解决方法请参考上文链接;这个错误与默认网页的处理有关,具体涉及到了default.c文件中的WebsDefaultHandler()函数。
编译源码
修改完必要的文件之后便可以执行编译过程了
|
|
编译成功之后会生成一个可执行的文件./webs和一个./libwebs.a的静态库文件,由于我这里实验板使用的文件系统为网络文件系统NFS,所以这里可以复制这两个文件所在目录与网页文件所在目录到目标版的文件系统当中,执行程序
或者
之后打开浏览器,访问http://192.168.186.138:8080 便可以访问到默认网页内容。
后续
接下来的过程中我将使用Goahead作为web服务器完成路由器网络管理部分应用层的设计,主要是面向管理人员和用户的网页管理配置部分的内容。