【任务目标】:

Ø 任务 1:完成 Ubuntu/Centos 虚拟机的安装;

Ø 任务 2:搭建 gcc、make、sshd 服务等嵌入式开发环境;

Ø 任务 3:完成 BOA 软件服务的移植和 BOA 服务的配置;

Ø 任务 4:完成 Web 服务中静态页面的测试;

【任务说明】:

l 任务 1 描述:

 可以在 vmware workstation 软件中安装 Ubuntu 或者 Centos 系统。以下以 Ubuntu18.04 为例作任务说明。   Ubuntu 版本建议:18.04LTS  20.04LTS(最小系统安装即可)   Centos 版本建议:6.x  7.x(最小系统安装即可)  阿里云服务器也可以(但需要后期配置防火墙和访问策略)

l 任务 2 描述:

 1、由于最小系统没有 C 语言编译环境,需要进行安装。建议安装软件有 gcc、 make、vim 工具。 

 $ sudo apt install gcc make vim-nox

服务器bios里改ip_ubuntu gcc 安装

“现在没有可用的软件包 gcc,但是它被其它的软件包引用了。”

首先我检查了虚拟机从主机映射过来的的网络连接,找到右下角的“网络适配器”右键“设置”,手动选择 【NAT模式(N):用于共享主机Ip地址】,然后确定。

服务器bios里改ip_iis配置web服务器_02

服务器bios里改ip_服务器bios里改ip_03

再次输入

服务器bios里改ip_ubuntu ..路径找不到_04

依然报错

服务器bios里改ip_ubuntu ..路径找不到_05

使用“sudo gedit /etc/apt/sources.list”修改源,在文件末尾手动加上两行代码:“deb http://dk.archive.ubuntu.com/ubuntu/ xenial main”和“deb http://dk.archive.ubuntu.com/ubuntu/ xenial universe”保存

服务器bios里改ip_ubuntu gcc 安装_06

服务器bios里改ip_ubuntu ..路径找不到_07

会有警告出现,但是这个警告不是错误,

服务器bios里改ip_ubuntu ..路径找不到_08

于是我用命令行打开GTK应用程序“sudo -H gedit /some/where/file.txt &>/dev/null “

服务器bios里改ip_ubuntu gcc 安装_09

服务器bios里改ip_服务器bios里改ip_10

重新安装vim工具“sudo apt-get install vim”

服务器bios里改ip_服务器bios里改ip_11

再切换到之前的终端执行gcc安装,成功!

服务器bios里改ip_服务器bios里改ip_12

2、为了方便后期向虚拟机传送文件和操作 Linux 系统,安装 sshd 服务。  

$ sudo apt install openssh-server 

服务器bios里改ip_ubuntu ..路径找不到_13

Y继续执行

服务器bios里改ip_服务器bios里改ip_14

3、若需要在开发板上进行 web 服务的搭建,还需要安装对应开发板的交叉编译器环 境,同时配置系统环境变量和交叉编译器所依赖的库问题。  

$ sudo apt install lib32ncurses5 lib32z1

服务器bios里改ip_ubuntu ..路径找不到_15

Y继续执行

服务器bios里改ip_ubuntu ..路径找不到_16

 4、在 windows 中可以使用 mobaxterm 这类软件,配置 ssh 客户端信息,连接虚拟机 的 Ubuntu 系统。 

服务器bios里改ip_iis配置web服务器_17

5、选择一款自己熟悉的编辑器,比如 vscode,notepad++,clion 等。 

6、如果需要开发板,配置好串口、虚拟机双网卡(可选)环境。

 l 任务 3 描述:

 1、什么是 TCP 服务器,TCP 服务器运行后的效果怎么验证?

        什么是 TCP 服务器我们现在设备使用的网络环境是四层TCP/IP协议族(一系列协议的集合),TCP/IP协议族可按层次划分为四层,从上层到底层为:应用层,传输层,网络层,数据链路层。TCP / IP在工程开发应用中,我们更多的是指在IP(互联网协议)上运行TCP(传输控制协议),核心协议包括IP,TCP、UDP(用户数据报协议)和其他相关应用水平协议,如DNS,HTTP,FTP,Telnet及更多。

              应用层我们要做一个嵌入式web控制器,下一层传输层我们需要选择TCP协议(TCP有三次握手和超时重传机制,所以TCP里面包含了数据发送的防丢失措施)。

服务器bios里改ip_ubuntu gcc 安装_18


TCP IP UDP在socket通信的关系图

TCP 服务器运行后的效果如果TCP服务器运行成功,在操作系统上,传输层上应该体现出TCP的-一个特性(端口号),而这个特性属于操作系统内核,不能直接查看的。Linux系统提供了一个观察传输层状态的工具: netstat -tuan

 2、什么是 Web 服务器,Web 服务器和 TCP 服务器的区别是什么?

区别:web服务器是应用层,TCP服务器更多的是指我在传输层选择了TCP协议。

定义:web服务器也称为www服务器、HTTP服务器,其主要功能是提供网上信息浏览服务。

TCP服务器:一个应用服器只要传输层协议使用了TCP,那么这样的应用程序就称之为TCP服务器

Web服务器:本身就是一个TCP服务器,应用层又在数据格式处理上采用了一个HTTP的协议标准,这样的TCP服务器称之为web服务器。web服务器可以为用户的浏览器提供合法的数据,浏览器能够识别网页的数据所以我们才能上网看到网页内容。

通俗理解:只要web服务器在传输层采用了TCP协议来传输,我们就将这个web服务器等效为TCP服务器。我们的浏览器是客户端,TCP服务器相当于web服务器。

 3、嵌入式系统中,常用的开源 Web 服务器有哪些?

Unix和Linux平台下常用的服务器有BOA、appweb、Apache、Nginx、Lighttpd、Tomcat、IBM WebSphere等,其中应用最广泛的是Apache。而Window NT/2000/2003平台下最常用的服务器是微软公司的IIS。

BOA

功能简单

代码量少

学习

appweb

功能强大

代码量大

工程使用

4、如何移植 BOA 服务器(X86 版,ARM 版)?

运行于我们电脑(客户端)的浏览器首先要与嵌入式Web服务器BOA端建立连接,打开一个套接字虚拟文件,此文件建立标志着SOCKET连接建立成功。然后客户端浏览器通过套接字SOCKET以GET或者POST参数传递方式向Web服务器提交请求,Web浏览器提交请求后,通过HTTP协议传送给Web服务器。Web服务器接到请求后,根据请求的不同进行事务处理,返回HTML文件或者通过CGI调用外部应用程序,返回处理结果。服务器通过CGI与外部应用程序和脚本之间进行交互,根据客户端浏览器在请求时所采用的方法,服务器会搜集客户所提供的信息,并将该部分信息发送给指定的CGI扩展程序,CGI扩展程序进行信息处理并将结果返回给服务器,然后服务器对信息进行分析,并将结果发送回电脑(客户端)在浏览器上显示出来。

嵌入式Web服务器BOA移植:

1.官网下载好BOA源码压缩文件boa-0.94.13.tar.gz。

2.编辑TCP socket连接代码文档,MobaXterm 创建tcp_base_server.c文档:

源码:

#include

#include

#include

#include

#include

#include

#include

#include

/*

 * TCP初始化服务器模型代码

 * */

int init_socket(unsigned short port)

{

    int tcp_socket;

    struct sockaddr_in self;

    int ret;

    tcp_socket = socket(AF_INET, SOCK_STREAM, 0);

    if (tcp_socket == -1) {

        perror("socket");

        return -1;

    }

    // 绑定自己开放的IP和端口

    memset(&self, 0, sizeof(self));

    self.sin_family = AF_INET;

    self.sin_port = htons(port);

    self.sin_addr.s_addr = INADDR_ANY;

    ret = bind(tcp_socket, (struct sockaddr *)&self, sizeof(self));

    if (ret == -1) {

        perror("bind");

        return -1;

    }

    listen(tcp_socket, 5);

    return tcp_socket;

}

int main()

{

    int listen_fd;

    int new_fd;

    char buf[1024];

    int ret;

    char *tmp = "Hello World";

    listen_fd = init_socket(8181);

    if (listen_fd == -1){

        fprintf(stderr, "init socket error!\n");

        return -1;

    }

    printf("listen...\n");

    // getchar();

    // 接收有没有新的连接请求,

    // 从listen_fd描述符对应的空间来取出客户端连接

    while (1) {

        new_fd = accept(listen_fd, NULL, NULL);

        if (new_fd == -1) {

            perror("accept");

            return -1;

        }

        printf("have a new connection!\n");

        // 接收新客户端发来的请求

        ret = recv(new_fd, buf, sizeof(buf)-1, 0);

        buf[ret] = 0;

        printf("接收的内容: %s\n", buf);

        // 响应客户端的请求

        write(new_fd, tmp, strlen(tmp));

        // getchar();

        close(new_fd);

    }

    close(listen_fd);

    return 0;

}

服务器bios里改ip_ubuntu ..路径找不到_19

服务器bios里改ip_iis配置web服务器_20

服务器bios里改ip_iis配置web服务器_21

服务器bios里改ip_ubuntu ..路径找不到_22

3.“mkdir web_prj”在根目录下创建一个目录

服务器bios里改ip_ubuntu ..路径找不到_23

,“cd web_prj”进入目录里,

服务器bios里改ip_ubuntu gcc 安装_24

在web_prj再创建一个test “mkdir test”,进入test目录里面“cd test”

服务器bios里改ip_ubuntu gcc 安装_25

把tcp_base_server.c文档移动到test目录下

服务器bios里改ip_ubuntu ftp服务器配置_26

“gcc -o tcpserver tcp_base_server.c”编译

服务器bios里改ip_ubuntu ftp服务器配置_27

直接运行tcpserver程序“./tcpserver”,打印出监听描述符

服务器bios里改ip_ubuntu ..路径找不到_28

netstat查看TCP有没有留下烙印,由于是新装的系统需要按提示安装netstat,安装完毕查看netstat

服务器bios里改ip_服务器bios里改ip_29

tcpserver程序已经在一个终端运行,我们在另一个终端用“netstat -tan”查看(已经出现了8181端口和80端口)

服务器bios里改ip_ubuntu ..路径找不到_30

服务器bios里改ip_ubuntu gcc 安装_31

服务器bios里改ip_ubuntu ..路径找不到_32

在第一个终端摁“Ctrl c”结束掉tcpserver程序运行,在另一个终端再次用“netstat -tan”查看(8181没有了,80有)8181开启相当于在运输层TCP上烙下烙印,这样才能保证后面的实验服务器正常访问。

服务器bios里改ip_iis配置web服务器_33

服务器bios里改ip_ubuntu ftp服务器配置_34

 5、移植服务后的配置文件在哪里,配置选项有哪些?

 l 任务 4 描述:

 1、Web 服务的页面存放目录在哪里?

         在web_prj再创建一个sources“mkdir sources”

服务器bios里改ip_ubuntu ..路径找不到_35


把boa-0.94.13.tar.gz拷到sources目录下“cp boa-0.94.13.tar.gz web_prj/sources/”

服务器bios里改ip_ubuntu gcc 安装_36


          解压到上级目录web_prj 下,“tar -zxvf boa-0.94.13.tar.gz -C ../”

服务器bios里改ip_iis配置web服务器_37


服务器bios里改ip_ubuntu gcc 安装_38


进入boa-0.94.13,“cd boa-0.94.13/”

服务器bios里改ip_ubuntu ..路径找不到_39


boa-0.94.13源码中没有makefile,所以需要我们自己配置生成makefile。

1.根据目标机器特性进行配置(configure脚本)进入src目录,“./configure

服务器bios里改ip_iis配置web服务器_40


通过“./configure”我们就可以看到Makefile的出现

服务器bios里改ip_服务器bios里改ip_41


2.工具的指定,修改Makefile使得支持目标板的工具

服务器bios里改ip_ubuntu ftp服务器配置_42


“vim Makefile”修改Makefile

服务器bios里改ip_ubuntu ftp服务器配置_43


Esc,命令行下输入:“:wq! (保存退出)

3.生成(make)

服务器bios里改ip_ubuntu ftp服务器配置_44

出错,没有yacc命令,进行安装

服务器bios里改ip_ubuntu ..路径找不到_45


服务器bios里改ip_ubuntu ftp服务器配置_46


再执行make,第一个工具解决,还有第二个需要安装,因为我们的版本比较老,系统用了flex代替lex

服务器bios里改ip_ubuntu ..路径找不到_47


服务器bios里改ip_iis配置web服务器_48


装完以后再make,Makefile的警告权限开的比较大

服务器bios里改ip_iis配置web服务器_49


出错,需要修改compat.h,“vim compat.h”,打开后它处于普通模式,这时按键盘i,进入插入编辑模式,如果按a是追加编辑模式。编辑模式中按esc又变成普通模式,

修改后:

服务器bios里改ip_服务器bios里改ip_50


服务器bios里改ip_ubuntu ..路径找不到_51


保存退出后继续make

服务器bios里改ip_服务器bios里改ip_52


剔除

服务器bios里改ip_iis配置web服务器_53


 2、浏览器访问路径原理和服务配置文件的对应关系?

程序的一次编译,能够在多个不同的环境进行运行。

boa配置文件告诉boa程序如何进行工作 (/etc/boa/boa. conf)

修改配置文件之前先备份,防止改错了恢复不了,“cp boa.conf boa_bak.conf

服务器bios里改ip_ubuntu ftp服务器配置_54


boa-0.94.13 目录下创建,“sudo mkdir /etc/boa”,再将boa.conf 拷贝到/etc/boa 目录里面,“sudo cp boa.conf /etc/boa/

sudo vim /etc/boa/boa.conf“将/etc/boa下的boa.conf真正修改

修改用户:

服务器bios里改ip_ubuntu ..路径找不到_55

服务器bios里改ip_服务器bios里改ip_56


服务器bios里改ip_ubuntu ..路径找不到_57


错误日志修改

服务器bios里改ip_iis配置web服务器_58


访问日志修改

服务器bios里改ip_ubuntu gcc 安装_59


DocumentRoot修改

服务器bios里改ip_iis配置web服务器_60


服务器bios里改ip_ubuntu ..路径找不到_61

这个是空洞文件

保存退出

再次查看修改已经保存

服务器bios里改ip_ubuntu ..路径找不到_62


在home/fy下创建log和www目录“mkdir log”,“mkdir www”

服务器bios里改ip_服务器bios里改ip_63


服务器bios里改ip_ubuntu ..路径找不到_64


移除.boa.conf.swp和.boa.conf.swo,非正常关闭vi编辑器时会生成一个.swp文件和.swo文件

服务器bios里改ip_iis配置web服务器_65


服务器bios里改ip_ubuntu gcc 安装_66


重启虚拟机

服务器bios里改ip_iis配置web服务器_67


boa.conf配置文件里写了什么目录,就看你实际上有没有这个目录,程序是根据你配置文件里写的目录去创建文件,系统没有这些目录,肯定要报错。变量后面的路径信息,系统上有没有这些目录值,没有就创建

服务器bios里改ip_ubuntu gcc 安装_68

服务器bios里改ip_ubuntu ftp服务器配置_69


进入目录“cd ~/web_prj/boa-0.94.13/src” 再次执行命令,成功!

服务器bios里改ip_ubuntu ..路径找不到_70


确定静态文件测试通过,开始创建一个前端页面:

把前端作业移植到linux下

服务器bios里改ip_ubuntu gcc 安装_71

 

服务器bios里改ip_ubuntu ..路径找不到_72

 

服务器bios里改ip_iis配置web服务器_73

输入“http://192.168.117.136/index.html”出错了

服务器bios里改ip_iis配置web服务器_74


查看error_log里面的报错

服务器bios里改ip_ubuntu gcc 安装_75


boa没有绑定成功是因为端口号被占用了,所以修改boa.conf文件配置的端口,一定要加sudo否则保存不了!!!!!

服务器bios里改ip_iis配置web服务器_76


服务器bios里改ip_服务器bios里改ip_77

服务器bios里改ip_ubuntu ftp服务器配置_78

              

服务器bios里改ip_iis配置web服务器_79

重新运行./boa

服务器bios里改ip_ubuntu ..路径找不到_80


再次查看报错,路径没写全

服务器bios里改ip_iis配置web服务器_81


服务器bios里改ip_ubuntu ftp服务器配置_82


记得一定要补全绝对路径,然后可以实现浏览器访问了

服务器bios里改ip_ubuntu ftp服务器配置_83