作者:reille 本博客网址:http://blog.csdn.net/reille/,转载请注明出处。 本文内容概要:详细描述了移植goAhead 2.5到S3C2440的linux系统的过程、步骤、遇到的问题及其解决方法。 开发环境: 宿 主 机:window XP; 虚 拟 机:ubuntu9.10; 交叉编译器:arm-uclibc-gcc(arm-linux-gcc-4.3.2可以顺利编译通过) 注:移植好的源代码下载地址:移植好的goAhead源码包下载地址 ——————————————————————————————————————————————————————————————————— 1. GoAhead Web服务器介绍goAhead Web服务器,小巧、精致,提供了值得称道的性能,特别适合于嵌入式系统,因此,在很多嵌入式产品如路由器中都用到了goAhead作为嵌入式web服务器。 goAhead Web服务器,具有如下特点:
当前最新版本为:WebServer 2.5,本次移植即是这个版本。 2. 获取Goahead源码包地址为: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文件开头添加如下信息:
5.2 修改LINUX/main.c文件:initWebs()函数中指定IP地址由于LINUX/main.c文件:initWebs()函数中原程序无法正确获得服务器IP;因此置服务器一个静态IP地址。 修改如下:
5.3 编译:make clean;make在shell中进入LINUX目录下,执行命令make clean;make即可编译通过。 编译通过后,在LINUX目录下,得到两文件,分别为:libwebs.a和webs可执行文件。用如下命令查看webs执行文件依赖的库文件:
其中,arm-uclibc-依你用的交叉编译器而定。 得到如下信息:
5.4 测试webs服务器用FTP把webs执行文件传到目标板中,本人把其放到了/mnt/webs/目录中。 需要注意的是,在goAhead2.5版本中,web网页的根目录是在webs程序的../www或../wwwdemo(webs执行时带 -demo参数)中,这一点可查看LINUX/main.c文件中190行处代码和注释。因此,把goAhead源码目录下的www和wwwdemo两文 件夹传用FTP传到/mnt/目录下。 在PC机用IE浏览器浏览goAhead服务器的网页,输入http://192.168.1.168:8080/ 192.168.1.168是目标板的IP地址即goAhead服务器的地址,8080是goAhead用的端口号,这是默认的端口号,定义在webs.h文件。 5.4.1 测试问题用浏览器死活不管怎样,都打不开home.htm网页的,提示是404错误,意思是: Access Error: Site or Page Not Found Cannot open URL 5.4.2 不能打开网页的原因和解决方法折腾许久,决定从源代码着手。最后定位在default.c文件中websDefaultHandler()函数中,这个函数是处理默认网页的。 具体代码段如下:
问题就出现在上面这个代码中,我的理解是goAhead关于网页安全方面功能,即网页白名单(WHITELIST)功能支持。 把宏WEBS_WHITELIST_SUPPORT关闭,重新编译,再测试,OK了,可以打开网页了。
上述只是简单的移植测试,然我们最终的目的是要把goAhead移植到我们的应用程序中的,在大多数的应用中,它也只是应用程序中的一个模块,因此,后面的工作量还是蛮多的,包括SSL的移植等等。 6. 参考资料
|
|
来自: champion_xu > 《goahead》