首页 > 编程知识 正文

arm嵌入式系统课后答案(arm9嵌入式第三版课后答案)

时间:2023-05-06 07:13:58 阅读:65519 作者:1363

web服务嵌入式linux makefile编译器ssl目录(() ) ) )。

作者: reille

此博客的URL:http://blog.csdn.net/reille/,转载请注明出处。

本文内容简介:阐述了goAhead 2.5至s3c 2440 Linux系统移植的过程、步骤、面临的问题及其解决方法。

开发环境:

主机:窗口XP;

虚拟机: ubuntu9.10;

交叉编译器: arm-uclibc-gcc (arm-Linux-gcc-4.3.2可顺利编译)

注:移植的源代码下载地址:移植的goAhead软件包下载地址

——3354——3——3——3——33——333——33——333334——3——333——33333——3333——333——333——3333——3333——333333——33333——33334333333333——333333

1. GoAhead Web服务器介绍了goAhead Web服务器,提供了小巧、精致、值得称赞的性能,特别适用于嵌入式系统。 因此,在路由器等许多嵌入式产品中,goAhead被用作嵌入式web服务器。

goAhead Web服务器,具有如下特点:

ASP支持; 的内置JavaScript,即Ejscript; 高速响应,支持内存中的CGI处理,每秒可处理65个或更多请求; 符合HTTP1.0/HTTP1.1标准; 支持安全套接字层(SSL 3.0 ),如具有许多扩展API且易于用户开发的矩阵SSL (最新版本为矩阵SSL3-2); 支持DAA访问验证以管理用户组; 如果占用较小的内存并且不包含SSL,则只需要60K内存。 包含SSL且需要500K内存的网页可以位于ROM或文件系统中。 支持多种操作系统,包括linux、wince和vxworks; 当前最新版本是web服务器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/

|ce、ECOS、LINUX、LYNX、MACOSX、NW、QNX4、VXWORKS和WIN操作系统移植子目录

| utils :目前只有webcomp.c,也就是web编译器

| www :保存网页

| wwwdemo:goAhead拥有的demo页。 包含goAhead文档

| goAhead服务器源文件(c程序文件) ) )。

从上面可以看出,goAhead支持window系统,有兴趣的人可以尝试移植到PC上。

获得源代码后,建议使用source insight等工具构建goAhead项目,以了解代码的可读性和API函数等。

4.goAhead附带的帮助文档位于goAhead的wwwdemo目录中,并找到Webs25GettingStarted.pdf文件。 这是goAhead附带的帮助文档。 在移植之前,我建议你先看看。

5 .将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的开头添加以下信息:

3358 www.Sina.com/viewplaincopycross _ compile=/usr/local/arm-uclibc /自觉的玄关/arm-uclibc-as=$ (gcc CPP=

  STRIP   = $(CROSS_COMPILE)strip  OBJCOPY = $(CROSS_COMPILE)objcopy  OBJDUMP = $(CROSS_COMPILE)objdump  


同时把Makefile中的语句:

[plain] view plain copy matrixsslDir:=$(shell ls -d ../matrixssl-3-1*/)  


屏蔽掉。这一句是用来启动SSL matrixssl的,具体参考Webs25GettingStarted.pdf文档中的说明(Page8)。

5.2 修改LINUX/main.c文件:initWebs()函数中指定IP地址

由于LINUX/main.c文件:initWebs()函数中原程序无法正确获得服务器IP;因此置服务器一个静态IP地址。

修改如下:

[cpp] view plain copy /*  *  Define the local Ip address, host name, default home page and the  *  root web directory.  */   /* del by gyr 2011.09.17     if (gethostname(host, sizeof(host)) < 0) {         error(E_L, E_LOG, T("Can't get hostname"));         printf("initWebs::Can't get hostname.n");      // added by gyr 2011.09.17         return -1;     }     if ((hp = gethostbyname(host)) == NULL) {         error(E_L, E_LOG, T("Can't get host address"));         printf("initWebs::Can't get hostname...n");    // added by gyr 2011.09.17         return -1;     }     memcpy((char *) &intaddr, (char *) hp->h_addr_list[0],         (size_t) hp->h_length); */      intaddr.s_addr = inet_addr(T("192.168.1.168"));     // added by gyr 2011.09.17   5.3 编译:make clean;make

在shell中进入LINUX目录下,执行命令make clean;make即可编译通过。

编译通过后,在LINUX目录下,得到两文件,分别为:libwebs.a和webs可执行文件。用如下命令查看webs执行文件依赖的库文件:

[plain] view plain copy /usr/local/arm-uclibc/自觉的大门/arm-uclibc-readelf -d webs  

其中,arm-uclibc-依你用的交叉编译器而定。

得到如下信息:

[plain] view plain copy Dynamic segment at offset 0xf638 contains 18 entries:    Tag        Type                         Name/Value   0x00000001 (NEEDED)                     Shared library: [libfloat.so.1]   0x00000001 (NEEDED)                     Shared library: [libc.so.0]   0x0000000c (INIT)                       0x8e2c   0x0000000d (FINI)                       0x15aa0   0x00000004 (HASH)                       0x8130   0x00000005 (STRTAB)                     0x8924   0x00000006 (SYMTAB)                     0x83a4   0x0000000a (STRSZ)                      712 (bytes)   0x0000000b (SYMENT)                     16 (bytes)   0x00000015 (DEBUG)                      0x0   0x00000003 (PLTGOT)                     0x1f704   0x00000002 (PLTRELSZ)                   552 (bytes)   0x00000014 (PLTREL)                     REL   0x00000017 (JMPREL)                     0x8c04   0x00000011 (REL)                        0x8bec   0x00000012 (RELSZ)                      24 (bytes)   0x00000013 (RELENT)                     8 (bytes)   0x00000000 (NULL)                       0x0  


从上面可看到,webs依赖libc.so.0和libfloat.so.1两动态文件,查看文件系统中lib目录下是否包含了这两动态文件,如果没有,则需从交叉编译器安装路径中获取这两个动态库文件到文件系统lib目录中。

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()函数中,这个函数是处理默认网页的。

具体代码段如下:

[cpp] view plain copy /*  *  We do whitelist validation in addition to standard URL validation.  *  The whitelist should really catch anything invalid first.  *  If the whitelist check fails, rebuild the list and try again.  *  Also validate if we are not on a secure connection, but the whitelist  *  entry has the SSL flag set, do not serve the page.  */  #ifdef WEBS_WHITELIST_SUPPORT      if ((rc = websWhitelistCheck(wp->url)) < 0) {          websBuildWhitelist();          if ((rc = websWhitelistCheck(wp->url)) < 0) {              websError(wp, 404, T("Cannot open URL"));              return 1;          }      }      if (!(flags & WEBS_SECURE) && (rc & WHITELIST_SSL)) {          websError(wp, 500, T("HTTPS access required"));          return 1;      }  #endif /* WEBS_WHITELIST_SUPPORT */  

问题就出现在上面这个代码中,我的理解是goAhead关于网页安全方面功能,即网页白名单(WHITELIST)功能支持。

把宏WEBS_WHITELIST_SUPPORT关闭,重新编译,再测试,OK了,可以打开网页了。

 

上述只是简单的移植测试,然我们最终的目的是要把goAhead移植到我们的应用程序中的,在大多数的应用中,它也只是应用程序中的一个模块,因此,后面的工作量还是蛮多的,包括SSL的移植等等。

6. 参考资料 http://www.docin.com/p-67202641.htmlhttp://www.cnitblog.com/zouzheng/archive/2008/01/04/38464.htmlhttp://www.dzjs.net/html/qianrushixitong/2009/0812/3890.htmlhttp://www.cublog.cn/u1/35065/showart_2544608.html                  这个网址的博客对goAhead2.5进行详细的源码分析,有兴趣的可以去看看http://blog.csdn.net/zyboy2000/article/details/6191266http://www.bianceng.cn/webkf/aspx/201103/25071.htmhttp://blog.chinaunix.net/space.php?uid=22982394&do=blog&id=116136

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。