%# -*- coding: utf-8-unix -*-

\chapter{可编程网络平台－操作手册}
\label{app:openbox}

\subsection{FAST简介}

针对近年来关于工业控制网络创新技术、创新网络结构、
时间敏感网络、SDN网络、FPGA硬件加速技术及下一代网络技术的研究需求，
由国防科大与湖南新实共同发起的开源项目
——FAST（FPGA Accelerated Switcing plaTform）于2016年创建。

FAST平台的架构是一种通用多核CPU加FPGA形态的网络处理架构，
该平台架构主要由硬件逻辑和软件逻辑两部分组成，
实现软硬件耦合通信与支持软硬件可编程的网络创新实验系统。
其中硬件包括平台相关的数据IO和FAST硬件逻辑。
软件部分包括通用操作系统与FAST软件逻辑。
FAST软件逻辑包括FAST软件开发环境和FAST UA程序。
在FAST平台，不仅支持FAST的UA编程开发，同时也支持通用APP的运行。

\subsection{设备简介}

OpenBox-S4是一款软硬件全可编程网络实验平台，
基于多核CPU加FPGA异构模型的FAST处理架构实现，
软件在CPU上使用C语言编程，硬件在FPGA芯片上使用Verilog语言编程。
全系统根据FAST架构搭建其软硬件基础运行环境，
内部软硬件用户逻辑支持所有FAST架构开发的应用、
标准的网络协议栈与通用网络应用。
平台软硬件逻辑代码开源免费，支持用户二次开发。

\subsection{设备上电检测}
当我们拿到设备后，并不知道这个设备有没有故障。
所以在使用设备进行实验前，我们尽量简单并全面的对设备进行一次上电检测，
以确认设备是否没有故障。

\subsubsection{设备外部接口及其配件说明}
\begin{enumerate}
  \item 设备外部接口，如下图所示。

  \begin{figure}[!htp]
    \centering
    \includegraphics[width=11cm]{f01}
    \caption{正面外部接口}
    \label{fig:a:ob_f01}
  \end{figure}
  
  \begin{figure}[!htp]
    \centering
    \includegraphics[width=11cm]{f02}
    \caption{反面外部接口}
    \label{fig:a:ob_f02}
  \end{figure}
  
  \item 12V-1A电源线，如下图所示。

  \begin{figure}[!htp]
    \centering
    \includegraphics[width=11cm]{f03}
    \caption{设备电源线}
    \label{fig:a:ob_f03}
  \end{figure}

  \item 串口线，如下图所示。

  \begin{figure}[!htp]
    \centering
    \includegraphics[width=11cm]{f04}
    \caption{设备串口线}
    \label{fig:a:ob_f04}
  \end{figure}

  \item 设备烧录线，如下图所示。

  \begin{figure}[!htp]
    \centering
    \includegraphics[width=11cm]{f05}
    \caption{设备烧录线}
    \label{fig:a:ob_f05}
  \end{figure}

\end{enumerate}

\subsubsection{检测准备}
\begin{enumerate}
  \item 物品准备
  \begin{table}[!htp]
    \small
    \centering
    \caption{以太网帧格式}
    \label{tab:c:wireshark_eth-format}
    \begin{tabular}{|c|c|} \hline
      \heiti 测试项 & \heiti 所需物品 \\ \hline
      上电检测 & 一台设备及电源\\ \hline
      串口检测 & 一台设备及电源、一台电脑、一个micro usb 串口线\\ \hline
      管理网口（MGMT） & 一台设备及电源、一台电脑、一个网线\\ \hline
    \end{tabular}
  \end{table}
\end{enumerate}

\subsubsection{上电检测}
\begin{enumerate}
  \item 连接电源，将电源开关拨到ON（向右）。
  \item 观察电源指示灯变化情况：
  \item 电源开关拨到ON（向右）后，CFG电源指示灯会亮一下；

  \begin{figure}[!htp]
    \centering
    \includegraphics[width=11cm]{f06}
    \caption{电源指示灯（刚接入电源）}
    \label{fig:a:ob_f06}
  \end{figure}
  \item CFG电源指示灯过几秒后就灭了；

  \begin{figure}[!htp]
    \centering
    \includegraphics[width=11cm]{f07}
    \caption{电源指示灯（系统配置）}
    \label{fig:a:ob_f07}
  \end{figure}
  图 7  电源指示灯（系统配置）
  \item 等待15秒左右，RUN电源指示灯常亮。

  \begin{figure}[!htp]
    \centering
    \includegraphics[width=11cm]{f08}
    \caption{电源指示灯（系统运行）}
    \label{fig:a:ob_f08}
  \end{figure}
\end{enumerate}
\subsubsection{串口检测}
\begin{enumerate}
  \item 确保micro usb串口线正确连接到设备上，并且设备已上电。
  \item 确保调试电脑已按照《01\_常用软件的安装使用手册.pdf》
  文档进行了PUTTY串口终端工具的安装。
  \item 确保调试电脑已按照《01\_常用软件的安装使用手册.pdf》
  文档进行了CP2102驱动的安装。
  \item 在电脑的设备管理器，查看设备的COM口数值。
  （如下图，设备成的COM口数值为COM4，不同的电脑显示的COM口数值会不同）
  \item 打开PUTTY工具界面。
  \begin{enumerate}
    \item 先点击左边“category”栏的 “serial”选项；
    \item 在“Serial line to connect to ”栏，填写设备管理器中看到的COM数值；
    \item 在“Speed”栏，填写串口的波特率为“115200”；
    \item 在 “Data bits”栏。填写数据位宽为“8”；
    \item 在“Flow control”栏，选择“None”。
    \item 如下所示，调试电脑的COM数值为COM3，所以“serial line”栏填写为“COM3”。
    （不同电脑的COM数值可能不同，请填写实际的COM数值）

    \begin{figure}[!htp]
      \centering
      \includegraphics[width=11cm]{f09}
      \caption{putty软件串口配置参数}
      \label{fig:a:ob_f09}
    \end{figure}
  \end{enumerate}
\item 点击 “open” ，进入设备系统，则串口测试OK。
\end{enumerate}
\subsubsection{管理网口检测}
\begin{enumerate}
  \item 使用一根网线，将调试电脑与设备的obx0口连接。
  \item 
  \item 设备的eth0网口的默认ip地址为：192.168.50.5，
  所以需要将调试电脑的ip地址设置成与设备eth0网口的ip地址在同一个网段下
  （也就是192.168.50网段）。
  \item 在调试电脑的 控制面板->网络和Internet->网络设备中。
  点击以太网->属性->internet协议版本4（TCP/IPV4），进行ip地址的配置。如下所示。

  \begin{figure}[!htp]
    \centering
    \includegraphics[width=11cm]{f10}
    \caption{配置以太网的ip地址}
    \label{fig:a:ob_f10}
  \end{figure}
  图 10 配置以太网的ip地址
  \item 在调试电脑的 控制面板>系统和安全>Windows Defender 防火墙>自定义设置中。
  关闭调试电脑的防火墙功能。

  \begin{figure}[!htp]
    \centering
    \includegraphics[width=11cm]{f11}
    \caption{关闭防火墙功能}
    \label{fig:a:ob_f11}
  \end{figure}
  \item 在调试电脑的CMD终端下，使用ping命令能正常与eth0网口通讯，
  则说明管理网络检测OK。

  \begin{figure}[!htp]
    \centering
    \includegraphics[width=11cm]{f12}
    \caption{ping 命令测试网络连通性}
    \label{fig:a:ob_f12}
  \end{figure}

\end{enumerate}
\subsection{搭建环境}
OpenBox-S4是一款软硬件全可编程网络实验平台，
根据FAST架构搭建其软硬件基础运行环境，
内部软硬件用户逻辑支持所有FAST架构开发的应用，
是一款专业的网络实验与研究验证平台。
\subsubsection{连接二层交换拓扑}

\begin{figure}[!htp]
  \centering
  \includegraphics[width=11cm]{f13}
  \caption{二层交换连接拓扑示意图}
  \label{fig:a:ob_f13}
\end{figure}

其中PC1的IP地址设置为“192.168.1.20”，PC2的IP地址设置为“192.168.1.21”
\subsubsection{在OpenBox-S4上运行二层交换程序}

\begin{figure}[!htp]
  \centering
  \includegraphics[width=11cm]{f14}
  \caption{二层交换命令启动输出图}
  \label{fig:a:ob_f14}
\end{figure}

在串口登录界面或网络登录界面输入命令：l2switch

\begin{figure}[!htp]
  \centering
  \includegraphics[width=11cm]{f15}
  \caption{二层交换命令运行输出图}
  \label{fig:a:ob_f15}
\end{figure}

\subsubsection{在PC两端进行PING测试}

\begin{figure}[!htp]
  \centering
  \includegraphics[width=11cm]{f16}
  \caption{端主机PING通结果图}
  \label{fig:a:ob_f16}
\end{figure}

\subsection{常用软件安装与使用}
\subsubsection{Wireshark抓包工具的安装使用}
\begin{enumerate}
  \item 安装教程
  \begin{enumerate}
    \item 进入“\\06\_软件包及工具\\抓包工具”目录。

    \begin{figure}[!htp]
      \centering
      \includegraphics[width=11cm]{f17}
      \caption{Wireshark安装包路径}
      \label{fig:a:ob_f17}
    \end{figure}
    \item 鼠标双击Wireshark-win64-3.2.5.exe文件，
    进入到下图中的安装界面。直接点击“agree”进行下一步。

    \begin{figure}[!htp]
      \centering
      \includegraphics[width=11cm]{f18}
      \caption{Wireshark许可协议}
      \label{fig:a:ob_f18}
    \end{figure}
    \item 选择软件的安装路径。

    \begin{figure}[!htp]
      \centering
      \includegraphics[width=11cm]{f19}
      \caption{更改Wireshark安装路径}
      \label{fig:a:ob_f19}
    \end{figure}
    \item 点击 “install”进行安装。

    \begin{figure}[!htp]
      \centering
      \includegraphics[width=11cm]{f20}
      \caption{Wireshark 开始安装}
      \label{fig:a:ob_f20}
    \end{figure}
    \item 弹出Npacp组件安装窗口，点击 “install”进行安装。

    \begin{figure}[!htp]
      \centering
      \includegraphics[width=11cm]{f21}
      \caption{Wireshark 安装Npacp组件}
      \label{fig:a:ob_f21}
    \end{figure}
  \end{enumerate}
  \item 使用教程
  \begin{enumerate}
    \item 捕获网络接口
    \begin{enumerate}
      \item 打开安装好的wireshark，会进入如下所示界面。
      \begin{figure}[!htp]
        \centering
        \includegraphics[width=11cm]{f22}
        \caption{Wireshark启动界面说明}
        \label{fig:a:ob_f22}
      \end{figure}
  
      \item 这里以有线网口为例，则点击选择 “以太网”，
      就可以捕获有线网口的所有数据报文。如下所示。

      \begin{figure}[!htp]
        \centering
        \includegraphics[width=11cm]{f23}
        \caption{以太网接口捕获数据报文情况}
        \label{fig:a:ob_f23}
      \end{figure}
    \end{enumerate}
    \item wireshark 窗口介绍
    wireshark主要分为这几个窗口，如下所示。

    \begin{figure}[!htp]
      \centering
      \includegraphics[width=11cm]{f24}
      \caption{Wireshark窗口说明}
      \label{fig:a:ob_f24}
    \end{figure}
    \begin{enumerate}
      \item Display Filter(显示过滤器)：用于设置过滤条件进行数据包列表过滤。
      \item Packet List Pane(封包列表)：简要地显示捕获到的数据包，
      每个数据包包含编号，时间戳，源地址，目标地址，协议，长度，以及数据包信息。
      不同协议的数据包使用了不同的颜色区分显示。。
      \item Packet Details Pane(封包详细信息)：在数据包列表中选择指定数据包，
      在数据包详细信息中会显示数据包的所有详细信息内容。
      数据包详细信息面板是最重要的，用来查看协议中的每一个字段。
      \item Packet Bytes Pane(16进制数据)：以十六进制和ASCII码的形式显示数据包的内容。
      这里显 示了一个数据包未经处理的原始样子，也就是在链路上传播时的数据形式。
      \item Miscellanous(状态栏)：包含有专家信息、注释、包的数量和Profile。
    \end{enumerate}
    \item 过滤报文
    \begin{enumerate}
      \item 在显示过滤器栏中，输入指定地过滤条件即可过滤报文。
      \item 如过滤ip地址为“192.168.1.1”的报文，
      则输入过滤条件“ip.addr == 192.168.1.1”。如下所示。

      \begin{figure}[!htp]
        \centering
        \includegraphics[width=11cm]{f25}
        \caption{过滤指定ip地址报文}
        \label{fig:a:ob_f24}
      \end{figure}
      \item 如过滤mac地址为“01:00:5e:7f:ff:fa”的报文，
      则输入过滤条件 “eth.addr == 01:00:5e:7f:ff:fa”如下所示。

      \begin{figure}[!htp]
        \centering
        \includegraphics[width=11cm]{f26}
        \caption{过滤指定mac地址报文}
        \label{fig:a:ob_f24}
      \end{figure}
      \item 由于篇幅的原因，wireshark的其他使用，在本文档就不再说明了。
    \end{enumerate}
  \end{enumerate}
\end{enumerate}
\subsubsection{CP2102串口驱动的安装使用}
\begin{enumerate}
  \item 在“06\_软件包及工具/CP2102串口驱动”目录下，
  根据电脑的操作系统选择对应的软件包。
  \item 如以windows~10操作系统的电脑为例，
  则选择 “06\_软件包及工具/CP2102串口驱动/win10版/CP210x\_Windows10\_Driver.zip”。
  如下所示。

  \begin{figure}[!htp]
    \centering
    \includegraphics[width=11cm]{f27}
    \caption{CP2102串口驱动压缩包}
    \label{fig:a:ob_f27}
  \end{figure}
  \item 解压软件包，若根据系统为64位，则双击“CP210xVCPInstaller\_x64.exe”运行安装。

  \begin{figure}[!htp]
    \centering
    \includegraphics[width=11cm]{f28}
    \caption{解压CP2102串口驱动压缩包}
    \label{fig:a:ob_f28}
  \end{figure}
  \item 如下所示，完成安装。

  \begin{figure}[!htp]
    \centering
    \includegraphics[width=11cm]{f29}
    \caption{CP2102串口驱动完成安装}
    \label{fig:a:ob_f29}
  \end{figure}
\end{enumerate}
\subsection{系统更新}
\subsubsection{系统组成}
OpenBox-S4的系统架构为通用多核CPU加FPGA，
使用的是Xilinx公司的ZYNQ系列芯片提供的整体封装解决方案。
在ZYNQ芯片中包含CPU系统与FPGA系统两部分，其内部通过高速总线连接。
在OpenBox-S4的设备中，其管理接口（MGMT）由CPU引出，其他4个标准网口则由FPGA引出。

整个系统的逻辑运行是从SD卡中的几个文件开始，
主要包括：BOOT.bin、devicetree.dtb、uImage和uramdisk.image.gz四个部分。
其中BOOT.bin定义的整个芯片的物理系统构成、连接关系和FPGA的功能逻辑；
devicetree.dtb文件则定义了系统的硬件资源定义，在CPU运行系统内核镜像时，
提供外设硬件及资源定义参数；uImage是CPU运行的系统内核镜像文件，
提供linux的内核运行环境及外设驱动；uramdisk.image.gz是linux系统的根文件系统，
包含内核引导起来后所使用的存储根文件系统、
系统配置信息、系统命令工具和用户命令等。

在所有的OpenBox-S4设备的系统中，BOOT.bin与devicetree.dtb是匹配成套生成的，
uImage和uramdisk.image.gz是所有系统通用匹配使用的。
用户如果要修改芯片系统架构、连接以及硬件逻辑，
则需要重新生成BOOT.bin和devicetree.dtb文件，替换原来系统的这两件文件，
即可重新定义设备的硬件逻辑功能。如果需要重新定义系统内核功能，
则需要重新编译生成uImage文件进行替换。如果是用户软件逻辑或工具命令，
则可随时通过网络、U盘等上传至系统/mnt/openbox/目录即可使用。

\subsubsection{系统更新}
如上节所述，更新系统最多是替换该设备环境中的4个核心文件，
通常用户只修改硬件逻辑就不需要替换uImage和uramdisk.image.gz文件，
如果不调修改原有接口的地址资源配置地址，也无需devicetree.dtb文件，
仅需要更新替换Boot.bin文件即可。此文档主要描述一下，
如何更新整个系统运行环境，即替换系统的4个核心文件。

\begin{enumerate}
  \item 备份系统原有系统核心文件
  通过设备的管理接口连接到用户操作主机，
  通过SCP远程复制的方法将OpenBox-S4的系统备份到用户主机本地保存。
  Windows主机请使用putty配套的pscp命令工具，用法相同。

  \begin{figure}[!htp]
    \centering
    \includegraphics[width=11cm]{f30}
    \caption{下载备份原有系统}
    \label{fig:a:ob_f30}
  \end{figure}
  \item 上传用户新的系统核心文件
  
  将用户修改系统硬件逻辑后生成的BOOT.bin和devicetree.dtb
  文件保存在本地update目录中，
  将备份目录中的uImage和uramdisk.image.gz文件复制到update目录，
  确保update更新目录中包含OpenBox-S4系统运行环境的4个核心文件，
  其中BOOT.bin和devicetree.dtb是用户最新生成的。执行如下命令，
  将更新目录的4个核心文件上传替换原来OpenBox-S4上面的核心文件。

  \begin{figure}[!htp]
    \centering
    \includegraphics[width=11cm]{f31}
    \caption{上传更新用户系统}
    \label{fig:a:ob_f31}
  \end{figure}
  \item 断电后重启设备验证系统
  
  确认更新文件已经上传后，即可关机、断电和重新加电进行测试。

  重新加电进入系统后，使用系统自带工具读取硬件系统版本号。
  如果其版本号读出与你的硬件逻辑定义一致，则说明系统更新成功。
  如果不同说明系统更新没有替换原来的文件，请检查上传操作是否与上述截图一致，
  是否有报错信息。系统自带标准五级流水线版本号为0x2020181108，
  如下图所示，即说明系统更新成功
  （当前运行系统的硬件版本号为用户更新版本号：0x2020191231）。

  \begin{figure}[!htp]
    \centering
    \includegraphics[width=11cm]{f32}
    \caption{读硬件版本号验证}
    \label{fig:a:ob_f32}
  \end{figure}
\end{enumerate}
