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对应的链接右键复制下载地址 然后连接服 ...
随机推荐
- DOCKER学习_006:Docker存储驱动
一 镜像的分层特性 在说docker的文件系统之前,我们需要先想清楚一个问题.我们知道docker的启动是依赖于image,docker在启动之前,需要先拉取image,然后启动.多个容器可以使用同一 ...
- socket粘包问题及解决方案
一.粘包问题 问题1: 无法确认对方发送过来数据的大小. 'client.py' import socket client = socket.socket() client.connect( ('12 ...
- 从头学pytorch(十二):模型保存和加载
模型读取和存储 总结下来,就是几个函数 torch.load()/torch.save() 通过python的pickle完成序列化与反序列化.完成内存<-->磁盘转换. Module.s ...
- 10道java经典算法题,每一题都能帮你提升java水平!
JAVA经典算法题 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: ...
- spring cloud微服务快速教程之(六) 应用监控 spring boot admin
0-前言 当我们发布了微服务后,我们希望对各个应用的各个运行状况进行一个监控:这个时候spring boot admin,就出场了: spring boot admin:是一个监控和管理spring ...
- iFit—Smart Cardio Equipment 简介与下载
iFit—Smart Cardio Equipment 无法在谷歌商店中下载,经过技术提取app只可以直接通过下载app安装简单方便 实测机型:华为荣耀畅玩2平板, 小米6X,360N5S均测试无BU ...
- 程序员必知的技术官网系列--mysql篇
mysql 官网 https://www.mysql.com/ 官网布局很简单, 其中常用的两块就是下载和文档这两块, 其中下载没什么可讲的, 本次重点依旧是文档. 首页 mysql 文档导航页 ht ...
- electron-vue 设置cookie
//设置登录cookie setCookie(name,value){ var Days=30; var exp=new Date(); var date=Math.round(exp.getTime ...
- 【转】Java面试题:多继承
招聘和面试对开发经理来说是一个无尽头的工作,虽然有时你可以从HR这边获得一些帮助,但是最后还是得由你来拍板,或者就像另一篇文章“Java 面试题:写一个字符串的反转”所说: 面试开发人员不仅辛苦而且乏 ...
- 推荐一款国产优秀的基于 AI 的 Web 自动化测试工具——kylinTOP 测试与监控平台
对于于一般的传统的自动化测试工具,如:Selenium,robotFramework,QTP等.QTP可以通过操作录制生成自动化用例脚本.生成的脚本与Selenium.robotFramework类似 ...