goAhead 2.5嵌入式web服务器移植到arm9 2440 + linux中

linux goahead2.1.8移植 环境: PC: deepin2014 Web server: webs218.tar.gz(goahead2.1.8) 交叉编译工具链:mipsel-linux-   1. 解压webs218.tar.gz, 得到ws031202文件夹 tar zxvf webs218.tar.gz   2. 进入解压出来的文件夹, 并选择对应移植系统, 我需要移植到嵌入式开发板, 所以我用lin 阅读详情

作者:reille

本博客网址:http://blog.youkuaiyun.com/reille/,转载请注明出处。

本文内容概要:详细描述了移植goAhead 2.5到S3C2440的linux系统的过程、步骤、遇到的问题及其解决方法。

开发环境:

        宿    主   机:window XP;

        虚    拟   机:ubuntu9.10;

        交叉编译器:arm-uclibc-gcc(arm-linux-gcc-4.3.2可以顺利编译通过)

———————————————————————————————————————————————————————————————————

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源码包

地址为:http://www.goahead.com/products/webserver/Download.aspx,当前最新版本为: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文件开头添加如下信息:

  1. CROSS_COMPILE   =/usr/local/arm-uclibc/bin/arm-uclibc-  
  2. AS      = $(CROSS_COMPILE)as  
  3. LD      = $(CROSS_COMPILE)ld  
  4. CC      = $(CROSS_COMPILE)gcc  
  5. CPP     = $(CC) -E  
  6. AR      = $(CROSS_COMPILE)ar  
  7. NM      = $(CROSS_COMPILE)nm  
  8. STRIP   = $(CROSS_COMPILE)strip  
  9. OBJCOPY = $(CROSS_COMPILE)objcopy  
  10. OBJDUMP = $(CROSS_COMPILE)objdump  


同时把Makefile中的语句:

  1. 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地址。

修改如下:

  1. /* 
  2.  *  Define the local Ip address, host name, default home page and the 
  3.  *  root web directory. 
  4.  */  
  5.  /* del by gyr 2011.09.17 
  6.     if (gethostname(host, sizeof(host)) < 0) { 
  7.         error(E_L, E_LOG, T("Can't get hostname")); 
  8.         printf("initWebs::Can't get hostname.\n");      // added by gyr 2011.09.17 
  9.         return -1; 
  10.     } 
  11.     if ((hp = gethostbyname(host)) == NULL) { 
  12.         error(E_L, E_LOG, T("Can't get host address")); 
  13.         printf("initWebs::Can't get hostname...\n");    // added by gyr 2011.09.17 
  14.         return -1; 
  15.     } 
  16.     memcpy((char *) &intaddr, (char *) hp->h_addr_list[0], 
  17.         (size_t) hp->h_length); 
  18. */  
  19.     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执行文件依赖的库文件:

  1. /usr/local/arm-uclibc/bin/arm-uclibc-readelf -d webs  

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

得到如下信息:

  1. Dynamic segment at offset 0xf638 contains 18 entries:  
  2.   Tag        Type                         Name/Value  
  3.  0x00000001 (NEEDED)                     Shared library: [libfloat.so.1]  
  4.  0x00000001 (NEEDED)                     Shared library: [libc.so.0]  
  5.  0x0000000c (INIT)                       0x8e2c  
  6.  0x0000000d (FINI)                       0x15aa0  
  7.  0x00000004 (HASH)                       0x8130  
  8.  0x00000005 (STRTAB)                     0x8924  
  9.  0x00000006 (SYMTAB)                     0x83a4  
  10.  0x0000000a (STRSZ)                      712 (bytes)  
  11.  0x0000000b (SYMENT)                     16 (bytes)  
  12.  0x00000015 (DEBUG)                      0x0  
  13.  0x00000003 (PLTGOT)                     0x1f704  
  14.  0x00000002 (PLTRELSZ)                   552 (bytes)  
  15.  0x00000014 (PLTREL)                     REL  
  16.  0x00000017 (JMPREL)                     0x8c04  
  17.  0x00000011 (REL)                        0x8bec  
  18.  0x00000012 (RELSZ)                      24 (bytes)  
  19.  0x00000013 (RELENT)                     8 (bytes)  
  20.  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()函数中,这个函数是处理默认网页的。

具体代码段如下:

  1. /* 
  2.  *  We do whitelist validation in addition to standard URL validation. 
  3.  *  The whitelist should really catch anything invalid first. 
  4.  *  If the whitelist check fails, rebuild the list and try again. 
  5.  *  Also validate if we are not on a secure connection, but the whitelist 
  6.  *  entry has the SSL flag set, do not serve the page. 
  7.  */  
  8. #ifdef WEBS_WHITELIST_SUPPORT  
  9.     if ((rc = websWhitelistCheck(wp->url)) < 0) {  
  10.         websBuildWhitelist();  
  11.         if ((rc = websWhitelistCheck(wp->url)) < 0) {  
  12.             websError(wp, 404, T("Cannot open URL"));  
  13.             return 1;  
  14.         }  
  15.     }  
  16.     if (!(flags & WEBS_SECURE) && (rc & WHITELIST_SSL)) {  
  17.         websError(wp, 500, T("HTTPS access required"));  
  18.         return 1;  
  19.     }  
  20. #endif /* WEBS_WHITELIST_SUPPORT */  

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

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

goahead5.1.1移植arm Linux开发板 链接:https://pan.baidu.com/s/1JH60KeTF3AoAhbb1dMIWnQ提取码:1111。 阅读详情

相关推荐

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

GoAhead简介: GoAhead是一个开源(商业许可)、简单、轻巧、功能强大、可以在多个平台运行的嵌入式Web Server。 GoAhead主要特性: 1 很小的内存消耗 2 支持认证功能Digest Access Authentication (DAA) 3 支持安全的通信,例如SSL(安全的套接字层) 4 支持动态Web页面,如ASP页面 5 可以使用传统的C语言编程定制Web页面里的HTML标签 6 支持CGI(公共网关编程接口) 7 嵌入式的Javascript脚本翻译器 8 独特

weixin_40732273的博客 9524

zzz,zzz,zz9_ZZZ的完整形式是什么?

zzz,zzz,zz9 ZZZ:睡觉,无聊,累 (ZZZ: Sleeping, Bored, Tired) ZZZ is an abbreviation of "Sleeping, Bored, Tired". ZZZ是“睡觉,无聊,累了”的缩写 。 It is an expression, which is commonly used in messaging or chatting on ...

cumudi0723的博客 32万+

【电弧故障检测算法全解析,电弧串扰问题分析和解决算法】

本文系统分析了电弧故障检测算法及串扰问题解决方案。电弧检测主要采用时频域分析和机器学习方法,通过提取高频噪声、波形畸变等特征实现故障识别。针对电弧串扰问题,提出了自适应滤波、盲源分离和时频联合分析等算法。研究给出了Python和C语言的算法实现示例,包括高频能量检测、过零率计算和陷波滤波器设计。最后指出算法优化方向:实时性提升可采用滑动窗口FFT和硬件加速;抗干扰增强需结合硬件滤波;机器学习扩展可引入随机森林等分类器。该研究为电弧故障检测系统开发提供了完整的技术路线。

syttt的专栏 891

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

本文内容概要:详细描述了移植goAhead 2.5到S3C2440的linux系统的过程、步骤、遇到的问题及其解决方法。开发环境:宿 主 机:window XP;虚 拟 机:ubuntu9.10;交叉编译器:arm-uclibc-gcc(arm-linux-gcc-4.3.2可以顺利编译通过)———————————————————————————————————————————...

weixin_33116629的博客 440

Python 中调用 R 语言的教程(包含编码问题解决办法)

rpy2 是一个 Python 库,允许在 Python 中直接运行 R 代码并实现数据转换。安装需确保 Python 和 R 环境正确配置,Windows 用户需注意编码问题(GBK 错误可通过控制面板调整区域设置解决)。基本用法包括执行 R 代码、传递数据(支持 Python 与 R 数据类型自动转换)以及调用 R 包函数。通过 robjects.r() 执行 R 代码,使用 pandas2ri 转换器处理 DataFrame 数据交换,并支持像导入 Python 模块一样加载 R 包(如 import

zygalaxy的博客 995

linux如何移植goaheadweb服务器,GoAhead 2.5嵌入式Web服务器移植到ARM9 2440 + Linux中

本文内容概要:详细描述了移植goAhead 2.5到S3C2440的linux系统的过程、步骤、遇到的问题及其解决方法。开发环境:宿主 机:window XP;虚 拟 机:Ubuntu 9.10;交叉编译器:arm-uclibc-gcc(arm-linux-gcc-4.3.2可以顺利编译通过)———————————————————————————————————————1. ...

weixin_39866974的博客 244

【UV打印机】PrintExp打印软件教程(四)-设置校准电压

序号名称功能说明1校准材料设置定义当前打印材料,不同的材料参数绑定不同的校准值2向导勾选进行校准向导操作3校准类型包括喷头安装、步进校准、喷头间距、套色校准、双向校准4类型子项同类型子项5操作步骤校准存在步骤和校准说明示意图。

Print World的专栏 5074

[转]goAhead 2.5嵌入式web服务器移植到arm9 2440 + linux中

web服务嵌入式linuxmakefile编译器ssl 目录(?)[+] 作者:reille 本博客网址:http://blog.csdn.net/reille/,转载请注明出处。 本文内容概要:详细描述了移植goAhead 2.5到S3C2440的linux系统的过程、步骤、遇到的问题及其解决方法。 开发环境:         宿    主   机:window XP;

laoyouji的专栏 2596

浅聊开关电源6:大学生电赛(电源类)之LCL并网滤波器设计(PCB设计,STM32F4xx程序与Simulink仿真)

关于LCL并网滤波器设计的一些小分享

xjtuymh的博客 3651

Qt之QMqtt 发送图片数据

MQTT是一个基于客户端-服务器的消息发布/订阅传输协议;MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛;在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT);其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用;

Ilson_的博客 1437

移植goAhead 2.5到arm 9的linux系统的过程、步骤、遇到的问题及其解决方法

开发环境: 宿 主 机:window win7; 目 标 机:arm 9; 交叉编译器:arm-uclibc-gcc(arm-linux-gcc-4.3.2可以顺利编译通过) 注:移植好的源代码下载地址:移植好的goAhead源码包下载地址 GoAhead Web服务器介绍 goAhead Web服务器,小巧、精致,提供了值得称道的性能,特别适...

li7720681的博客 747

【深度学习基础】一篇弄懂训练集、验证集和测试集(呕心沥血版)

在深度学习中,训练集、验证集和测试集是构建和评估模型的核心组成部分。训练集用于模型的学习和参数优化,验证集帮助调整超参数和防止过拟合,而测试集则用于最终评估模型的泛化性能。正确划分和使用这三类数据集,对于开发高效、可靠的深度学习模型至关重要。本文将深入解析它们的作用、划分方法以及在实际应用中的注意事项,帮助你全面理解并掌握数据集的科学使用方法,从而提升模型的实际表现。

十二月的猫 3792

Metasploit - auxiliary/gather/zoomeye_search

How to use ZoomEye API ?If you are a python developer, please view ZoomEye-SDK. If not, ZoomEye API Documentation is good for you.$ sudo easy_install zoomeye-SDKor$ sudo pip install git+https://github.

Nixawk 59万+

AI Agent开发第82课-手把手教你把paddleocr-vl做成mcp使其在DIFY里运行

本文详解如何将国产顶尖多模态 OCR 模型 PaddleOCR-VL 封装为标准 MCP(Model Calling Protocol)服务,并通过自研的 HTTP-based MCP Client 接入 Dify 1.10,实现 AI Agent 在对话中自动识别并调用 OCR 能力。该方案已在某头部保险公司真实业务流程中落地,使用了当前最先进的“Agentic AI 原生”设计思想。

打造全国最全的AI Agent开发知识领域的博客 1625

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

DPDK 全面分析

PS:欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家。 高性能网络技术 随着云计算产业的异军突起,网络技术的不断创新,越来越多的网络设备基础架构逐步向基于通用处理器平台的架构方向融合,从传统的物理网络到虚拟网络,从扁平化的网络结构到基于 SDN 分层的网络结构,无不体现出这种创新与融合。 这在使得网络变得更加可控制和成本...

weixin_33889665的博客 5383

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Coursera DeepLearning Sequence Model week2 Improvise a Jazz Solo with an LSTM Network

Improvise a Jazz Solo with an LSTM Network Welcome to your final programming assignment of this week! In this notebook, you will implement a model that uses an LSTM to generate music. You will even b...

cf的博客 106万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

SEO(搜索引擎优化)的一点心得!

作者:精灵(也就是小弟我了)出至:Web.Share地址:http://www.37zz.com/ShowPost.asp?id=87先说明一下,本来是要散分,升级了,高兴 ^_^想到总不能这样散分吧,很容易被斑竹给喀嚓的,对SEO有一点点心得,就写了这个小段文,同大家分享咯,好象有兴趣的朋友还不少!因为优快云不支持HTML语法,可能看起来多少会有电吃力,大家可以到上面的地址去看,或许会容易看清

江大鱼的专栏 5850

ミスチルのアルバム『I♥U』

Mr.Children『I♥U』 ~『深海』から9年。いざ、潜水。~  待ちに待ったMr.Childrenの最新アルバムが、ついに発売日を迎えた。前にも書いたことがあるが、最も好きなミュージシャン(バンド)を1人選べと言われたら、僕は迷わず”ミスチル”を選ぶ。ミスチルのアルバムをはじめて通して聴く瞬間。それは、僕にとって、最高に胸躍るひととき。だから、ニューアルバムをはじめて聴ける今日という日は、

azikanho的专栏 2万+

goahead4.0.3---http.c代码解析

/* http.c -- GoAhead HTTP engine This module implements an embedded HTTP/1.1 web server. It supports loadable URL handlers that define the nature of URL processing performed. Copyright (c) All Rights Reserved. See details at the end of th

weixin_44939146的博客 582
上一篇: 开发板调试DHCP笔记记录
下一篇: 谈谈我曾误解过的两条编程格言.
dcdcmin
博客等级 码龄16年 35粉丝 19原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值