网站首页 > 开源技术 正文
工具链
本节介绍 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扫描代码关键字并进行预警
欢迎 你 发表评论:
- 1577℃北京那些看上去很牛的车牌们!(北京厉害车牌)
- 1098℃2025年度视频去水印软件TOP5对比:哪款最值得用
- 664℃《我的世界》不同版本的差异 ——新手向
- 583℃新疆话里的“虫子”
- 539℃正畸治疗后的牙间黑三角
- 498℃蓝牙设备配对失败的系统性解决方案与技术解析
- 496℃中兴光猫 Telnet下设置大全(中兴光猫命令大全)
- 490℃未备份电脑文件数据恢复的七种方法
- 最近发表
- 标签列表
- 
- 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)
 

本文暂时没有评论,来添加一个吧(●'◡'●)