前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ebpf内核态开发环境搭建

ebpf内核态开发环境搭建

原创
作者头像
DifficultWork
修改2023-06-19 15:11:04
2.7K0
修改2023-06-19 15:11:04
举报
文章被收录于专栏:阶梯计划阶梯计划

1 操作系统和内核

操作系统:可选用ubuntu或者centos

内核版本:4.18+

  • 内核开启BTF调试(非必需) 检查内核是否开启BTF调试:
代码语言:shell
复制
cat /boot/config -`uname -r` | grep BTF

如果回显中显示CONFIG_INFO_BTF=y表示开启。如果未开启需要重新编译内核开启。

  • 生成vmlinux.h文件
代码语言:shell
复制
bpftool btf dump file /sys/kernel/btf/vmlinux format c > vmlinux.h

生成这个头文件是linux内核头文件的大集合,结合以下头文件作为ebpf c代码的头部引用:

代码语言:c
复制
#include "vmlinux.h"
#include <bpf/bpf_helpers.h>
#include <bpf/bpf_endian.h>
#include <bpf/bpf_core_read.h>
#include <bpf/bpf_tracing.h>

2 安装libbpf库

代码语言:shell
复制
yum -y install libbpf-devel

部分操作系统版本的软件源可能没有,需要自行找RPM包安装。

3 安装llvm

  • 依赖 llvm版本:11.0.0 gcc版本:>=5.1 g++版本:>=5.1 GNU make:>=3.79 cmake版本:>=3.4.3
  • 解压
代码语言:shell
复制
xz -d llvm-project-11.0.0.tar.xz
tar -xvf llvm-project-11.0.0.tar
  • 编译安装
代码语言:shell
复制
cd llvm-project-11.0.0
mkdir build
cd build
cmake -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++ -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_RTTI=ON -DLLVM_ENABLE_PROJECTS="clang;libcxx;libcxxabi" -G "Unix Makefiles" ../llvm
make
# 需要等待约4小时
make install
# 需要等待约半小时
  • 确认是否RTTI特性 在编译bpftrace工程的时候如果没有打开LLVM的RTTI,会导致编译失败。
代码语言:shell
复制
llvm-config --has-rtti
YES

3.1 也可以使用docker容器作为开发环境

需要宿主机内核版本满足要求。

4 验证环境

选用cilium/ebpf项目(tag:v0.8.0)中的样例:uretprobe。(这里需要加上golang的构建能力)

  • 编译 进入到ebpf/examples/uretprobe下,执行:
代码语言:shell
复制
BPF_CLANG=clang BPF_CFLAGS="-O2 -Wall" go generate main.go
go build .
  • 挂载到内核
代码语言:shell
复制
./uretprobe
2023/01/31 19:30:15 Listening for events..

开启一个新窗口输入hello:

代码语言:shell
复制
hello
bash: hello: command not found

在开启监听的窗口可以收到:

代码语言:txt
复制
./uretprobe
2023/01/31 19:30:15 Listening for events..
2023/01/31 19:30:34 /bin/bash:readline return value: hello

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 操作系统和内核
  • 2 安装libbpf库
  • 3 安装llvm
    • 3.1 也可以使用docker容器作为开发环境
    • 4 验证环境
    相关产品与服务
    专用宿主机
    专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档