下滑底部添加微信好友
腾牌云科技|版权局一级代理
计算机软著 商标全包材料低价代理
【任务目标】:
Ø 任务 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
“现在没有可用的软件包 gcc,但是它被其它的软件包引用了。”
首先我检查了虚拟机从主机映射过来的的网络连接,找到右下角的“网络适配器”右键“设置”,手动选择 【NAT模式(N):用于共享主机Ip地址】,然后确定。
再次输入依然报错
使用“sudo gedit /etc/apt/sources.list”修改源,在文件末尾手动加上两行代码:“deb http://dk.archive.ubuntu.com/ubuntu/ xenial main”和“deb http://dk.archive.ubuntu.com/ubuntu/ xenial universe”保存
会有警告出现,但是这个警告不是错误,
于是我用命令行打开GTK应用程序“sudo -H gedit /some/where/file.txt &>/dev/null “
重新安装vim工具“sudo apt-get install vim”
再切换到之前的终端执行gcc安装,成功!
2、为了方便后期向虚拟机传送文件和操作 Linux 系统,安装 sshd 服务。
$ sudo apt install openssh-server
Y继续执行
3、若需要在开发板上进行 web 服务的搭建,还需要安装对应开发板的交叉编译器环 境,同时配置系统环境变量和交叉编译器所依赖的库问题。
$ sudo apt install lib32ncurses5 lib32z1
Y继续执行
4、在 windows 中可以使用 mobaxterm 这类软件,配置 ssh 客户端信息,连接虚拟机 的 Ubuntu 系统。
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里面包含了数据发送的防丢失措施)。
图 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;
}
3.“mkdir web_prj”在根目录下创建一个目录,“cd web_prj”进入目录里,
在web_prj再创建一个test “mkdir test”,进入test目录里面“cd test”
把tcp_base_server.c文档移动到test目录下
“gcc -o tcpserver tcp_base_server.c”编译
直接运行tcpserver程序“./tcpserver”,打印出监听描述符
netstat查看TCP有没有留下烙印,由于是新装的系统需要按提示安装netstat,安装完毕查看netstat
tcpserver程序已经在一个终端运行,我们在另一个终端用“netstat -tan”查看(已经出现了8181端口和80端口)
在第一个终端摁“Ctrl c”结束掉tcpserver程序运行,在另一个终端再次用“netstat -tan”查看(8181没有了,80有)8181开启相当于在运输层TCP上烙下烙印,这样才能保证后面的实验服务器正常访问。
5、移植服务后的配置文件在哪里,配置选项有哪些?
l 任务 4 描述:
1、Web 服务的页面存放目录在哪里?
在web_prj再创建一个sources“mkdir sources”
把boa-0.94.13.tar.gz拷到sources目录下“cp boa-0.94.13.tar.gz web_prj/sources/”
解压到上级目录web_prj 下,“tar -zxvf boa-0.94.13.tar.gz -C ../”
进入boa-0.94.13,“cd boa-0.94.13/”
boa-0.94.13源码中没有makefile,所以需要我们自己配置生成makefile。
1.根据目标机器特性进行配置(configure脚本)进入src目录,“./configure”
通过“./configure”我们就可以看到Makefile的出现
2.工具的指定,修改Makefile,使得支持目标板的工具
“vim Makefile”修改Makefile
按Esc,命令行下输入:“:wq!” (保存退出)
3.生成(make)
出错,没有yacc命令,进行安装
再执行make,第一个工具解决,还有第二个需要安装,因为我们的版本比较老,系统用了flex代替lex
装完以后再make,Makefile的警告权限开的比较大
出错,需要修改compat.h,“vim compat.h”,打开后它处于普通模式,这时按键盘i,进入插入编辑模式,如果按a是追加编辑模式。编辑模式中按esc又变成普通模式,
修改后:
保存退出后继续make
剔除
2、浏览器访问路径原理和服务配置文件的对应关系?
程序的一次编译,能够在多个不同的环境进行运行。
boa配置文件:告诉boa程序如何进行工作 (/etc/boa/boa. conf)
修改配置文件之前先备份,防止改错了恢复不了,“cp boa.conf boa_bak.conf”
在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真正修改
修改用户:
错误日志修改
访问日志修改
DocumentRoot修改
这个是空洞文件
保存退出
再次查看修改已经保存
在home/fy下创建log和www目录“mkdir log”,“mkdir www”
移除.boa.conf.swp和.boa.conf.swo,非正常关闭vi编辑器时会生成一个.swp文件和.swo文件
重启虚拟机
boa.conf配置文件里写了什么目录,就看你实际上有没有这个目录,程序是根据你配置文件里写的目录去创建文件,系统没有这些目录,肯定要报错。变量后面的路径信息,系统上有没有这些目录值,没有就创建
进入目录“cd ~/web_prj/boa-0.94.13/src” 再次执行命令,成功!
确定静态文件测试通过,开始创建一个前端页面:
把前端作业移植到linux下
输入“http://192.168.117.136/index.html”出错了
查看error_log里面的报错
boa没有绑定成功是因为端口号被占用了,所以修改boa.conf文件配置的端口,一定要加sudo否则保存不了!!!!!
重新运行./boa
再次查看报错,路径没写全
记得一定要补全绝对路径,然后可以实现浏览器访问了
计算机软著 商标全包材料代理