1. GoAhead Web服务器介绍

goAhead Web服务器,小巧、精致,提供了值得称道的性能,特别适合于嵌入式系统,因此,在很多嵌入式产品如路由器中都用到了goAhead作为嵌入式web服务器。

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

支持ASP;

嵌入式的JavaScript,即Ejscript;

支持内存中的CGI处理;

快速响应,每秒中可处理超过65个请求;

符合HTTP1.0/HTTP1.1标准;

拥有众多扩展API,方便用户开发;

支持SSL3.0(Secure Sockets Layer),如MatrixSSL(最新版本为:MatrixSSL 3-2);

支持用户群组管理;

支持DAA访问认证;

占用很小内存,如果不包含SSL,仅要求60K内存;包含SSL,要求500K内存;

Web页面可存在于ROM或文件系统中;

支持多种操作系统,如linux、wince、vxworks等等;

当前最新版本为:WebServer 2.5,本次移植即是这个版本。

2. 获取Goahead源码包

下载后,解压压缩包:

1

2#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指at91sam9g35,linux-2.6.39。

移植步骤很简单,基本上在编译阶段不会出现什么问题,而且这几个步骤在网上诸多博客中都有说明。但在测试服务器的时候,遇到了问题,在浏览器死活都打不开网页,不过,最终还是解决了,请看下面说明。

5.1 修改Makefile文件进入goAhead源码下的LINUX目录,用UE打开Makefile文件。

Makefile文件默认是虚拟机的本身的GCC编译器,因此,指定其交叉编译器,注意,交叉编译器的版本应与你的文件系统用的交叉编译器一致。

在Makefile文件开头添加如下信息:1

2

3

4

5

6

7

8

9

10

11# add by: cuiqingwei

CROSS_COMPILE =/opt/arm-2007q1/bin/arm-none-linux-gnueabi-

AS = $(CROSS_COMPILE)as

LD = $(CROSS_COMPILE)ld

CC = $(CROSS_COMPILE)gcc

CPP = $(CC) -E

AR = $(CROSS_COMPILE)ar

NM = $(CROSS_COMPILE)nm

STRIP = $(CROSS_COMPILE)strip

OBJCOPY = $(CROSS_COMPILE)objcopy

OBJDUMP = $(CROSS_COMPILE)objdump

同时把Makefile中的语句:1matrixsslDir:=$(shell ls -d ../matrixssl-3-1*/)

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

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

修改如下:1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17/*

*Define the local Ip address, host name, default home page and the

*root web directory.

*/

/* del by: cuiqingwei

if (gethostname(host, sizeof(host)) < 0) {

error(E_L, E_LOG, T("Can't get hostname"));

return -1;

}

if ((hp = gethostbyname(host)) == NULL) {

error(E_L, E_LOG, T("Can't get host address"));

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.159")); // add by: cuiqnigwei

5.3 编译:make clean;make在shell中进入LINUX目录下,执行命令

make clean

make

即可编译通过。

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

arm-none-linux-gnueabi-readelf -a webs >a.txt

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

查看得到a.txt,如下信息:1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38Program Headers:

Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align

EXIDX 0x00f074 0x00017074 0x00017074 0x00008 0x00008 R 0x4

PHDR 0x000034 0x00008034 0x00008034 0x00100 0x00100 R E 0x4

INTERP 0x000134 0x00008134 0x00008134 0x00013 0x00013 R 0x1

[Requesting program interpreter: /lib/ld-linux.so.3]

LOAD 0x000000 0x00008000 0x00008000 0x0f080 0x0f080 R E 0x8000

LOAD 0x00f080 0x0001f080 0x0001f080 0x0063c 0x007e0 RW 0x8000

DYNAMIC 0x00f08c 0x0001f08c 0x0001f08c 0x000e8 0x000e8 RW 0x4

NOTE 0x000148 0x00008148 0x00008148 0x00020 0x00020 R 0x4

GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RW 0x4

....

Dynamic section at offset 0xf08c contains 24 entries:

Tag Type Name/Value

0x00000001 (NEEDED) Shared library: [libc.so.6]

0x0000000c (INIT) 0x8ddc

0x0000000d (FINI) 0x158f0

0x00000019 (INIT_ARRAY) 0x1f080

0x0000001b (INIT_ARRAYSZ) 4 (bytes)

0x0000001a (FINI_ARRAY) 0x1f084

0x0000001c (FINI_ARRAYSZ) 4 (bytes)

0x00000004 (HASH) 0x8168

0x00000005 (STRTAB) 0x886c

0x00000006 (SYMTAB) 0x83ac

0x0000000a (STRSZ) 615 (bytes)

0x0000000b (SYMENT) 16 (bytes)

0x00000015 (DEBUG) 0x0

0x00000003 (PLTGOT) 0x1f174

0x00000002 (PLTRELSZ) 584 (bytes)

0x00000014 (PLTREL) REL

0x00000017 (JMPREL) 0x8b94

0x00000011 (REL) 0x8b8c

0x00000012 (RELSZ) 8 (bytes)

0x00000013 (RELENT) 8 (bytes)

0x6ffffffe (VERNEED) 0x8b6c

0x6fffffff (VERNEEDNUM) 1

0x6ffffff0 (VERSYM) 0x8ad4

0x00000000 (NULL) 0x0

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

查找文件1find -name ld-linux.so.3

得出结果1

2

3

4./arm-none-linux-gnueabi/libc/thumb2/lib/ld-linux.so.3

./arm-none-linux-gnueabi/libc/lib/ld-linux.so.3

./arm-none-linux-gnueabi/libc/armv4t/lib/ld-linux.so.3

./arm-none-linux-gnueabi/libc/marvell-f/lib/ld-linux.so.3

复制ld-linux.so.31cp arm-none-linux-gnueabi/libc/armv4t/lib/ld-linux.so.3 开发板/lib

查找文件1find -name libc.so.6

得出结果1

2

3

4

5

6./arm-none-linux-gnueabi/libc/thumb2/lib/libc.so.6

./arm-none-linux-gnueabi/libc/lib/libc.so.6

./arm-none-linux-gnueabi/libc/armv4t/lib/libc.so.6

./arm-none-linux-gnueabi/libc/marvell-f/lib/libc.so.6

复制libc.so.6

cp arm-none-linux-gnueabi/libc/armv4t/lib/libc.so.6 开发板/lib

5.4 测试webs服务器用FTP把webs执行文件传到目标板中,本人把其放到了/mnt/webs/目录中。

配置开发版IP地址1ifconfig eth0 192.168.1.159

挂载NFS1mount 192.168.1.158:/srv/nfs /mnt

运行web服务1./webs &

杀死web服务1killall webs

在PC机用IE浏览器浏览goAhead服务器的网页,输入http://192.168.1.159:8080/

运行webdemo服务1./webs -demo &

杀死web服务1killall 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.159:8080/

192.168.1.159是目标板的IP地址即goAhead服务器的地址,8080是goAhead用的端口号,这是默认的端口号,定义在webs.h文件。

goaheadlinux移植_goAhead2.5嵌入式web服务器移植相关推荐

  1. arm linux goahead,goAhead 2.5嵌入式web服务器移植到arm9 2440 + linux中

    本文内容概要:详细描述了移植goAhead 2.5到S3C2440的linux系统的过程.步骤.遇到的问题及其解决方法. 开发环境: 宿    主   机:window XP: 虚    拟   机: ...

  2. goaheadlinux移植_goahead(嵌入式Web服务器)之交叉编译、移植篇

    GoAhead简介: GoAhead是一个开源(商业许可).简单.轻巧.功能强大.可以在多个平台运行的嵌入式Web Server. GoAhead主要特性: 1 很小的内存消耗 2 支持认证功能Dig ...

  3. 嵌入式如何移植php,关于嵌入式web服务器的移植

    目标:静态编译 版本:apache-1.3.39 + php-5.5.5 PC环境:ubuntu16 交叉编译工具链:arm-linux-gcc 首先可以参考:https://www.cnblogs. ...

  4. 嵌入式Web服务器移植

    第一步 Boa程序的移植 1.下载Boa源码 下载地址: http://www.boa.org/, 或者http://sourceforge.net 最新发行版本: 0.94.13 下载 boa-0. ...

  5. 三种嵌入式web服务器(Boa / lighttpd / shttpd)的 linux移植笔记

    一:移植Boa(web服务器)到嵌入式Linux系统 一.Boa程序的移植 1.下载Boa源码     下载地址: http://www.boa.org/     目前最新发行版本: 0.94.13  ...

  6. 嵌入式 boa服务器移植

    随着Internet技术的兴起,在嵌入式设备的管理与交互中,基于Web方式的应用成为目前的主流,这种程序结构也就是大家非常熟悉的B/S结构,即在嵌入式设备上运行一个支持脚本或CGI功能的Web服务器, ...

  7. 常见嵌入式WEB服务器

    常见嵌入式WEB服务器 最近在搞一款应用到嵌入式WEB的产品,早期常为搭建服务器头疼,故在此列出几款常用的.不过我公司现在使用的goahead,下载见www.goahead.com 2.5.1版本.下 ...

  8. goahead(嵌入式Web服务器)之交叉编译、移植篇

    GoAhead简介: GoAhead是一个开源(商业许可).简单.轻巧.功能强大.可以在多个平台运行的嵌入式Web Server. GoAhead主要特性: 1 很小的内存消耗 2 支持认证功能Dig ...

  9. boa服务器如何运行cgi,嵌入式WEB服务器BOA+CGI.ppt

    嵌入式WEB服务器BOACGI 嵌入式WEB服务器:BOA+CGI 报 告 人: 李 实 * ASIPP 随着Internet技术的兴起,在嵌入式设备的管理与交互中,基于Web方式的应用成为目前的主流 ...

最新文章

  1. java flex 图片上传_flex上传图片到java服务器
  2. SAP EWM - 存储类型 - 入库控制
  3. 我也做了B站UP主!
  4. VSCode 阅读 Linux 代码怎么才不卡顿?这样做才能快的飞起!
  5. oracle创建目录的命令,使用create database命令手工创建Oracle数据库
  6. springboot @datetimeformat 标注在参数上无效_Spring Boot 中必须掌握的 45 个注解
  7. 移动互联网这十年,跨平台技术的演进及 Flutter 的未来
  8. 九度OJ-1525 子串逆序打印
  9. 银行卡按卡号识别银行
  10. html改变鼠标指针形状代码,鼠标指针形状效果大全 cursor
  11. 记账系统推荐金蝶精斗云_金蝶精斗云财务软件免费版本在哪里体验?
  12. python关键词排名批量查排名_Python批量查询百度排名
  13. HBase BulkLoad批量写入数据实战
  14. 启动VMware虚拟机显示:物理内存不足无法使用
  15. 深度学习,CPU、GPU、DSP、FPGA运算能力对比
  16. Nginx软件介绍及下载地址
  17. MySQL的二叉树、平衡二叉树、2,3查找树、B树、B+树索引
  18. 2021年安徽高考成绩排名查询,安徽高考排名对应大学-安徽高考位次查询(2021年文科参考)...
  19. 3%!微软只录用最顶尖的人才!
  20. YoutubeAPI使用

热门文章

  1. python计算n阶乘中尾部零的个数_计算n阶乘中尾部零的个数
  2. 在线编辑页面功能实现(FineUI开发一)
  3. JAVA电商 B2B2C商城系统 多用户商城系统 直播带货 新零售商城 o2o商城 电子商务 拼团商城 分销商城
  4. Java程序员跳槽之旅,离开京东,12面面试回顾和一点经验分享
  5. L2-032 彩虹瓶 (25 分)
  6. 用python实现主范式的转换
  7. 专访轻奢手机品牌HANMAC钱总:为何选张继科刘国梁代言
  8. 揭秘“风水界”你不得不知的那些事
  9. Full GC触发场景及详解
  10. 解决eclipse项目验证缓慢问题