P4语言环境安装(一)前端编译器p4c、后端编译器p4c-bm2-ss
这个P4安装环境是在2020-2-8安装的,安装环境卡了我好几天,把遇到的问题记录下来,各位同学可以参考一下,要是说错了或者有问题的话,评论或mail:guidoahead@163.com联系我都可以。
P4语言组织官网:https://p4.org/
本文安装代码就是从官网引导的p4language上下载的。
介绍
我看P4是刚看了三四十小时,大都用在安装环境了,觉得它就是一个控制修改数据流的语言,提供一个标准的结构,方便用户对控制平面和数据平面进行修改。
我理解的P4开发流程就是四步
- 程序员写P4程序。
- 把P4程序通过p4c(前端编译器)生成JSON和P4I文件,P4I是干什么用的我还不知道,知道了就把这内容添加上。
- JSON导入到p4c_bm2_ss(后端编译器)生成一个配置文件。
- 将配置文件导入到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的更多相关文章
- 【Go】 Go 语言环境安装
安装环境/工具 1.Linux(CentOS 7.4版) 2.go1.11.2.linux-amd64.tar Go 语言环境安装 1.下载安装包 安装包下载地址为:https://golang.or ...
- 【保姆级教程】手把手教你进行Go语言环境安装及相关VSCode配置
[Go语言入门系列]前面的文章: [Go语言入门系列](七)如何使用Go的方法? [Go语言入门系列](八)Go语言是不是面向对象语言? [Go语言入门系列](九)写这些就是为了搞懂怎么用接口 本篇文 ...
- go语言环境安装
Go 是一个开源的编程语言,被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言. 1. 准备环境并安装依赖包 创建centos 7.6 64bit的虚拟机. 安装 ...
- Go语言环境安装-Mac
1.环境安装 Go SDK下载和安装,下载地址为:https://golang.org/dl/ Visual Studio Code下载和安装,下载地址为:https://code.visualstu ...
- Go语言环境安装详细介绍
工具链介绍 go有两套编译工具链,分别是从plant9移植过来的gc和依赖gcc的gccgo. 官方为gc工具链提供了二进制安装包和源码, 可以根据需要选择一种安装方式.gc工具链对操作系统和CPU类 ...
- R语言环境安装与基本使用
R语言安装包可以从这个地址选择合适的URL去下载:https://cran.r-project.org/mirrors.html,这里使用这个https://mirrors.tuna.tsinghua ...
- Go 语言环境安装
Go 语言支持以下系统: Linux FreeBSD Mac OS X(也称为 Darwin) Window 安装包下载地址为:https://golang.org/dl/. 各个系统对应的包名: 操 ...
- Go语言环境安装&搭建(Win)
Go语言简介 什么是Go语言 Go语言是谷歌2009发布的第二款开源编程语言. Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全.支持 ...
- Go语言环境安装&搭建(Linux)
Linux的东西果然不记不行啊~ 下载&安装 下载 我们先找到linux版的下载链接 https://golang.org/dl/ 打开网址找到Linux对应的链接右键复制下载地址 然后连接服 ...
随机推荐
- Kafka学习笔记4--Kafka消费者的客户端(PHP)开发
一.准备工作 虽然 Kafka 是用 Java/Scala 语言编写的,但这不妨碍它对多语言的支持.可以在 Kafka 官网的 CLIENTS 查看 Kafka 支持的语言,其中包括 C/C++.Py ...
- mysql主从之双主配置
mysql双主配置 mysql双主其实就是互相同步,互为主从 任意一台都能够执行插入动作 生产环境用得非常少,因为还是担心数据一致的问题 生产环境一般来说主从已经够用 172.19.132.121的配 ...
- Centos7 编译安装PHP7
Centos7 编译安装PHP7 编译安装的方式可以让组件等设置更加合理,但需要你对PHP的代码及各种配置非常的熟悉,以下为大致的安装流程,大家可以参考 1.下载编译工具 yum groupinsta ...
- JVM之对象
几乎所有对象都是在堆中分配内存的,这次来讲讲java的对象. 对象的创建主要分为以下几步: 首先,查看类是否装载.当JVM读取到new指令的时候,会拿着符号描述去方法区寻找它所属的类,如果未查找到,则 ...
- 深入理解vue的watch
深入理解vue的watch vue中的wactch可以监听到data的变化,执行定义的回调,在某些场景是很有用的,本文将深入源码揭开watch额面纱 前言 watch的使用 watch的多种使用方式 ...
- 6441. 【GDOI2020模拟01.17】小 ω 维护序列
Description Input Output 输出到标准输出流中. 若干行,对于每个操作 1 和操作 5,输出一个数表示答案. Sample Input Sample Input1 5 8 1 2 ...
- python 生成器 yield语句
生成器就是一个返回迭代器(iterator)的函数. 包含了 yield 的函数,就是一个生成器. 生成器每使用yield语句产生一个值,函数就会被冻结(暂停执行),被唤醒后(即再次调用)接着上次执行 ...
- Kaggle竞赛丨入门手写数字识别之KNN、CNN、降维
引言 这段时间来,看了西瓜书.蓝皮书,各种机器学习算法都有所了解,但在实践方面却缺乏相应的锻炼.于是我决定通过Kaggle这个平台来提升一下自己的应用能力,培养自己的数据分析能力. 我个人的计划是先从 ...
- AI——第四次工业革命
历史上发生了三次工业革命:第一次是以蒸汽机的发明为代表,改变了长久以来的棉纺织业,人类进入"蒸汽时代":第二次是以汽车的发明和电学的发展为代表,人类的活动范围和时长都极大地扩展,人 ...
- java 类初识
一.定义 成员变量 成员方法 注意: 1.成员变量有默认值,是全局变量 2.成员方法,不需要使用static 3.成员变量的默认值 整型 0 浮点型 0.0 引用数据类型 null 二.使用 1.导包 ...