web服务器Boa移植手册
- 格式:pdf
- 大小:126.87 KB
- 文档页数:5
摘要论文主要介绍了基于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出现的问题通过两天的努力终于可以通过pc机网页浏览板子上的资源了。
现在将遇到的问题归纳如下:1、修改src/boa.c注释掉下面语句:if (setuid(0) !=-1){DIE(”icky Linux kernel bug!”);}即修改为:#if 0if(setuid(0) != -1){DIE(”icky Linux kernel bug!”);}#endif否则运行boa时会提示boa.c:226 - icky Linux kernel bug!: No suchfile or directory错误2. make在当前目录下生成一个boa的可执行程序,./boa运行即可,ps能看到boa的进程即说明boa正常工作.注:有些编译器会提示以下错误,按相应方法解决即可.util.c: 100: 1: pasting “t” and “->”does not give a valid preprocessing token make: [util.o] Error1解决方法:方法>. 修改compat.h中的#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff为:#define TIMEZONE_OFFSET(foo)foo->tm_gmtoff3.访问端口号设置大概25左右:Port 80,可以设定我们访问网页时的端口号默认为80—访问时无需指定假如改变了此端口号为8080,必须以下列格式访问: http://192.168.1.3:8080只能在超级终端输入boa一次,如果启动两次,就会出现端口被占用的情况。
友善之臂移植的文件系统中已经在系统启动时已经启动该服务,所以不用再启动一次(具体可查看你的系统启动信息)。
所以如果你用移植好的文件系统,默认情况已经启动,不用再boa。
4、编译capture和cgitest时,修改makefile,在cflags后面加上-static,目的是为了静态编译capture和cgitest,我想应该是我的板上没有它动态运行时的库文件,或者指定的库文件路径不对(还没检查),不过这样编译生成的文件就很大。
嵌入式boa服务器的移植——cpw806开发板:gec2410开发环境:Vmware+redflag6.0交叉编译器:arm-linux-gcc-4.3.2软件版本:linux2.6.31(内核),boa-0.94.13.tar.gz一:准备boa服务器源代码下载地址:/projects/boa/。
二:移植boa服务器1:编译boa服务器①解压#tar–zxvf boa-0.94.13.tar.gz②进入boa-0.94.13/src目录,#./configure③#修改交叉编译器路径#vi MakefileCC=gccCPP=gcc-E该为:CC=arm-linux-gccCPP=arm-linux-gcc-E④#make⑤去除调试信息#arm-linux-strip boa经4,5步之后,便在src目录下生成boa可执行文件。
编译过程中出现如下错误util.c:100:1:pasting“t”and“->”does not give a valid preprocessing token make:[util.o]Error1解决办法修改compat.h中的#define TIMEZONE_OFFSET(foo)foo##->tm_gmtoff为:#define TIMEZONE_OFFSET(foo)foo->tm_gmtoff有人说改用2.95.3版本的编译器也可以避免这个错误,本人没有试验过。
至此编译完成,此时便可生成可执行程序boa。
2:配置boa.conf文件有关boa.conf的说明文档很多,本人不再赘述,下面为有必要修改和注意的部分。
1修改User nobody为User0;2修改Group nogroup为Group0②设定日志目录:boa日志有两部分,Errorlog和AccessLog一般情况下为/var/log/boa/error_log和/var/log/boa/access_log两个文件。
实验14 Webserver的移植与网络通讯实验第1步:Boa程序的移植;(1)从/ 下载boa-0.94.13.tar.gz源码(或光盘中提供);(2)将下载下来的文件复制到linux的/work目录下,利用tar zxvf boa-0.94.13.tar.gz减压缩boa-0.94.13.tar.gz文件。
(3)切换到boa-0.94.13/src目录执行./configure对其进行配置。
(4)用vi编辑器修改src/Makefile 文件。
找到CC=gcc,改成CC = arm-linux-gcc;找到CPP= gcc –E,修改成CPP = arm-linux-gcc –E。
(5)用vi编辑器修改src/compat.h文件。
找到#define TIMEZONE_OFFSET(foo)foo##->tm_gmtoff,修改成#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff。
(6)执行make命令,编译boa。
(7)执行arm-linux-strip boa 将最终程序 boa 中的调试信息剥去,减小其体积。
第2步:Boa的配置和安装(1)用vi编辑器修改boa-0.94.13/boa.conf文件。
将Group nogroup修改为Group 0;将ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/修改为ScriptAlias /cgi-bin/ /var/www/cgi-bin/;将#ServerName .here 去掉前面的#号。
(2)在目标板上的Linux 中建立相应的目录:在/etc下建立boa目录,在/var下建立log、www目录,在/var/log下建立boa目录,在/var/www下建立cgi-bin目录。
(3)将下列文件拷贝到目标板的相应目录:(将需要复制到目标板的文件复制到宿主机的/mnt/nfs文件夹下,以nfs方式将宿主机的目录挂载到目标机上,然后将文件复制到(4)设置好网络参数,后台运行boa:(5)并在浏览器中输入:http://192.168.1.50,进行测试。
嵌入式boa服务器搭建和移植1.先下载源码/ ==> boa-0.94.13.tar.g2.tar -xvf boa-0.94.13.tar.g3./configure4.修改MakefileCC =or32-linux-gccCPP = or32-linux-gcc–E5.修改boa.c,注释下面几行if (setuid(0) != -1) {DIE(“icky Linux kernel bug!”);}改为/*if (setuid(0) != -1) {DIE(“icky Linux kernel bug!”);}*/6.修改文件compat.h#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff修改成#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff7.make 编译,这时候就会生成一个boa的可执行文件boa的配置文件是boa.conf,大概的配置是这样的:MimeTypes /etc/mime.types //指明mime.types文件位置DefaultType text/plain //文件扩展名没有或未知的话,使用的缺省MIME类型CGIPath /bin:/usr/bin:/usr/local/bin //提供CGI程序的PATH环境变量值Alias /doc /usr/doc //为路径加上别名ScriptAlias /cgi-bin/ /var/www/cgi-bin/ //输入站点和CGI脚本位置对于调试阶段,可以把主机的目录挂载到目标板上面,这样就方便调试。
假设主机的NFS共享目录是/NFS,在NFS下面建立一个www的文件夹,然后在www的文件夹下面建立images,cig-bin目录,还有一个index.html,可以随便找一个主页就可以了。
在主机上mkdir /NFS/wwwmkdir /NFS/www/imagesmkdir /NFS/www/cgi-bincp <dir>/index.html /NFS/www/然后在板子上面建立/var/www的目录mkdir /var/wwwmount -t nfs -o nolock <主机IP>:/NFS/www /var/www //挂载目标www板子上建立日志存放目录,在板子上:mkdir /var/logmkdir /var/log/boa对于boa配置文件的移植,可以把主机上的boa.conf拷贝到主机的NFS共享目录/NFS/www 下面。
Boa移植1.修改CC=此为自己的交叉编译路劲(which arm-linux-gcc查看交叉编译路劲)2.修改CPP =此为自己的交叉编译路劲–ELDFLAGS = -g -static(添加静态编译选项)。
3../configure 生成Makefile修改src/compat.h找到#define TIMEZONE_OFFSET(foo) foo## ->tm_gmtoff修改成#define TIMEZONE_OFFSET(foo) foo->tm_gmtoff修改define.h找到#define SERVER_ROOT “/etc/boa”修改为#define SERVER_ROOT “/root/myfile/myboa/server”这里定义的web服务器的文件根目录(用户可以自己定义,只要跟boa.conf中的定义一致就可以)boa.c:211 - getpwuid: No such file or directory解决办法: 修改src/boa.c注释掉下面这段程序:if (passwdbuf == NULL) {DIE(”getpwuid”);}if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {DIE(”initgroups”);}即修改为:#if 0if (passwdbuf == NULL) {DIE(”getpwuid”);}if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {DIE(”initgroups”);}#endif④boa.c:228 - icky Linux kernel bug!: No such file or directory解决办法: 修改src/boa.c注释掉下面语句:if (setuid(0) != -1) {DIE(”icky Linux kernel bug!”);}即修改为:#if 0if (setuid(0) != -1) {DIE(”icky Linux kernel bug!”);}#endif4.make5.arm-linux-strip boa6.修改boa.conf文件7.port 80er 09.Group 010.#ServerAdmin root@localhost11.#ErrorLog /var/log/boa/error_log12.#AccessLog /var/log/boa/access_log13.S erverName .here14.D ocumentRoot /root/myfile/myboa/server15.D irectoryIndex index.html16.#DirectoryMaker /usr/lib/boa/boa_indexer17.K eepAliveMax 100018.K eepAliveTimeout 10019.M imeTypes /root/myfile/myboa/server/mime.type20.D efaultType text/html21.#Alias /doc /usr/doc22.S criptAlias /cgi-bin/ /root/myfile/myboa/server/cgi-bin23.S criptAlias /index.html/ /root/myfile/myboa/server/http-java-applet (23可以没有)在root目录下创建:/root/myfile/myboa/server/在server下创建cgi-bin、http-java-applet、并将PC上/etc/mime.types文件拷贝到开发板server目录下在/root/myfile下创建bin目录将可执行文件boa复制到bin目录下移植servfox24.【移植servfox】其实spcaview也可以做采集端。
boa移植boa交叉编译BOA 服务器是⼀个⼩巧⾼效的web服务器,是⼀个运⾏于unix或linux下的,⽀持CGI的、适合于嵌⼊式系统的单任务的http服务器,源代码开放、性能⾼配置boa-0.94.13 # ./configure修改MakefileCC = arm-linux-gccCPP = arm-linux-gcc -E编译boa-0.94.13 # make出现如下错误出现错误:yacc -d boa_grammar.ymake: yacc: Command not foundmake: *** [y.tab.c] Error 127解决办法:# sudo apt-get install bison出现错误:lex boa_lexer.lmake: lex: Command not foundmake: *** [lex.yy.c] Error 127解决办法:# sudo apt-get install flex出现错误:arm-none-eabi-gcc -g -O2 -pipe -Wall -I. -c -o alias.o alias.cIn file included from alias.c:26:0:boa.h:41:19: fatal error: netdb.h: No such file or directorycompilation terminated.<builtin>: recipe for target 'alias.o' failedmake: *** [alias.o] Error 1解决办法://将交叉编译⼯具链换成gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72)出现错误:arm-linux-gcc -g -O2 -pipe -Wall -I. -c -o util.o util.cutil.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing tokenmake: *** [util.o] Error 1解决办法:# vi compat.h //修改120⾏#ifdef HAVE_TM_GMTOFF#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff#else制作cgi页⾯交叉编译出⼀个cig脚本,供boa使⽤。
Ubuntu16的boaweb服务器搭建在VMware上利用Ubuntu 16.04.LTS搭建Boa web服务器作为一个初学的菜鸟,第一次搭建web服务器,搭的还是最为简单的boa服务器,在网上是各种找资料啊,参考了如CSDN博客、Linux公社、博客园等诸多有名的网站,用了小半周才勉强弄出来,许多地方其实还是不太理解,只是用网上的方法搭建出来,结合自己搭建的过程,写了这么一篇文档,还希望各位大神老师批评指正,下面就是我自己的一个搭建过程。
一、在虚拟机上安装Ubuntu16Ubuntu16的百度云连接https:///s/1o87P78Q 运行VMware,点击创建新的虚拟机,选择“典型”,点击“下一步”选择“稍后安装操作系统”,点击“下一步”客户机操作系统选择“Linux”,版本选择“Ubuntu 64位”,点击“下一步”填写虚拟机名称,选择保存位置,点击“下一步”点击“下一步”,点击“完成”此时会出现一个新的页面,页面名称就是虚拟机名称点击“编辑虚拟机设备”开始对虚拟机硬件设备进行更改,修改网络配适器,选择自定义(u):特定虚拟网络,下面选择VMnet8(NAT模式),点击“确定”在CD/DVD选项中选择“使用ISO映像文件”,通过储存好的路径打开ISO映像文件,点击“确定”点击开启此虚拟机,此时可能会出现对话框说虚拟机版本不兼容,这时需要重新启动电脑,比如我的电脑本身装的为windows7 则应该重新启动windows7,按esc,然后按F10进入BIOS 系统选择“系统设置” 用左右键选择“处理器虚拟化技术”按回车键选择“启用”,按回车键,按F10保存并退出。
(每个人电脑不一样,依据自己的电脑进行改变)运行VMware,点击开启此虚拟机,语言改为中文简体,点击安装Ubuntu直接点击Continue,不进行选择选择Erase disk and install Ubuntu 使用Ubuntu默认的分区,自己不进行分区,点击Install Now,点击Continue选择你的所在地,选择键盘语言,填写用户名,主机名和密码Ubuntu开始安装,时间大约为2~3个小时,请耐心等待,完成后会提示重启,点击“Restart Now”关机,然后点击“编辑虚拟机设备”,在CD/DVD选项中选择“使用物理驱动器”,点击确定,然后关机然后重新进入Ubuntu16此时的Ubuntu16的屏幕非常小,打开终端,输入xrandr结果为然后输入xrandr -s 1280x768注意中间那个是字母x但是这个只是修改当前一次的,如果想一直修改,需要修改其配置文件/home/namo/.profile,利用gedit /home/namo/.profile打开文件,在文件末尾输入Sudo xrandr --newmode “1280x768_60.00”173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsyncSudo xrandr --addmode Virtual1 “1280x768_60.00”保存并退出此时如果进行su操作的话,会发现认证失败,需要重新更改密码,在终端输入sudo passwd 然后输入当前密码,此时终端会让我们输入新的密码并再次确认,新的密码可以和上一个密码相同,也可以不同,这样密码就更改完了。
boa成功移植到S3C2410开发板上ARM-LINUX学习整理交流2009-06-06 16:14:27 阅读277 评论0字号:大中小2009 05 11一:下载源码:/[root@localhost ~]# cd /usr/src[root@localhost src]# tar zxvf boa-0.94.13.tar.tar[root@localhost src]# cd boa-0.94.13[root@localhost boa-0.94.13]# cd src[root@localhost src]# ./configure二:编译前修改的文件:1. 修改Makefile文件,找到CC=gcc和CPP=gcc -E,分别将其改为交叉编译器安装的路径:CC=/usr/local/arm/2.95.3/bin/arm-linux-gccCPP=/usr/local/arm/2.95.3/bin/arm-linux-gcc –E保存退出。
2. 修改编译方式:LDFLAGS = -g –static注: 使用静态编译可以让目标文件自动的包含所需要的库文件,而动态编译需要手工拷贝库文件。
3.修改/src/defines.h文件:#define SERVER_ROOT "/etc/boa"4 修改boa-0.94/src/ util.c文件修改char *get_commonlog_time(void)函数。
time_offset = 0;5. 修改src/config.c:加Current_uid=16. 修改compat.h:把第120 行的#defineTIMEZONE_OFFSET(foo)foo##->tm_gmtoff修改为:#defineTIMEZONE_OFFSET(foo)foo->tm_gmtoff7.修改/src/boa.c,注释掉下面两行:/* if (setuid(0) != -1) {DIE("icky Linux kernel bug!");} *//*if (passwdbuf == NULL) {DIE("getpwuid");}*/8 gethostbyname:: Resource temporarily unavailable这个问题我也遇到过,我只是把src文件夹下的config.c里的if(!server_name){..........}(大概在266行到286行之间)注释掉,就能运行在板子上运行boa,到现在为止没有遇到过是么问题。