嵌入式BOA服务器文档
ARM嵌入式Web服务器Boa的软、硬件设计 毕业设计

摘要论文主要介绍了基于ARM9的嵌入式Web服务器Boa的软、硬件设计及其实现,其中硬件部分的核心是三星的S3C2410X为处理器。
最后成果形式为可以远程访问的WebServer嵌入式服务器。
Boa是一款单任务的HTTP服务器。
与其他传统的Web服务器不同的是当有连接请求到来时,它并不为每个连接单独创建进程, 也不通过复制自身进程来处理多链接。
而是通过建立HTTP请求列表来处理多路HTTP连接请求。
同时它只为CGI程序创建新的进程,这样就在最大程度上节省了系统资源,这对嵌入式系统来说至关重要。
同时它还具有自动生成目录、自动解压文件等功能。
因此, Boa在嵌入式系统中具有很高的应用价值。
关键词:ARM;Linux;嵌入式Web服务器;CGIThis paper has mainly developed the software hardware design and realization of the embedded Web server Boa based on ARM. And the core of the hardware part is S3C2410X microprocessor produced by Samsung . The final achievement is the embedded webserver which can remote visit. Boa is a single-tasking HTTP server. That means that unlike traditional webservers, it does not fork for each incoming connection, nor does it fork many copies of itself to handle multiple connections. It internally multiplexes all of the ongoing HTTP connections. And forks only for CGI programs, this is very important to embedded system. At the same time, it also has the function of automatic directory generation、automatic file gunzipping and so on. So Boa is of highly value in the embedded system application.Keywords: ARM;Linux;Embedded Web server;CGI摘要 (1)Abstract (2)目录 (3)第一章引言 (5)第二章课题背景 (6)2.1 嵌入式系统简介 (6)2.2 嵌入式系统和Linux (6)2.3 ARM9硬件平台 (7)2.3.1 ARM简介 (7)2.3.2 JXARM9-2410 ARM嵌入式教学实验系统 (8)第三章嵌入式Web服务器 (9)3.1 概述 (9)3.2 Web服务器原理 (9)3.3 嵌入式Web服务器实现原理 (9)3.3.1 TCP/IP协议 (9)3.4 嵌入式Web服务器Boa (10)3.4.1 Boa概述 (10)3.4.2 Boa的功能实现 (11)第四章CGI技术 (12)4.1 CGI概述 (12)4.2 CGI工作原理 (12)第五章建立嵌入式系统开发环境 (14)5.1 在Vmware下安装Redhat 9.0 (14)5.2 编译配置主机开发环境 (18)5.2.1 配置以太网 (18)5.2.2 安装配置tftp服务器 (19)5.2.3 配置防火墙 (21)5.2.4 配置NFS服务器 (22)5.3 JXARM9-2410中U-boot烧写 (22)5.3.1 u-boot的功能 (22)5.3.2 使用ADT IDE烧写u-boot (23)第六章系统功能的实现 (25)6.1 GCC简介 (25)6.1.1 GCC概述 (25)6.1.2 GCC基本用法 (25)6.2 Linux内核移植 (26)6.2.1 Linux内核源代码的安装 (26)6.2.2 Linux交叉编译环境的建立和使用 (27)6.2.3 Linux内核的配置和编译 (27)6.3 加载Linux内核映像 (30)6.4 Boa Web服务器的移植 (31)6.4.1 Boa Web服务器的建立 (31)6.5 Linux下动态Web页面的实现 (32)6.5.1 CGI程序分析 (32)6.5.2 Form输入的分析和解码 (34)第七章系统功能的测试 (36)7.1 测试Web服务器 (36)7.2 动态Web页面测试 (37)结束语 (40)致谢 (41)参考文献 (42)附录 (43)第一章引言随着计算机技术的发展,嵌入式系统已成为计算机领域的一格重要组成部分。
嵌入式Web服务器Boa移植.ppt

修改成#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff 防止在make 时出现如下错误提示: util.c:100:1: pasting "t" and "->" does not give a valid preprocessing token。
该文件目前在虚拟机的/opt/boa-0.94.13。
下面修改boa.conf文件:
1、修改用户与用户组信息
第48行:User nobody
第49行:Group nogroup
改为:第48行: User 0
第49行:Group 0
在根文件系统中的/etc/passwd 文件中没有nobody 用户,所以设成
Boa编译
10、编译boa #make 至此,在src 目录中将得到交叉编译后的boa 程序。
修改BOA配置信息
BOA的配置信息都保存在文件boa.conf中,故该文件是 BOA的配置文件,该文件是最终要放在实验箱的 /gec/web目录下,BOA默认在该路径下读取相关的所有 配置信息。
第74行:Accesslog /var/log/boa/access_log
改为:#Accesslog /var/log/boa/access_log
3、第94行,打开ServerName 的设置: 将#ServerName .here 前面的#号去 掉,该项默认为未打开,执行Boa 会异常退出,提示 “gethostbyname::No such file or directory”,所以必 须打开。
boa_流程分析

boa 流程分析默认分类2010-01-19 19:10:38 阅读291 评论0 字号:大中小订阅引言随着企业安全意识的增强以及现代化管理水平的提高,对设备的远程监控在工业控制系统中得到了越来越广泛的应用。
近年来,Web技术广泛普及,把Web 技术应用在这种监控系统中,可以让操作者通过浏览器维护和管理监测点,查看监测数据。
同时,监测中心的服务程序也可以很方便地通过Web把监测数据取回来,进行进一步的处理,十分方便。
μClinux是应用于微控制领域的一种嵌入式Linux操作系统,它源码开放,移植性好,支持多种硬件平台和几乎所有常见网络通信协议,支持文件系统丰富,是一个功能完整的嵌入式操作系统。
并且有大量优秀的开放源代码的应用软件和开发工具可用,因此,采用μClinux作为操作平台,使用Web技术进行远程在线监测系统的开发。
1 嵌入式Web服务器为了能够通过Web来维护和管理远程在线监控系统,必须选择一个恰当的Web服务器,不但要求所选择的Web服务器支持动态Web技术,也要求它能够在嵌入式系统中稳定地工作。
1.1 Web服务器原理和功能嵌入式Web服务器以TCP/IP协议栈为基础构建,需要实现HTTP,TCP和UDP等协议。
任何一个客户机,都可以通过HTTP协议与嵌入式Web Server建立连接。
嵌入式Web服务器在Web浏览器和设备之间提供了统一的GUI接口,使得客户端可以像在本地一样透明地监控管理设备状况。
嵌入式Web服务器的主要功能有:响应多个客户的实时HTTP请求,并为每个客户建立连接,这是嵌入式Web服务器的首要功能;对设备的实时监控管理,参数的在线查看与配置等;对设备访问的安全控制机制,包括SSL、用户口令等;实现设备的故障智能报警。
1.2 Boa的特点在μClinux中常用的Web服务器有:Boa,thttpd,httpd,其中httpd只支持静态页面,显然不适合高级应用,thttpd和Boa所提供的功能基本一样,但是thttpd在运行过程中所需要的资源要远大于Boa,因此使用Boa作为该嵌入式系统的Web服务器。
Ubuntu 配置 boa 服务器

Ubuntu 配置boa 服务器Ubuntu上编译用法boa服务器的教程文章,已经有无数了,博客上也有无数人写了,我就不赘述了,在这里贴出几处初次用法boa的伴侣可能碰到的问题执行 boa 检查 error_log 里面的内容,有如下错误:boa.c:194 - unable to bind: Aress already in use 由于是在pc 机上,默认的boa.conf 里面Port的端口设置为 80,因此运行 boa 时会有如上错误,可以在 error_log文件里面查看到解决方法:修改boa.conf 里面的 port 值为 8080(可指定其它未被用法的)保存即可。
再次尝试,扫瞄器地址栏里输入:192.168.1.111:8080后,www 名目下的 ind.html 拜访正常接下来测试cgi程序:扫瞄器地址栏里输入:192.168.1.111:8080/cgi-bin/test.cgi 有可能碰到 bad gateway 的错误,或者在error_log里面提醒: request from192.168.1.119 "GET /favicon.ico HTTP/1.1"("/var/www/favicon.ico"): document open: No ch or directory [01/Aug/2011:10:04:37 +0000] request from 192.168.1.119 "(null)" ("(null)"): header read: Connection -9 p(boa)重新启动boa,再次通过扫瞄器拜访cgi,拜访胜利!注:做嵌入式开发板上的boa移植时,这里的确如无数博友写的,修改 User 及 Group 后面的参数为 0,可是初次在Ubuntu里面用法boa的伴侣可能就忽视了这个。
BOA服务器的配置

#避免使用mime.types文件,此时需要用AddType在本文件里指明
MimeTypes /etc/mime.types
#文件扩展名没有或未知的话,使用的缺省MIME类型
DefaultType text/plain
5.#将文件扩展名和MIME类型关联起来,和mime.types文件作用一样。如果用mime.types
/
, 或者
最新发行版本: 0.94.13
下载 boa-0.94.13.tar.gz,注意:从boa上下载的是boa-0.94.13.tar.tar,解压方式一样
2、ScriptAlias的修改 修改 ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
为 ScriptAlias /cgi-bin/ /var/www/cgi-bin/
3、ServerName的设置修改 ServerName
.here
第二步 Boa的配置 Boa需要在/etc目录下建立一个boa目录,里面放入Boa的主要配置文件boa.conf。在Boa源码目录下已有一个示例boa.conf,可以在其基础上进行修改。
1、Group的修改 修改 Group nogroup
为 Group 0
由于在/etc/group文件中没有nogroup组,所以设成0。另外在/etc/passwd中有nobody用户,所以User nobody不用修改。
b、 修改 CPP = gcc - E
为 CPP = /usr/local/arm/2.95.3/bin/arm-linux-gcc -E
4、编译 # make
# /usr/local/arm/2.95.3/bin/arm-linux-strip boa
BO服务器安装文档

1.启动安装程序:
2.查看安装的先决条件:
3.安装.net framework 后再重新安装:
4.条件都成功后,点击下一步:
5.进入下一步:
6.选择接受后进入下一步:
7.填写密钥后进入下一步:
8.选择安装语言:
9.默认选择“完整”:
10.根据需要选择安装路径:
11.更改默认选择,选择“配置现有数据库”:
12.选择资料库所在的数据库类型:
13.更改默认选项,选择“无审核数据库”:
14.无需更改,进入下一步:
15.默认选项,进入下一步:
16.默认节点和端口号信息,进入下一步:
17.默认CMS端口号,进入下一步:
18.设置BI登录密码:
19.填写对应数据库的信息:
20.默认选择,若有冲突再更改:
21.默认选择,进入下一步:
22.设置subversion密码:1qaz2wsx
23.默认选择,进入下一步:
24.选择“不配置”,进入下一步:
25.进入下一步:
26.安装完成:。
Boa应用-web网页配置A40i-飞凌嵌入式

Boa应用-web网页配置A40i-飞凌嵌入式一、简要说明本文主要讲解A40i Boa应用,适用于飞凌 A40i 系列FETA40i-C 核心板Linux3.10 操作系统,其他平台也可以参考,但是不同平台之间会存在差异,需客户自行修改以适应自己的使用。
编写本文章的主要目的是协助客户加速产品的研发速度,由于小编水平有限,在服务过程中所提供的任何资料和信息,都仅供参考,客户有权不使用或自行参考修改,本文章参考资料和信息的完整性、可靠性等问题请自行验证。
硬件平台简介:FETA40i-C核心板基于全志工控行业平台级处理器四核Cortex-A7 A40i设计,主频1.2GHz,集成MAli400MP2 GPU,内存1GB/2GB DDR3L,存储8GB eMMC。
支持绝大部分当前流行的视频及图片格式解码,具有稳定可靠的工业级产品性能和高性价比低功耗等优势,搭载Linux和Android操作系统,适用于基于视觉交互的工业控制产品,目标应用包含,嵌入式设备、智能终端、工业控制、数据采集、机器视觉、工业物联网、移动互联设备、数字标牌等。
<第二章 A40i系列Boa应用Boa是一种非常小巧的Web服务器,其可执行代码只有大约60KB左右。
作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。
但Boa支持CGI,能够为CGI程序fork出一个进程来执行,Boa的设计目标是速度和安全。
1、Boa配置文件Boa配置文件在/etc/boa/boa.conf常用配置说明:(可根据项目需要,将以下配置添加到配置文件里)Group nogroupUser nobody这两个配置是配置boa的运行的属主和属组,如果cgi要配置网卡地址,就必须修改成User rootCGIPath /bin:/usr/bin:/usr/local/bin:/sbinCgi程序运行的一个程序搜索路径;比如运行ifconfig eth0 192.169.0.232就必须配置/sbin路径;ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ /usr/lib/cgi-bin/ 是cgi程序放到boa中的绝对地址,/cgi-bin/ 是客户在网页中提交的cgi地址;例如:/usr/lib/cgi-bin/中放置一个app.cgi;网页访问时候使用/cgi-bin/app.cgi?type=conf&random=0.1111DocumentRoot /var/www这个是虚拟目录在开发板中的真实目录/var/log/boa/access_log日志需要的文件夹和名字VerboseCGILogs调试日志开关,正式运行时候关闭。
嵌入式BOA服务器文档

基于BOA的嵌入式WEB SERVER的设计随着网络技术的不断发展,网络现在已无处不在。
Linux最大的好处在于其良好的网络功能,因此在该系统中,我们通过设计WEB 服务器,使用户能通过浏览器访问设备上的Web服务器来远程控制现场设备。
嵌入式Linux下,系统资源是非常有限的,因此我们选择Web服务器时,要考虑到其资源有限的特点;Boa是一种非常小巧的Web服务器,其可执行代码只有大约60KB左右。
作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。
但Boa支持CGI,能够为CGI程序fork出一个进程来执行,Boa的设计目标是速度和安全。
现在,多数嵌入式Linux的代码中已经包含boa的源代码,在嵌入式Linux下实现Boa 只需要对Boa做一些简单的配置和修改。
这主要通过对boa.conf、boa.c、mime.types等文件进行修改来实现。
服务器中主要包括boa和CGI两部分,其中Boa管理着返回客户端的WEB 页面,而CGI控制着客户端和服务器端的信息交换,所以我们可以通过编写相应的CGI程序来实现所需要的功能。
Boa服务器的实现主要分为两步,boa服务器的移植和CGI程序的设计。
1 、boa 服务器移植Boa服务器的移植主要分为以下步骤进行:(1)首先下载boa源代码,网上有很多关于boa的源码下载网站,官方网址为:/;(2)根据目标平台修改boa的配置文件boa.conf,以及相关的源代码文件boa.c,log.c。
(3)执行configure生成Makefile,并修改Makefile中CC和CPP等项,改成与目标平台对应的编译工具;(4)交叉编译源代码,生成可执行文件boa;(5)拷贝配置文件boa.conf和可执行程序boa到文件系统中。
此时就可以在目标板中运行boa程序了。
下面具体介绍一下如何在ARM平台上移植boa服务器:本系统中采用的boa源码是boa-0.94.13.tar.gz, 将下载的源码拷贝到工作目录解压,# tar xzf boa-0.94.13.tar.gz这里注意下系统中需要安装bison,flex等工具,如果在U-BOOT移植中已经在开发主机中安装过这些工具,则可以跳过这一步骤。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于BOA的嵌入式WEB SERVER的设计随着网络技术的不断发展,网络现在已无处不在。
Linux最大的好处在于其良好的网络功能,因此在该系统中,我们通过设计WEB 服务器,使用户能通过浏览器访问设备上的Web服务器来远程控制现场设备。
嵌入式Linux下,系统资源是非常有限的,因此我们选择Web服务器时,要考虑到其资源有限的特点;Boa是一种非常小巧的Web服务器,其可执行代码只有大约60KB左右。
作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。
但Boa支持CGI,能够为CGI程序fork出一个进程来执行,Boa的设计目标是速度和安全。
现在,多数嵌入式Linux的代码中已经包含boa的源代码,在嵌入式Linux下实现Boa 只需要对Boa做一些简单的配置和修改。
这主要通过对boa.conf、boa.c、mime.types等文件进行修改来实现。
服务器中主要包括boa和CGI两部分,其中Boa管理着返回客户端的WEB 页面,而CGI控制着客户端和服务器端的信息交换,所以我们可以通过编写相应的CGI程序来实现所需要的功能。
Boa服务器的实现主要分为两步,boa服务器的移植和CGI程序的设计。
1 、boa 服务器移植Boa服务器的移植主要分为以下步骤进行:(1)首先下载boa源代码,网上有很多关于boa的源码下载网站,官方网址为:/;(2)根据目标平台修改boa的配置文件boa.conf,以及相关的源代码文件boa.c,log.c。
(3)执行configure生成Makefile,并修改Makefile中CC和CPP等项,改成与目标平台对应的编译工具;(4)交叉编译源代码,生成可执行文件boa;(5)拷贝配置文件boa.conf和可执行程序boa到文件系统中。
此时就可以在目标板中运行boa程序了。
下面具体介绍一下如何在ARM平台上移植boa服务器:本系统中采用的boa源码是boa-0.94.13.tar.gz, 将下载的源码拷贝到工作目录解压,# tar xzf boa-0.94.13.tar.gz这里注意下系统中需要安装bison,flex等工具,如果在U-BOOT移植中已经在开发主机中安装过这些工具,则可以跳过这一步骤。
如果没有,在UBUNTU系统中使用如下命令就可以自动安装:#sudo apt-get install bison flex如果不安装这些工具,在执行make生成可执行文件时会出现如下错误make: yacc:comman not foundmake: *** [y.tab.c] error 127make: lex:comman not foundmake: *** [lex.yy.c] error 127解压完源代码后,我们进入boa目录,boa的所有源代码及编译文件都放在都放在/src下面,进入该目录#cd /source/boa-0.94.13/src相关文件的修改:此时,我们要做的就是对该目录下一些源代码做相应的修改,首先修改compat.h文件, 打开文件找到下面的语句:#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff将其修改成#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff否则会出现错误:util.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing token make: *** [util.o]修改log.c源文件,将以下语句注释掉:if (dup2(error_log, STDERR_FILENO) == -1) {DIE("unable to dup2 the error log");}否则会出现错误:log.c:73 unable to dup2 the error log:bad file deorboa.c文件的修改:注释掉下面两句话:if (passwdbuf == NULL) {DIE(”getpwuid”);}if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {DIE(”initgroups”);}否则会出现错误:boa.c:211 - getpwuid: No such file or directory注释掉下面语句:if (setuid(0) != -1) {DIE(”icky Linux kernel bug!”);}否则会出现问题:boa.c:228 - icky Linux kernel bug!: No such file or directory生成可执行文件BOA:首先进入src目录,并执行configure文件,生成Makefile文件#cd /source/boa-0.94.13/src#./configure生成完Makefile后,接下来要做的就是对其做相应的修改,因为我们对应的目标平台是ARM,所以我们要查看我们用到的交叉编译器设置是否正确,本实验中所要修改的具体参数为:修改CC =gcc 为CC =arm-softfloat-linux-gnu-gcc修改CPP =gcc -E 为CC =arm-softfloat-linux-gnu-gcc -E在确认以上修改正确后,我们在/src目录下就可以使用make命令来生成我们所需要的可执行文件boa了。
# make此时会在当前目录下生成一个名为boa的可执行文件,可以通过ls命令查看。
#ls -l boa-rwxr-xr-x 1 root root 187213 2009-07-11 13:44 boa可以看到生成的可执行文件有180K,对于嵌入式系统来说,我们要尽可能的缩下其大小,因此,我们可以通过瘦身命令strip来删除其中的多余信息,达到缩下体积的目的。
#arm-softfloat-linux-gnu-strip boa# ls -l boa-rwxr-xr-x 1 root root 61052 2009-07-11 13:49 boa可以看到,boa在瘦身前后的大小差距很大,这对嵌入式系统来说,节省了很大的空间。
Boa的配置在生成好boa以后,还要对boa的配置文件boa.conf做修改,在boa-0.94.13目录下已有一个示例boa.conf,可以在其基础上进行修改。
修改如下:#vi boa.conf(1)Group的修改修改Group nogroup为Group 0(2)user的修改修改User nobody为User 0(3)Alias的修改修改Alias /cgi-bin/ /usr/lib/cgi-bin/为Alias /cgi-bin/ /www/cgi-bin/(5)DoucmentRoot的修改修改DoucmentRoot /var/www为DoucmentRoot /www(6)ServerName的设置修改#ServerName .here为ServerName .here否则会出现错误“gethostbyname::No such file or directory”(7)AccessLog修改修改AccessLog /var/log/boa/access_log为#AccessLog /var/log/boa/access_log否则会出现错误提示:“unable to dup2 the error log: Bad file deor”配置好boa.conf以后,我们将生成的boa以及修改好的boa.conf文件拷贝到文件系统中相应的目录中:首先在目标板上创建目录/etc/boa并且把boa 和boa.conf拷贝到这个目录下mkdir /etc/boa创建HTML文档的主目录/wwwmkdir /www创建CGI脚本所在录/www/cgi-binmkdir /www/cgi-bin以下步骤在ubuntu下进行:将boa.conf拷贝到开发板根文件系统的/etc/boa下#cp boa.conf /source/rootfs/etc/boa将boa拷贝到开发板根文件系统的/etc/boa下#cp src/boa /source/rootfs/etc/boa将ubuntu下/etc/mime.types拷贝到开发板根文件系统的/etc下,mime.types的主要功能是控制从网络上发给宿主机端的媒体文件的类型,并且告诉宿主机怎么去处理这些数据。
#cp /etc/mime.types /source/rootfs_hw/etc这时,我们可以将一个测试网页拷贝到/www目录下,并在开发板上启动boa服务器/etc/boa/boa然后在宿主机下,打开浏览器输入开发板的IP地址,就可以看到存放在开发板中的测试主页了,但此时我们点击页面上的按钮时不会执行任何相应,因为现在只是实现了简单的连接,网页并没有相应的CGI程序。
在boa 服务器的设计中,最为关键的就是CGI程序的设计,通过CGI程序,就可以实现我们点击页面时所需要的功能。
2 、CGI程序设计该系统所要实现的功能是让客户端使用浏览器向服务器发送HTTP请求,服务器响应客户端的请求后,并引导到指定的脚本程序,对命令进行解析,将信息交给后台——CGI去处理。
CGI解析信息后,向远程设备发出控制信息。
设备响应后,返回给CGI控制信息,CGI再将信息解析成变量输出到Web Server上,最后客户端得到WebServer发回的页面消息(HTML),就能得到现场设备的运行状态,实现对现场设备的远程监控。
该系统中设计的BOA服务器的的主要功能如下图所示:图1 系统功能实现流程图CGI的程序编写包括两个部分:HTML代码和C代码;CGI程序与Boa Web服务器之间通过环境变量、命令行参数和标准输入等方式进行通信。
本设计中采用的表单编码信息通过环境变量QUERY_STRING传递。
在编写CGI程序时,需要注意:◆REQUEST_METHOD前面介绍过,请求方法有两种:GET和POST。
在实验中,我选择GET方法,如在showsetip()中的代码:<meta http-equiv=pragma content=no-cache><meta http-equiv=expire content=now><form method=get action=/cgi-bin/config.cgi>◆环境变量在选用不同的方法时,所对应的环境变量也不同。