这个P4安装环境是在2020-2-8安装的,安装环境卡了我好几天,把遇到的问题记录下来,各位同学可以参考一下,要是说错了或者有问题的话,评论或mail:guidoahead@163.com联系我都可以。

P4语言组织官网:https://p4.org/

本文安装代码就是从官网引导的p4language上下载的。

介绍

我看P4是刚看了三四十小时,大都用在安装环境了,觉得它就是一个控制修改数据流的语言,提供一个标准的结构,方便用户对控制平面和数据平面进行修改。

我理解的P4开发流程就是四步

  1. 程序员写P4程序。
  2. 把P4程序通过p4c(前端编译器)生成JSON和P4I文件,P4I是干什么用的我还不知道,知道了就把这内容添加上。
  3. JSON导入到p4c_bm2_ss(后端编译器)生成一个配置文件。
  4. 将配置文件导入到bmv2(非商用的软件交换模型),用于检测第一步P4程序写的对不对。

根据实际的交换结构的不同,我理解的第三步的后端编译器应该变化,仿真模型也应该用实际模型。

本文就是安装第一步的p4c和第三步p4c_bm2_ss,前端后端编译器。

安装步骤

首先要有个ubuntu系统,Ubuntu 18.04.4 下载:https://cn.ubuntu.com/download

如果用虚拟机的话,vmware workstation pro 下载:

https://my.vmware.com/cn/web/vmware/info/slug/desktop_end_user_computing/vmware_workstation_pro/15_0

安装ubuntu系统时,一定要

内存分配空间要大于8G,小于8G,C++编译会报错,

硬盘空间建议大于50G,我安装时出现了三次安装空间不足的情况,最后直接分配了50G。

INSTAL:

下面的操作步骤完全是根据github上p4lang/p4c的README.MD里执行的,对遇到一些问题进行说明,可以读README时,结合下面操作步骤看。

右键桌面打开terminal,输入命令:

#在如果没有安装git,执行下面命令,从github上下载代码用
sudo apt-get install git
#安装p4c所需依赖,执行后需要安装一会
sudo apt-get install cmake g++ git automake libtool libgc-dev bison flex
libfl-dev libgmp-dev libboost-dev libboost-iostreams-dev
libboost-graph-dev llvm pkg-config python python-scapy python-ipaddr python-ply python3-pip
tcpdump
#安装数据包处理程序
pip3 install scapy ply
#安装documentation building 这个需要五六个小时吧
#网上说改变改变数据下载源或者搭个梯子会快很多 有兴趣的大佬可以看看怎么弄 弄成了教教我就更感谢了
sudo apt-get install -y doxygen graphviz texlive-full
#安装protobuf依赖
sudo apt-get install autoconf automake libtool curl make g++ unzip

然后在https://github.com/protocolbuffers/protobuf/releases/tag/v3.11.3,根据自己的需要下载解压protobuf安装包,我可能只会用到C++,就下载了protobuf-cpp-3.11.3.tar.gz,每个包都包括C++,比如你需要C++和pyton,就下protobuf-python-3.11.3.tar.gz。

如果按Readme里执行下载protobuf,make check时会报找不到google_test路径,所以一定下载上面网址提供的protobuf压缩包。

#进入解压好的文件夹,我是安装在/home/guido(user_name)/路径下
cd /home/guido/protobuf-cpp-3.11.3/
cd protobuf-3.11.3/
#生成configure脚本
./autogen.sh
#检查系统配置
./configure
#执行代码编译操作 生成可执行文件
make
#检查编译结果,会用一阵时间
make check
#安装prptobuf
sudo make install
#更新库缓存
sudo ldconfig
#依赖安装完成

P4C里面包含几个后端编译器,这些编译器也需要安装一些依赖,如果不安装的话make check会报错。

因为需要用p4c-bm2-ss这个后端编译器,所以还是把依赖给安装了,步骤如下:

安装nanomsg 1.1.5 下载网址:https://github.com/nanomsg/nanomsg/releases

#我是安装在/home/guido(user_name)/路径下
#进入nanomsg-1.1.5文件夹下
cd nanomsg-1.1.5
#创建进入build文件夹
mkdir build
cd build
#生成安装程序
cmake ..
cmake --build .
ctest .
sudo cmake --build . --target install
sudo ldconfig

安装nnpy

#安装python-pip
sudo apt install python-pip
#我是安装在/home/guido(user_name)/路径下
git clone https://github.com/nanomsg/nnpy
#进入nnpy文件夹
cd /home/guido/nnpy
#安装nnpy
pip install nnpy

安装Thrift v0.13.0 下载网址:https://github.com/apache/thrift/releases

#我是安装在/home/guido(user_name)/路径下
#进入Thrift v0.13.0文件夹
cd thrift-0.13.0
#安装依赖
sudo apt-get install libssl-dev libboost-system-dev libboost-thread-dev libboost_filesystem-dev
#生成配置脚本
./bootstrap.sh
#执行配置脚本
./configure
#生成可执行文件
sudo make
#安装 make check会报错 但能安装 库里的readme文件也没让check 所以我就没把精力放在这了 应该不是个问题
sudo make install

安装eBPF依赖

sudo apt-get install clang llvm libpcap-dev libelf-dev iproute2 net-tools
pip3 install pyroute2 ply==3.8 scapy==2.4.0

安装Graphs依赖

sudo apt-get install libboost-graph-dev

正式安装P4C

#我是在/home/guido(user_name)/路径下,克隆github中的p4c库,等一会
git clone --recursive https://github.com/p4lang/p4c.git
#进入p4c文件夹下
cd /home/guido/p4c
#更新新版软件
sudo apt-get update
sudo apt-get upgrade
#创建进入build文件夹
mkdir build
cd build
#编译生成makefile,cmake根据用户需要可以配置一些选项,p4c的readme有介绍,我使用默认配置。
cmake ..
#makefile编译生成可执行文件,开4个进程同时执行,需要等一会。
make -j4
#检查编译结果,需要等一会。
make -j4 check
#安装
sudo make install

安装bmv2

#我是在/home/guido(user_name)/路径下,克隆github中的bmv2库,等一会
git clone --recursive https://github.com/p4lang/behavioral-model.git
#进入behavioral-model文件夹
cd behavioral-model
#安装依赖 会报pip 不需要sudo指令的提示 在环境安装一里已经安装过了 这个问题可以忽略
./install_deps.sh
#生成配置脚本
./autogen.sh
#检测系统配置,生成makefile文件
./configure
#生成可执行文件
make
#安装
sudo make install
sudo ldconfig

下载官方教程

#我是在/home/guido(user_name)/路径下,克隆github中的P4 Tutorial
git clone --recursive https://github.com/p4lang/tutorials.git

到这就全部安装完了,也成功了,我零零散散装了十来天。

经验是别着急,遇到问题就把error放到百度上搜,基本都能解决。

P4语言环境安装(一)前端编译器p4c、后端编译器p4c-bm2-ss的更多相关文章

  1. 【Go】 Go 语言环境安装

    安装环境/工具 1.Linux(CentOS 7.4版) 2.go1.11.2.linux-amd64.tar Go 语言环境安装 1.下载安装包 安装包下载地址为:https://golang.or ...

  2. 【保姆级教程】手把手教你进行Go语言环境安装及相关VSCode配置

    [Go语言入门系列]前面的文章: [Go语言入门系列](七)如何使用Go的方法? [Go语言入门系列](八)Go语言是不是面向对象语言? [Go语言入门系列](九)写这些就是为了搞懂怎么用接口 本篇文 ...

  3. go语言环境安装

    Go 是一个开源的编程语言,被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言. 1. 准备环境并安装依赖包 创建centos 7.6 64bit的虚拟机. 安装 ...

  4. Go语言环境安装-Mac

    1.环境安装 Go SDK下载和安装,下载地址为:https://golang.org/dl/ Visual Studio Code下载和安装,下载地址为:https://code.visualstu ...

  5. Go语言环境安装详细介绍

    工具链介绍 go有两套编译工具链,分别是从plant9移植过来的gc和依赖gcc的gccgo. 官方为gc工具链提供了二进制安装包和源码, 可以根据需要选择一种安装方式.gc工具链对操作系统和CPU类 ...

  6. R语言环境安装与基本使用

    R语言安装包可以从这个地址选择合适的URL去下载:https://cran.r-project.org/mirrors.html,这里使用这个https://mirrors.tuna.tsinghua ...

  7. Go 语言环境安装

    Go 语言支持以下系统: Linux FreeBSD Mac OS X(也称为 Darwin) Window 安装包下载地址为:https://golang.org/dl/. 各个系统对应的包名: 操 ...

  8. Go语言环境安装&搭建(Win)

    Go语言简介 什么是Go语言 Go语言是谷歌2009发布的第二款开源编程语言. Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全.支持 ...

  9. Go语言环境安装&搭建(Linux)

    Linux的东西果然不记不行啊~ 下载&安装 下载 我们先找到linux版的下载链接 https://golang.org/dl/ 打开网址找到Linux对应的链接右键复制下载地址 然后连接服 ...

随机推荐

  1. 一文带你了解 OAuth2 协议与 Spring Security OAuth2 集成!

    OAuth 2.0 允许第三方应用程序访问受限的HTTP资源的授权协议,像平常大家使用Github.Google账号来登陆其他系统时使用的就是 OAuth 2.0 授权框架,下图就是使用Github账 ...

  2. cocos2dx Vec2

    //SE是坐标重叠部分 // returns true if segment A-B intersects with segment C-D. S->E is the overlap part ...

  3. MySQL 核心三剑客 —— 索引、锁、事务

    一.常见存储引擎 1.1 InnoDB InnoDB 是 MySQL 5.5 之后默认的存储引擎,它具有高可靠.高性能的特点,主要具备以下优势: DML 操作完全遵循 ACID 模型,支持事务,支持崩 ...

  4. Callable,阻塞队列,线程池问题

    一.说说Java创建多线程的方法 1. 通过继承Thread类实现run方法   2. 通过实现Runnable接口 3. 通过实现Callable接口 4. 通过线程池获取 二. 可以写一个Call ...

  5. Linux-Cacti监控{Verson:1.2.8}

    首先需要一个LAMP平台 或LNMP平台 yum -y install httpd mariadb php mariadb-server mariadb-devel zlib freetype lib ...

  6. OpenStack Identity API v3

    Table Of Contents OpenStack Identity API v3 What’s New in Version 3.7 What’s New in Version 3.6 What ...

  7. JSON小记

    json: { "1" : "2", "1" : "3" } 在json中如果有重复的key,会取最后一个key的值,如 ...

  8. socket、http、udp、tcp的整理

    1.socket简介 游戏开发中最常用的便是socket,socket本质是api,是对tcp/ip的封装.tcp/ip协议族是一个网络通信模型以及一系列网络传输协议,为互联网的基础通信架构. tcp ...

  9. TensorFlow——LinearRegression简单模型代码

    代码函数详解 tf.random.truncated_normal()函数 tf.truncated_normal函数随机生成正态分布的数据,生成的数据是截断的正态分布,截断的标准是2倍的stddev ...

  10. 重拾c++第三天(5):循环和关系表达式

    1.改变步长 ;i<;i=i+) 2.*与++优先级相同,从右向左 3.strcmp函数比较两个字符串,=0两个相同,><0 ----> str1><str2 4. ...