goahead3.4.4在wxworks6.9下的移植

来源:互联网 发布:淘宝信誉查询131458网 编辑:程序博客网 时间:2024/06/06 11:04

项目需要,得搞个web server,中午有点时间就尝试着移植一个,刚刚弄好,乘热打铁,记录一下,以免遗忘……


首先是环境,wxworks6.9 + workbench3.3 + PPC85XXX


关于webserver,网上大多推荐goahead,那就用这个吧,以前都在linux和windows下开发的,vxworks第一次用,不甚了解,大家说好那就好吧,用的试试。


首先下个goahead,必须上最新版本的,网上大多都是什么2.18版本的,跟现在3.x版本有一定的区别,所以移植工作得自己摸索摸索。下载就不说了,托管在gitbub上面的。


解压……


解压完成后应该有这些东西:



准备工作就这些,然后就开始移植了。

1、先在workbench上建立一个downloadable kernel module project工程,直接创建,编译器根据自己实际情况选择就行了,其他没什么设置的。

2、导入文件,首先把src文件夹的所有文件复制到工程目录下,再把projects文件夹下的goahead-vxworks-default-me.h文件也复制到工程目录下,并且把复制到工程目录下的goahead-vxworks-default-me.h文件名修改为me.h!!一定要把这个文件名修改了,这个文件是个配置文件,程序中都管这个文件叫"me.h",他这里命名为goahead-vxworks-default-me.h我估计是为了区分不同操作系统下的me.h,然后自己根据实际情况选一个自己用的,这里我选择的就是goahead-vxworks-default-me.h这个文件。复制完后工程目录底下应该是这样的:


3、把不用的删了,这里我没用ssl,因为电脑上也没有支持ssl的那些个库,如果用ssl的话还得配置一些其他东西,所以就把他给删了。这里把工程文件夹里的src/ssl文件夹全部删掉,删完之后src文件夹下应该是这样的:


文件该复制的复制了,该删的删了,开始改程序了。

4、添加头文件路径:

workbench3.3添加头文件……右键工程->propertis,弹出工程配置对话框,对话框左边选build properties,右边选Paths,然后把头文件路径添加好,添加完如图所示:



5,添加相应的define,还是在刚才那个对话框里面的define栏下添加:

-DWEBS

-DUEMF 
-DOS="VXWORKS" 

-DVXWORKS 

-DUSER_MANAGEMENT_SUPPORT 

-DDIGEST_ACCESS_SUPPORT

如果没有CPU的define的话还得添加CPU的信息,这个信息要参见"osdep.h"中的定义,例如我这里用的是PPC,那么就是需要-D__ppc__,如果系统自动跟你把CPU定义好了,这里就不需要添加这条define,添加完define后应该是这样的:


6、修改me.h,将其中跟ssl相关的东西关掉,不然ld之后系统提示有符号找不到,修改如下

#ifndef ME_COM_OPENSSL
    #define ME_COM_OPENSSL 1

改为:

#ifndef ME_COM_OPENSSL
    #define ME_COM_OPENSSL 0

------------------------------------------------------

#ifndef ME_COM_SSL
    #define ME_COM_SSL 1

改为:

#ifndef ME_COM_SSL
    #define ME_COM_SSL 0

------------------------------------------------------

#ifndef ME_CONFIG_CMD
    #define ME_CONFIG_CMD "me -d -q -platform vxworks-x86-default -configure . -with openssl -gen make"
#endif

改为:

#ifndef ME_CONFIG_CMD
#define ME_CONFIG_CMD "me -d -q -platform vxworks-x86-default -configure . -gen make"
#endif


7、这个时候应该能够编译通过了,有些编译器不支持双斜杠注释的会报错,自己把双斜杠注释改成斜杠星注释就行了。


8、回到goahead.c,这个文件里面有个MAIN(goahead, int argc, char **argv, char **envp),这个玩意,这个东西其实就是goahead函数,然后goahead函数再调用innerMain函数,这个地方其实就是innerMain函数的定义。这里有这样两句话:

route = "route.txt";
auth = "auth.txt";

首先是这两个文本文件,需要先拷贝到板子上的flash里面去,然后根据拷贝的目录修改这里的路径,例如我是拷贝到"/tffs0/"这个路径底下的,所以这里就写成:

route = "/tffs0/route.txt";
auth = "/tffs0/auth.txt";


9、上述步骤全部完成后,应该就可以了,然后编译,将.out文件拷贝到板子上的flash中,然后再拷贝一个测试网页到板子的flash中,ld这个.out,然后运行,如果顺利的话应该就可以了。


10、再补充两句,关于运行这个web server,运行方法就是调用一下goahead函数,这个函数如何调用最好配合源码研究一下,函数定义在哪里,前面已经说了,这里只说一下最简单的用法。如果web页面的路径在板子上是“/tffs0/index.html”,板子的网口是192.168.0.15,则启动web server的命令为:goahead "/tffs0/index.html", "192.168.0.15"。

goahead函数传递的都是字符串指针!


OK!剩下的就自己用浏览器访问一下192.168.0.15,看看网页是不是正常显示了,如果有显示不出来,对着源码看看goahead这个函数吧,如果是网页not found之类的,看看file.c这个文件,应该就明白了


记录完毕,欢迎交流





2 0