Linux下的Web服务器的移植和建立实验

更新时间:2024-01-01 06:40:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Linux下的Web服务器的移植和建立实验

1 实验目的

1. 掌握在Linux下建立 Web 服务器的方法; 2. 掌握在动态Web技术的实现方法。

2 实验内容

1. 建立 boa Web 服务器;

2. 设计一个简单的 CGI 程序。

3 实验设备

1.硬件:JXARM9-2410教学实验箱、ARM11-6410实验箱、PC机; 2.软件:PC机操作系统win7 + VMware+Ubuntu11.10虚拟操作系统。

4 预备知识

1. C 语言的基础知识;

2.程序调试的基础知识和方法; 3. Linux 的基本操作;

4.掌握 Linux 下的程序编译与交叉编译过程; 5.掌握 Linux 下基本的应用程序编写方法。

5 基础知识

Linux 具有良好的网络支持,在上面建立 Web 服务器和设计动态 Web 网页是比较容易的事情。本实验讲述如何在 JXARM9-2410-3 教学实验系统中建立嵌入式 Web 服务器,以及怎样建立动态 Web 页面。

一、超级终端

普通PC软件开发是使用键盘和显示器作为标准输入输出设备,而嵌入式系统开发一般使用串口作为标准输入输出设备。嵌入式系统上电后执行u-boot代码进行系统引导,在u-boot中指定了串口0作为输入输出设备。这对于我们进行嵌入式应用非常重要。 超级终端是windows XP系统自带的终端连接软件,当连接设备选择为串口时,即可作为实验箱的输入输出界面使用。Widows 7等版本不自带超级终端,但网上有大量的类似软件可以使用。下面介绍超级终端的使用方法。

下载一个超级终端,例如:windows 7 超级终端 v1.01 绿色版

打开超级终端后弹出的画面如图1所示,随意给新建连接起个名称,如ARM、ARM2410:

图1 超级终端界面1

点击确定后,弹出的界面如图2所示:

图2

点击取消后,设置连接

图3

点击图3中红圈所圈的工具图标,弹出的设置对话框如图4所示

图4

点击“连接时使用”的下拉条,选中相应的串口设备,普通PC机上一般是com1。如果是笔记本或其他电脑没有自带串口的,一般使用USB转串口设备,此时需先打开系统的设备管理器,找到端口一项,查看USB serial的端口号。然后点击超级终端设置对话框中的设置按钮,打开串口属性设置对话框,设置如图5所示:

图5

按照图5所示进行设置后,点击确定后返回到图4对话框,再点击确定,回到主界面,点击呼叫图标(有时候设置好后返回主界面会自动连接呼叫)如图6所示红圈内的电话标志,就可以连接外部串口设备了。如果要断开连接就点击旁边的断开图标。

图6

二、嵌入式Linux开发环境的建立(JXARM9-2410实验箱)

嵌入式Linux开发环境主要包括四个方面:选择并安装一个合适的主机Linux操作系统;在主机Linux系统中安装tftp服务器;在主机中安装Linux系统;在主机Linux系统安装交叉编译器。

1.安装主机Linux操作系统

要进行嵌入式linux的开发首先要按照好一个主机开发环境,因为嵌入式linux下的大部分开发工作都是在pc中开发的。如果你的机器足够好(内存至少大于1GB),那么建议首先在Windows下安装一个虚拟机软件vmware,毕竟Windows下可用的工具比较多,再在vmware基础上安装一个桌面版本的Linux系统。实验室使用的是vmware-8.0和Ubuntu-11.10,这2个软件都可以在网上下载到。

由于在linux系统的开发过程中需要经常使用管理员权限,因此建议使用root登录linux系统。通常新建系统是不允许root登录的,如何获得root登录则需根据不同的linux系统版本在网络上查找方法,本文不详细介绍。

2.建立tftp服务器

在嵌入式linux开发过程中需要使用tftp方式从Linux主机下载文件到板子中,因此需要在主机linux系统中安装tftp服务器。

(1)安装tftp软件

在Ubuntu的终端中输入“apt-get install tftpd tftp xinetd”,默认执行到结束。

(2)建立配置文件

在终端中输入“gedit /etc/xinetd.d/tftp”新建一个tftp配置文件,并在文件中输入:

service tftp {

socket_type = dgram protocol = udp wait = yes user = root

server = /usr/sbin/in.tftpd server_args = -s /tftpboot disable = no per_source = 11 cps = 100 2 flags = IPv4 }

服务器的根目录地址即为tftpboot。 (3)重启服务

在终端中输入“/etc/init.d/xinetd restart”。

3.建立nfs服务器

在嵌入式linux开发的时候,常常需要使用nfs以方便程序的调试。使用nfs,用户可以将板子要用到的根文件系统放在主机目录下,开发板则通过以太网挂载到这个目录并将这个目录下的文件作为根文件系统的内容,这样用户的程序更新后不比重新烧写板子的根文件系统便能被重新使用,这点能够大大加快程序的调试。

Ubuntu下安装nfs服务器的步骤如下: (1)进行NFS服务器端与客户端的安装:

apt-get install nfs-kernel-server nfs-common portmap 安装客户端的作用是可以在本机进行NFS服务的测试。 (2)配置portmap 两种方法任选一种就可以: gedit /etc/default/portmap 去掉-i 127.0.0.1

或:dpkg-reconfigure portmap 运行后选择“否”

另外很重要的一点,要用sysv-rc-conf(而不是chkconfig)工具查看一下当前nfs和portmap的状态,若是off,则用sysv-rc-confportmapon或sysv-rc-confnfs-kernel-serveron打开

(3)配置挂载目录和权限 gedit /etc/exports 在最后一行添加配置如下: /nfsboot *(rw,sync)

其中/nfsboot指的是是NFS的共享目录,*表示任何IP都可以共享这个目录,你可以改为受限的IP,rw表示的是权限,sync是默认的。

(4)重启NFS服务

/etc/init.d/nfs-kernel-server restart 重启nfs服务

4.安装交叉编译链

(1)硬件环境:86PC

软件环境:ubuntu11.10桌面版(宿主机) (2)解压arm-linux-gcc-4.3.2.tgz

#tar xvzf arm-linux-gcc-4.3.2.tgz –C /

(C是大写,这样写的目的是可以省去解压后必须移动安装目录的步骤)

执行该命令,将把 arm-linux-gcc 自动安装到/usr/loca/arm/4.3.2 目录。 (3)把编译器路径加入系统环境变量,运行命令 #gedit /etc/bash.bashrc 编辑/etc/bash.bashrc文件,

在最后一行 export PATH=$PATH:/usr/local/arm/4.3.2/bin,保存退出。 (4)使新的环境变量生效 # source /etc/profile

(5)检查是否将交叉编译环境的路径加入到PATH: #echo $PATH

如果显示的内容中有/usr/local/arm/4.3.2/bin:,说明已经将交叉编译器的路径加入PATH,在我的主机上显示:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin:/usr/local/arm/4.3.2/bin 以上均是主机上的路径。 (6)查看交叉编译环境版本 #arm-linux-gcc –v 我的主机显示: Using built-in specs.

Target: arm-none-linux-gnueabi Configured with: /scratch/julian/lite-respin/linux/src/gcc-4.3/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --enable-shared --enable-symvers=gnu --enable-__cxa_atexit --with-pkgversion='Sourcery G++ Lite 2008q3-72' --with-bugurl=https://support.codesourcery.com/GNUToolchain/ --disable-nls --prefix=/opt/codesourcery

--with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc

--with-build-sysroot=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/libc

--with-gmp=/scratch/julian/lite-respin/linux/obj/host-libs-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr

--with-mpfr=/scratch/julian/lite-respin/linux/obj/host-libs-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --disable-libgomp --enable-poison-system-directories

--with-build-time-tools=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/bin

--with-build-time-tools=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/bin

Thread model: posix

gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72)

以上显示交叉编译环境的目标文件arm-none-linux-gnueabi配置、线程模式和版本号 4.3.2 。

三、移植boa

(1)下载 boa 源码包

下载地址:https://sourceforge.net/project/showfiles.php?group_id=78 得到 boa-0.94.13.tar.gz,解压到工作目录中

# tar zxvf boa-0.94.13.tar.gz –C /opt/cvtech/ 配置 boa:

(2)进入源码目录的src子目录

# cd /opt/cvtech/boa-0.94.13/src (3)修改Makefile文件 # ./configure # vi Makefile

在 31,32 行,指定交叉编译器,修改如下

CC =/usr/local/arm/4.3.2/bin/arm-linux-gcc CPP= /usr/local/arm/4.3.2/bin/arm-linux-gcc-E

(4)修改 boa.c 文件: # vi boa.c

注释掉 225 到行 227 的内容 //if (setuid(0) != -1) {

// DIE(\ // }

(5)修改 compat.h 文件: # vi compat.h

修改 120 行内容如下:

#define TIMEZONE_OFFSET(foo) foo->tm_gmtoff (6)编译并且优化

# cd src # make

#/usr/local/arm/4.3.2/bin/arm-linux-strip boa

四、 移植 cgic 库

(1)下载cgic库,地址为:http://www.boutell.com/cgic/cgic205.tar.gz 下载后,解压到工作目录:

# tar zxvf cgic205.tar.gz –C /opt/cvtech/ (2)配置编译条件

# cd /opt/cvtech/cgic205 # vi Makefile

修改 Makefile 内容如下: CFLAGS=-g -Wall

CC=/usr/local/arm/4.3.2/bin/arm-linux-gcc AR=/usr/local/arm/4.3.2/bin/arm-linux-ar

RANLIB=/usr/local/arm/4.3.2/bin/arm-linuxranlib LIBS=-L./ -lcgic

all: libcgic.a cgictest.cgi capture

install: libcgic.a

cp libcgic.a /usr/local/lib cp cgic.h /usr/local/include

@echo libcgic.a is in /usr/local/lib. cgic.h is in /usr/local/include.

libcgic.a: cgic.o cgic.h rm -f libcgic.a

$(AR) rc libcgic.a cgic.o $(RANLIB) libcgic.a

#mingw32 and cygwin users: replace .cgi with .exe

cgictest.cgi: cgictest.o libcgic.a

$(CC) $(CFLAGS) cgictest.o -o cgictest.cgi ${LIBS}

capture: capture.o libcgic.a

$(CC) $(CFLAGS) capture.o -o capture ${LIBS}

clean:

rm -f *.o *.a cgictest.cgi capture

(3)编译并优化

编译,生成 capture 的可执行文件和测试用的 cgictest.cgi 文件 $ make

$/usr/local/arm/4.3.2/bin/arm-linux-strip capture

五、 配置 WEB 服务器

(1)在文件系统下新建nfsboot目录 #mkdir nfsboot

(2)将boa.conf,boa可执行文件,capture 的可执行文件和测试用的 cgictest.cgi 文件,全部拷贝到nfsboot目录中, #cd /opt/cvtech/boa-0.94.13 #cp boa.conf /nfsboot

#cd /opt/cvtech/boa-0.94.13/src #cp boa /nfsboot

#cd /opt/cvtech/cigc205 #cp capture /nfsboot

#cp cgictest.cgi /nfsboot (3)修改 boa.conf #cd /nfsboot #vi boa.conf 配置如下:

Port 80

//监听的端口号,缺省都是 80,一般无需修改

Listen 192.168.1.6 //bind 调用的 IP 地址

User root Group root

//作为哪个用户运行,即它拥有该用户组的权限,一般都是 root,需要在/etc/group 文件中有

root 组

ErrorLog /dev/console

//错误日志文件。如果没有以/XXX 开始,则表示从服务器的根路径开始。如果不需要错误日志,则用/dev/null。系统启动后看到的 boa的打印信息就是由/dev/console 得到

ServerName yellow //服务器名称

DocumentRoot /web

//非常重要,这个是存放 html 文档的主目录

DirectoryIndex index.html //html 目录索引的文件名

KeepAliveMax 1000

//一个连接所允许的 http 持续作用请求最大数目

KeepAliveTimeout 10

//http 持续作用中服务器在两次请求之间等待的时间数,以秒为单位,超时将关闭连接

MimeTypes /etc/mime.types //指明 mime.types 文件位置

DefaultType text/plain

CGIPath /bin:/usr/bin:/usr/local/bin //提供 CGI 程序的 PATH 环境变量值

ScriptAlias /cgi-bin/ /web/cgi-bin/

//非常重要,指明 CGI 脚本的虚拟路径对应的实际路径

六、挂载并测试

(1)修改虚拟机vmware网络连接方式:菜单虚拟机->设置->网络适配器->网络连接选择桥接方式和复制物理网络连接状态。

(2)修改虚拟机linux系统的网络连接:点击系统界面右上方的网络连接图标(ubuntu和xubuntu图标不一样),选择编辑连接-》有线-》添加,有线连接名称改为2410或6410,选IPv4设置,方法选“手动”,点击添加,在地址栏输入:192.168.1.111,(这个IP地址最后一段可以自己随便设,只要不和实验的ip一样就行),在子网掩码输入:255.255.255.0。点击保存。重新点击系统界面右上方的网络连接图标,选择刚建立的连接。连接好后查看链接信息看ip信息是否正确。

3)windows下使用超级终端连接实验箱。如果使用笔记本,则需要首先安装usb转串口线的驱动程序,然后再将usb转串口线插到PC的usb接口上。打开windows的设备管理器,找到端口一项,展开后可以看到USB-bridge-to-serial(com3),com3指的是usb转串口线的端口号,也可能是com4、com5?。打开windows下的超级终端,win7系统没有自带的,就从网上下载一个。随便取个名字,打开属性,点击连接时使用,选刚才那个com几,然后点配置,设115200,8,无,1,无。好了,点连接。将usb转串口线和实验箱连接,打开实验箱电源,超级终端上有显示。如接2410实验箱,则等显示停后,按实验箱上的键盘7,启动linux文件系统,等显示再次停止后,按PC机的Ctrl+c键,进入linux系统终端,显示只有一个#号。如接6410实验箱,则等显示到?.not Server后,会停止,此时在超级终端中回车,即有“root$real6410#”提示,此时已经进入linux文件系统的终端了。

4)连接网线:用网线将PC机和实验箱相连。虚拟机linux系统的网络连接会有显示。如用笔记本,此时要断开无线连接。然后在超级终端中输入“ping 192.168.1.111”就是虚拟机linux系统的ip地址,如果不断有提示说收发多少,延迟xxms,即说明连接正常。如提示半天没反应,有time out之类的,说明没连接成功,要检查虚拟机linux系统的网络连接(不知道怎么停止)

5)挂载:连接成功后,在超级终端中输入 : “mount 192.168.1.111:/nfsboot/ /mnt/nfs”,然后输入“cd /mnt/nfs”进入nfs目录,然后输入ls,查看有没有挂载成功。 6)在超级终端中进行输入

#mkdir /web //在开发板根目录先创建web目录 #mkdir /web/cgi-bin //在web目录先创建cig-bin目录 #mkdir /etc/boa //在etc目录下创建boa目录

#cp /mnt/nfs/boa.conf /etc/boa //复制boa.conf文件到开发板的/etc/boa目录 #cp /mnt/nfs/boa /sbin //复制可执行文件boa到开发板的/sbin目录

#cp /mnt/nfs/capture /web/cgi-bin //复制可执行文件capture到开发板的/web/cgi-bin目录

cp /mnt/nfs/cgictest.cgi /web/cgi-bin

测试:

#cd /sbin //进入/sbin目录

#./boa //运行boa服务器可执行文件 然后在 PC 端,打开网页浏览器,输入测试网址 http://192.168.1.6/cgi-bin/cgictest.cgi 即可打开测试界面

七、实验中遇到的问题及解决方案

(1)在移植boa的时候遇到的问题是yacc以及fle等语句无法使用

解决方法:使用apt-get install bison,但是在双系统中一直无法实现,所以使用其他的方案。1、下载并安装m4。2、下载并安装flex。3、下载并安装bison。4、下载并安装libpcap。

tar -zxvf m4-1.4.9.tar.gz cd m4-1.4.9

sudo ./configure sudo make

sudo make install

在安装flex的时候,一些程序试图在/usr/lib下寻找lex库。创建一个符号链接来满足要求:

ln -s libfl.a /usr/lib/libl.a cat > /usr/bin/lex << \#!/bin/sh

# Begin /usr/bin/lex

exec /usr/bin/flex -l \

# End /usr/bin/lex EOF

chmod 755 /usr/bin/lex

(2)在移植boa的时候,优化的时候出现的问题

/usr/local/arm/4.3.2/bin/arm-linux-strip: Unable to recognise the format of the input file `boa'

在移植cgic库时遇到的问题是

/usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: cannot find -lcgic collect2: ld returned 1 exit status make: *** [cgictest.cgi] 错误 1

解决的方案是:我们又重新安装了一遍系统,重做了一遍,一切问题都没有了。很奇怪。 (3)在挂载测试的时候,没有权限调用可执行文件boa。 没有解决。

八、实验总结

在为期3个礼拜的嵌入式综合实验中,感触最深的是不断地失败,不断地重来,不停地去思考如何正确地完成自己的课题,在不断地尝试中,慢慢地对嵌入式有了一些自己的理解,在尝试和失败中,对arm有了更客观的了解,虽然最后我们组还是没有把课题完成,但是成不成功已经无所谓,因为在过程中我们已经尽力了,并且学到了自己想学的。

组长:冯成龙 硬件部分的链接,嵌入式环境的搭建,实验报告总结。 组员:宁华勇 boa,cgic的移植与配置,实验问题的记录与解决。

本文来源:https://www.bwwdw.com/article/izhx.html

Top