




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、嵌入式linux web服务器boa的移植方法/arm开发板linux嵌入式web服务器boa今天自己在开发板上移植了 boa服务器。参考资料是李驹光、郑耿大侠在包颐论坛上的帖子。李大侠写的好,我没有费什么力气就搞定了,:-)0步骤如下:1. 从/下载Boa源码,将其解压并进入源码目录的src子目录# tar -zxvf boa-0.94.13.tar.gz# cd boa-0.94.13/src2. 生成Makefile文件# ./configure修改Makefile文件,a. 找到 CC=gcc,将其改成 CC = arm-linux-gcc ,b. 找
2、到 CPP = gcc -E,将其改成 CPP = arm-linux-gcc-E,保存退出。3. 运行make进行编译,得到的可执行程序为 boa ,并将调试信息剥去# make# arm-linux-strip boa4. 编写 boa.conf5. cp boa到开发板的/bin目录下,在开发板/etc目录下建boa目录,cpboa.conf 至U板子的/etc/boa 目录。6. 创建日志文件所在目录/var/log/boa ,创建HTML文档的主目录/var/www创建CGI脚本所在目录/var/www/cgi-bin/ ,在/var/www 中放置一个index.html 文件7.
3、 cp mime.types文件到开发板/etc目录8. vi passwd,添加 nouser 用户,vi group 添加 nogroup 组8. 运行boa:#/bin/boa现在通过其他机器就可以访问了。2就可以访问到你放置的那个index页面了。9. 编辑helloworld.c 程序测试cgi的运行#arm-linux-gcc -o helloworld.cgi helloworld.c#cp helloworld.cgi到开发板的 /var/www/cgi-bin 目录下在pc机的浏览器地址栏输入2/cgi-bi
4、n/helloworld.cgi,可以看到相关页面,CGI脚本测试通过。10. 从CGIC的主站点下载源码,将其解压并进入源码目录# tar -zxvf cgic205.tar.gz# cd cgic20511.修改Makefile 文件a. 找到 CC=gcc,将其改成 CC=arm-linux-gcc ,b. 找到 AR=ar ,将其改成 AR=arm-linux-ar ,c. 找到 RANLIB=ranlib ,将其改成 RANLIB=arm-linux-ranlib 。e. 找至U gcc cgictest.o -o cgictest.cgi $LIBS ,将其改成 $(CC) $(C
5、FLAGS) cgictest.o -o cgictest.cgi $LIBS,f. 找至U gcc capture.o -o capture $LIBS ,将其改成 $(CC) $(CFLAGS) capture.o -o capture $LIBS ,保存退出。12. 然后运行make进行编译,得到的CGIC库libcgic.a ,我们通过调试辅助程序capture和测试程序cgictest.cgi,来验证生成CGIC库的正确性。13. 将 capture 和 cgictest.cgi 拷贝到主机的 /var/www/cgi-bin 目录下。在工作站的浏览器地址栏输入http:/192.1
6、68.0.12/cgi-bin/cgictest.cgi,可以看到页面,CGIC库和测试脚本都移植成功。下边是李大侠的大文了。随着Internet技术的兴起,在嵌入式设备的管理与交互中,基丁 Web方式的应用成为目前的主流,这种程序结构也就是大家非常熟悉的B/S结构,即在嵌入式设备上运行一个支持脚本或 CGI功能的Web服务器,能够生成动态页面, 在用户端只需要通过 Web浏览器就可以对嵌入式设备进行管理和监控,非常方 便实用。本节主要介绍这种应用的开发和移植工作。用户首先需要在嵌入式设备上成功移植支持脚本或CGI功能的Web服务器,然后才能进行应用程序的开发。1、嵌入式 Web服务器移植由丁
7、嵌入式设备资源一般都比较有限,并且也不需要能同时处理很多用户的请 求,因此不会使用Linux下最常用的如Apache等服务器,而需要使用一些专门 为嵌入式设备设计的 Web服务器,这些 Web服务器在存贮空间和运行时所占 有的内存空间上都会非常适合丁嵌入式应用场合。典型的嵌入式 Web服务器有Boa ( )和thttpd( )等,它们和 Apache 等高性能的Web服务器主要的区别在丁它们一般是单进程服务器,只有在完成一个用户请 求后才能响应另一个用户的请求,而无法并发响应,但这在嵌入式设备的应用场 合里已经足够了。我们介绍比较常用的Boa服务器的移植。Boa是一个非常
8、小巧的 Web服务 器,可执行代码只有约60KB。它是一个单任务 Web服务器,只能依次完成用 户的请求,而不会fork出新的进程来处理并发连接请求。但 Boa支持CGI,能 够为CGI程序fork出一个进程来执行。Boa的设计目标是速度和安全,在其站点公布的性能测试中,Boa的性能要好丁 Apache服务器第一步完成Boa程序的移植。从 下载Boa源码,当前最新版 本为0.94.13,将其解压并进入源码目录的src子目录# tar xzf boa-0.94.13.tar.gz# cd boa-0.94.13/src生成Makefile文件# ./configure修改M
9、akefile 文件,找到CC=gcc,将其改成 CC = arm-linux-gcc ,再找 到CPP = gcc E,将其改成 CPP = arm-linux-gcc-E,并保存退出。然后运行make进行编译,得到的可执行程序为 boa ,将调试信息剥去,得 到的最后程序只有约60KB大小。# make# arm-linux-strip boa第二步完成Boa的配置,使其能够支持CGI程序的执行。Boa需要在/etc目 录下建立一个boa目录,里面放入 Boa的主要配置文件 boa.conf。在Boa源 码目录下已有一个示例boa.conf ,可以在其基础上进行修改,下面解释一下该 文件的
10、含义:#监听的端口号,缺省都是80, 一股无需修改Port 80# bind调用的IP地址,一般注释掉,表明绑定到INADDR_ANY ,通配丁服务 器的所有IP地址#Listen #作为哪个用户运行,即它拥有该用户的权限,一般都是nobody ,需要 /etc/passwd 中有 nobody 用户User nobody#作为哪个用户组运行,即它拥有该用户组的权限,一般都是nogroup ,需要在/etc/group 文件中有 nogroup 组Group nogroup#当服务器发生问题时发送报警的email地址,目前未用,注释掉#ServerAdmin rootloc
11、alhost#错误日志文件。如果没有以/开始,则表示从服务器的根路径开始。如果不需要错误日志,则用#/dev/null 。在下面设置时,注意一定要建立/var/log/boa 目 录ErrorLog /var/log/boa/error_log#访问日志文件。如果没有以/开始,则表示从服务器的根路径开始。如果不需要错误日志,则用#/dev/null或直接注释掉。在下面设置时,注意一定要建立/var/log/boa 目录#AccessLog /var/log/boa/access_log#是否使用本地时间。如果没有注释掉,则使用本地时间。注释掉则使用UTC时间#UseLocaltime#是否记录
12、CGI运行信息,如果没有注释掉,则记录,注释掉则不记录#VerboseCGILogs#服务器名字ServerName #是否启动虚拟主机功能,即设备可以有多个网络接口,每个接口都可以拥有一个虚拟的Web服务器。一般注释掉,即不需要启动#VirtualHost#非常重要,HTML文档的主目录。如果没有以/开始,则表示从服务器的根路 径开始。DocumentRoot /var/www#如果收到一个用户请求的话,在用户主目录后再增加的目录名UserDir public_html#HTML目录索引的文件名,也是没有用户只指明访问目录时返回的文件名DirectoryIndex index.html#当H
13、TML目录没有索引文件时,用户只指明访问目录时,boa会调用该程序生 成索引文件然后返回给用户,因为该过程比较慢最好不执行,可以注释掉或者给 每个HTML目录加上DirectoryIndex 指明的文件#DirectoryMaker /usr/lib/boa/boa_indexer#如果DirectoryIndex 不存在,并且 DirectoryMaker 被注释,那么就用 Boa 自带的索引生成程序来生成目录的索引文件并输出到下面目录,该目录必须是Boa能读写# DirectoryCache /var/spool/boa/dircache#一个连接所允许的HTTP持续作用请求最大数目,注释
14、或设为0都将关闭HTTP 持续作用KeepAliveMax 1000#HTTP持续作用中服务器在两次请求之间等待的时间数,以秒为单位,超时将关闭连接KeepAliveTimeout 10#指明mime.types文件位置。如果没有以/开始,则表示从服务器的根路径开始。可以注释掉避免使用mime.types文件,此时需要用AddType在本文件里 指明MimeTypes /etc/mime.types#文件扩展名没有或未知的话,使用的缺省 MIME类型DefaultType text/plain#提供CGI程序的PATH环境变量值CGIPath /bin:/usr/bin:/usr/local/
15、bin#将文件扩展名和MIME类型关联起来,和mime.types文件作用一样。如果用mime.types#文件,则注释掉,如果不使用 mime.types文件,则必须使用#AddType application/x-httpd-cgi cgi#指明文档重定向路径#Redirect /bar http:/elsewhere/feh/bar#为路径加上别名Alias /doc /usr/doc#非常重要,指明CGI脚本的虚拟路径对应的实际路径。一般所有的CGI脚本都要放在实际路径里,用户访问执行时输入站点+虚拟路径+CGI脚本名ScriptAlias /cgi-bin/ /var/www/cgi
16、-bin/用户可以根据自己需要,对boa.conf进行修改,但必须要保证其他的辅助文件和设置必须和boa.conf里的配置相符,不然Boa就不能正常工作。在上面的 例子中,我们还需要创建日志文件所在目录 /var/log/boa ,创建HTML文档的主目录/var/www,将mime.types 文件拷贝到/etc目录,创建CGI脚本所在目 录/var/www/cgi-bin/ 。mime.types 文件用来指明不同文件扩展名对应的MIME类型,一般可以直接从Linux主机上拷贝一个,大部分也都是在主机的/etc 目录下。第三步就是测试Boa能否正常工作,静态HTML页面能否正常访问,CGI
17、脚本 能否正常运行,一般采用NFS方式来进行测试工作,可以将嵌入式目标系统上的/etc目录拷贝到主机的NFS共享目录下,然后将NFS共享目录下的etc目录 重新NFS mount为目标系统上的/etc目录。这样就可以在主机上对etc目录下 的各种配置文件,如进行修改而立刻在目标系统上生效。假设主机/nfs目录为共享目录,在其下面建立一个www子目录作为 Web站点的主目录,其内容如下:# ls /nfs/wwwcgi-bin images index.htmlindex.html为测试主页面,images为存放各种图片的子目录,cgi-bin 为CGI脚本的存放目录。根据示例boa.conf的
18、配置,目前HTML文档的主目录为/var/www , CGI脚本目录为/var/www/cgi-bin,则运行以下命令将主机的/nfs/www 目录mount成目标板上的/var/www 目录。然后就可以运行boa 了:# mount -t nfs 0:/nfs/www /var/www -o nolock # boa在工作站上运行浏览器进行测试,在地址栏输入目标系统IP,即62,可以看到相关页面,表示静态HTML页面测试通过。接下来进行CGI脚本的测试,我们需要一个测试用的CGI脚本。可以写个最简单的Hello World 程序,示例代
19、码如下#includevoid main() printf("Content-type: text/htmlnn");printf("n");printf("CGI Outputn");printf("n");printf("Hello, world.n");printf("n");printf("n");exit(0);然后进行交义编译,将得到的 helloworld.cgi拷贝到主机的/nfs/www/cgi-bin 目 录下。#arm-linux-g
20、cc -o helloworld.cgi helloworld.c#cp helloworld.cgi /nfs/www/cgi-bin在浏览器地址栏输入 6/cgi-bin/helloworld.cgi相关页面,表示CGI脚本测试通过现在我们已经可以让Boa在嵌入式目标系统上正常工作了,嵌入式 Web服务 器移植成功。在以上的移植过程中,最好设定boa.conf中的错误日志文件ErrorLog,允许Boa记录错误信息;测试静态 HTML页面和CGI脚本时,不管 结果如何,最好都查看错误日志文件;CGI脚本测试很容易发生权限不够的错误,要保证Boa访问的主目
21、录、CGI脚本目录以及临时文件目录(如果没有设 置TMP环境变量时,缺省是/tmp目录),都必须能被Boa运行时所代表的用 户完全访问,该用户由boa.conf中的User指出。目前Web技术中生成动态Web页面的方法有CGI和服务器脚本,如JSP, ASP 等,但后者需要 Web服务器具有这些脚本的运行支持模块。在嵌入式Web服务器中,考虑到资源限制问题,一般都只提供CGI支持,因此在嵌入式设备中Web方式应用实际上就是基丁 CGI的程序开发。CGI (Common Gate Intergace )是一段运行在 Web服务器上的程序,提 供同客户端Html页面的接口。我们看一个实际例子:常见
22、的个人主贞上大都有 一个留言本,留言本的工作方式是这样的:先由用户输入一些信息,如名字之类 的东西,接着用户按一下“留言”(到目前为止工作都在客户端),浏览器就把这些信息传送到服务器的CGI程序中,丁是CGI程序在服务器上按照预定的方 法进行处理,在本例中就是把用户提交的信息存入指定的文件中,最后CGI程序给客户端发回一个“留言结束”字样的页面,用户可以在浏览器里看到。在进行CGI编程之前,我们先了解HTML的一些知识。CGI可以使用多种编程 语言来实现,包括C、C+、Perl等,但在嵌入式设备的开发中,一般都不会采用Perl等解释性语言,因为这种语言还需要有解释执行的支撑模块,会占用存贮空间
23、和内存,最常用的方法当然是用C来编写,但C并不是很适合开发象CGI这种需要大量进行字符申操作的程序,编程比较烦琐,因此,对丁一个专业 的开发人员来说,首先想到的应该是有没有可复用的库来支持快速高效的开发CGI程序。幸运的是目前就有不少开放源码的支持CGI开发的C库。我们在此只介绍CGIC,有兴趣的朋友可以自己在Internet上搜索其他的C库。CGIC库的移植CGIC是一个支持CGI开发的开放源码的标准C库,可以免费使用,只需要在 开发的站点和程序文档中有个公开声明即可,表明程序使用了 CGIC库,用户也 可以购买商业授权而无需公开声明。CGIC能够提供以下功能:1分析数据,并自动校正一些有缺
24、陷的浏览器发来的数据;2透明接收用GET或POST方法发来的From数据;3 能接受上传文件;4 能够设置和接收cookies ;5 用一致的方式处理From元素里的回车;6 提供字符申,整数,浮点数,单选或多选功能来接收数据;7 提供数字字段的边界检查;8 能够将CGI环境变量转化成C中的非空字符申;9 提供CGI程序的调试手段,能够回放 CGI程序执行时的CGI状态;总之,CGIC是一个功能比较强大的支持 CGI开发的标准C库,并支持Linux,Unix和Windows等多操作系统。以下描述CGIC的移植过程。从CGIC的主站点下载源码,当前最新版本是2.05版。将其解压并进入源码目录#
25、tar xzf cgic205.tar.gz# cd cgic205修改Makefile 文件,找到CC=gcc,将其改成CC=arm-linux-gcc ,找到 AR=ar ,将其改成 AR=arm-linux-ar ,找到 RANLIB=ranlib ,将其改成 RANLIB=arm-linux-ranlib 。找到 gcc cgictest.o -o cgictest.cgi $LIBS ,将 其改成 $(CC) $(CFLAGS) cgictest.o -o cgictest.cgi $LIBS,找到 gcccapture.o -o capture $LIBS,将其改成 $(CC) $
26、(CFLAGS) capture.o -ocapture $LIBS,并保存退出。然后运行make进行编译,得到的CGIC库libcgic.a ,我们通过调试辅助程 序capture和测试程序cgictest.cgi,来验证生成CGIC库的正确性。将 capture 和 cgictest.cgi 拷贝到主机的 /nfs/www/cgi-bin 目录下。在工作站的浏览器地址栏输入6/cgi-bin/cgictest.cgi ,可以看到页面,表示 CGIC 库和测 试脚本都移植成功。cgictest.cgi比较完整的展现了 CGIC库的功能,在开发基丁 CGIC
27、库的CGI程序前最好先掌握cgictest.cgi程序,也是用户开发特定应用程序时的参考范例HTML模板的制作Web方式的应用开发一般都会将界面和程序逻辑脱离开来,允许在一定程度下 更改界面,如改变界面文本的届性,建立多语言版本等,而无需改动程序逻辑。 界面一般由美工来进行制作,而程序员负责具体功能的实现。在HTML中,表单(FORM)是最主要的传递信息的手段,它适用丁任何浏览器。表单中有很多 元素,包括输入文本框,单选框,多选框,按钮,等等,可以提供信息的交互。具体对象说明和语法请参见其他 HTML书籍,在这里不作介绍。根据应用需求, 美工或其他设计人员将最后的 Web页面设计出来,作为程序员进行开发的模板。CGI程序的工作一般就是接收表单数据,进行数据处理,最后根据处理结果 生成新的页面返回给浏览器。表单数据一般是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《学期末家长会》课件
- 《管理核心要领》课件
- 《管理学原理教学课件与讲解》
- 光伏产业风险管理
- 供电公司电力安全培训体系
- 公共卫生管理体系构建与实施策略
- 新质生产力和先进生产力的关系
- 《高效软件项目开发管理》课件
- 医院2025年上半年改善医疗服务行动总结模版
- 2025年度语文教学工作度总结模版
- 充电桩四方协议书范本
- 中考英语情景交际和看图写话
- 知道智慧网课《科学社会主义概论》章节测试答案
- 2024国有土地房屋买卖合同
- QB/T 2660-2024 化妆水(正式版)
- 《养老护理员》-课件:自然灾害的应对处理知识
- 新思想引领新征程新青年建功新时代 (修改版)
- 跨部门协调与部门间合作
- 饲料添加剂(全)课件
- 《田间药效试验》课件
- 劳务外包服务方案(技术方案)
评论
0/150
提交评论