网站首页 > 开源技术 正文
工具链
本节介绍 BPF 相关的用户态工具、内省设施(introspection facilities)和内核控制选项。 注意,围绕 BPF 的工具和基础设施还在快速发展当中,因此本文提供的内容可能只覆盖了其中一部分。
Fedora
Fedora 25+:
$ sudo dnf install -y git gcc ncurses-devel elfutils-libelf-devel bc \
openssl-devel libcap-devel clang llvm graphviz bison flex glibc-static
如果你使用的是其他Fedora发行版,请试着使用yum来安装工具链
Ubuntu
Ubuntu 17.04+:
$ sudo apt-get install -y make gcc libssl-dev bc libelf-dev libcap-dev \
clang gcc-multilib llvm libncurses5-dev git pkg-config libmnl-dev bison flex \
graphviz
openSUSE Tumbleweed
openSUSE Tumbleweed 和 openSUSE Leap 15.0+:
$ sudo zypper install -y git gcc ncurses-devel libelf-devel bc libopenssl-devel \
libcap-devel clang llvm graphviz bison flex glibc-devel-static
编译 Linux 内核
新的 BPF 特性都是在内核 net-next 源码树中开发的。获取 net-netxt 源码树:
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git
如果不关心提交历史,可以指定 --depth 1,这会下载当前最新的版本,节省大量时间和磁盘空间。
最新的 BPF fix 都在 net 源码树:
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git
网络已经有大量关于如何编译 Linux 内核的教程,推荐 Kernel Newbies website。
要运行 BPF,需要确保生成的 .config 文件包含下列配置(Cilium 也需要这些配置):
CONFIG_CGROUP_BPF=y
CONFIG_BPF=y
CONFIG_BPF_SYSCALL=y
CONFIG_NET_SCH_INGRESS=m
CONFIG_NET_CLS_BPF=m
CONFIG_NET_CLS_ACT=y
CONFIG_BPF_JIT=y
CONFIG_LWTUNNEL_BPF=y
CONFIG_HAVE_EBPF_JIT=y
CONFIG_BPF_EVENTS=y
CONFIG_TEST_BPF=m
以上的某些配置项是无法通过 make menuconfig 修改的。例如, CONFIG_HAVE_EBPF_JIT 是根据当前架构是否支持 eBPF JIT 自动设置的。在本节中, CONFIG_HAVE_EBPF_JIT 是可选但强烈推荐的配置。没有 eBPF JIT 编译器的架构只能降级到内核解释器,执行效率会大大降低。
验证编译好的内核
用编译好的内核启动之后,进入 BPF 测试目录来验证 BPF 的功能:
$ cd tools/testing/selftests/bpf/ $ make $ sudo ./test_verifier
正常的话,会打印如下类似的结果:
Summary: 847 PASSED, 0 SKIPPED, 0 FAILED
注意:对于内核版本4.16+,BPF自测依赖于LLVM 6.0+,这是由于BPF函数调用不再需要内联。请参阅“BPF to BPF的调用”一节或内核补丁中的的信息(https://lwn.net/Articles/741773/)了解更多信息。如果不使用此新功能,并非每个BPF程序都依赖LLVM 6.0+。如果您的发行版没有提供LLVM 6.0+,您可以按照LLVM部分中的文档进行编译。
运行所有 BPF selftests:
$ sudo make run_tests
编译 iproute2
与 net (fixes only) 和 net-next (new features) 内核树类似, iproute2 源码树有两个分支:master 和 net-next。
- master 分支基于 net 内核源码树,
- net-next 分支基于 net-next 源码树。这样,头文件的改动就会同步到 iproute2 源码树。
下载 iproute2 master 分支代码:
$ git clone https://git.kernel.org/pub/scm/network/iproute2/iproute2.git
下载 net-next 分支代码:
$ git clone -b net-next https://git.kernel.org/pub/scm/network/iproute2/iproute2.git
编译和安装:
$ cd iproute2/
$ ./configure --prefix=/usr
TC schedulers
ATM no
libc has setns: yes
SELinux support: yes
ELF support: yes
libmnl support: no
Berkeley DB: no
docs: latex: no
WARNING: no docs can be built from LaTeX files
sgml2html: no
WARNING: no HTML docs can be built from SGML
$ make
[...]
$ sudo make install
确保 configure 脚本打印出了 ELF support: yes,这样 iproute2 才能处理 LLVM BPF 后端产生的 ELF 文件。
编译 bpftool
bpftool 对调试和检视(introspect)BPF 程序及 BPF map 非常有用。它是内核源码树的 一部分,代码位于 tools/bpf/bpftool/。
确保已克隆net或net-next内核树,如前所述。为了构建和安装bpftool,需要以下步骤:
$ cd <kernel-tree>/tools/bpf/bpftool/
$ make
Auto-detecting system features:
... libbfd: [ on ]
... disassembler-four-args: [ OFF ]
CC xlated_dumper.o
CC prog.o
CC common.o
CC cgroup.o
CC main.o
CC json_writer.o
CC cfg.o
CC map.o
CC jit_disasm.o
CC disasm.o
make[1]: Entering directory '/home/foo/trees/net/tools/lib/bpf'
Auto-detecting system features:
... libelf: [ on ]
... bpf: [ on ]
CC libbpf.o
CC bpf.o
CC nlattr.o
LD libbpf-in.o
LINK libbpf.a
make[1]: Leaving directory '/home/foo/trees/bpf/tools/lib/bpf'
LINK bpftool
$ sudo make install
猜你喜欢
- 2024-10-27 越狱工具checkra1n更新 iOS 13.4.1系统也可以越狱了
- 2024-10-27 数据库多实例(数据库多实例数据泵写法)
- 2024-10-27 企业dns流量实时监控(企业dns流量实时监控怎么设置)
- 2024-10-27 Linux学习笔记(九)软件包管理(linux软件包管理的意义)
- 2024-10-27 如何打造自己的资产管理系统(如何打造自己的资产管理系统呢)
- 2024-10-27 从零开始学习OpenWrt:刷机 + 使用 + 编译教程
- 2024-10-27 替代Docker build的Buildah简单介绍
- 2024-10-27 Pyenv 介绍和安装指南 - Ubuntu 24
- 2024-07-20 Linux Shell 练习小例子(linux的shell编程题目)
- 2024-07-20 通过Python扫描代码关键字并进行预警
你 发表评论:
欢迎- 最近发表
-
- 使用Python实现图片文件的加密与解密:保障隐私安全的实用方案
- 吴恩达官宣开源,yyds!(吴恩达rnn)
- Python自动化办公实战:效率提升10倍的脚本开发指南
- Android让视图显示未读消息数量(未读消息图标怎么显示)
- docker容器安装与部署,常用命令、容器卷、dockerfile,详细教程
- pytorch的一个最简单的cpp扩展(pytorch cdist)
- 如何编译.Net 6 Runtime源码(编译framework)
- 微软Windows 11将改版BSOD、强制登录账号才能安装
- windows环境下配置sphinx输出html文档
- 超详细windows安装配置WSL2(ubuntu20.04)步骤
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)