ebpf内核态开发环境搭建
2023-06-13 09:16:46 时间
1 操作系统和内核
操作系统:可选用ubuntu或者centos
内核版本:4.18+
- 内核开启BTF调试(非必需) 检查内核是否开启BTF调试:
cat /boot/config -`uname -r` | grep BTF
如果回显中显示CONFIG_INFO_BTF=y
表示开启。如果未开启需要重新编译内核开启。
- 生成vmlinux.h文件
bpftool btf dump file /sys/kernel/btf/vmlinux format c > vmlinux.h
生成这个头文件是linux内核头文件的大集合,结合以下头文件作为ebpf 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库
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
- 解压
xz -d llvm-project-11.0.0.tar.xz
tar -xvf llvm-project-11.0.0.tar
- 编译安装
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,会导致编译失败。
llvm-config --has-rtti
YES
3.1 也可以使用docker容器作为开发环境
需要宿主机内核版本满足要求。
4 验证环境
选用cilium/ebpf项目(tag:v0.8.0)中的样例:uretprobe。(这里需要加上golang的构建能力)
- 编译 进入到ebpf/examples/uretprobe下,执行:
BPF_CLANG=clang BPF_CFLAGS="-O2 -Wall" go generate main.go
go build .
- 挂载到内核
./uretprobe
2023/01/31 19:30:15 Listening for events..
开启一个新窗口输入hello:
hello
bash: hello: command not found
在开启监听的窗口可以收到:
./uretprobe
2023/01/31 19:30:15 Listening for events..
2023/01/31 19:30:34 /bin/bash:readline return value: hello
相关文章
- 驱动开发:内核枚举Registry注册表回调
- 驱动开发:内核枚举ShadowSSDT基址
- 驱动开发:内核遍历进程VAD结构体
- 驱动开发:通过Async反向与内核通信
- 驱动开发:通过PIPE管道与内核层通信
- 驱动开发:内核中的自旋锁结构
- 驱动开发:内核层InlineHook挂钩函数
- Linux内核跟踪:ftrace hook入门手册(下)
- 驱动开发:通过SystemBuf与内核层通信
- USB总线-Linux内核USB3.0设备控制器复合设备之USB gadget configfs分析(七)
- 【Linux 内核 内存管理】内存管理系统调用 ⑤ ( 代码示例 | 多进程共享 mmap 内存映射示例 )
- Linux内核审计:安全管理之道(linux内核审计)
- 籍Linux内核宝典(linux内核的书)
- 深入Linux内核驱动开发课程.(linux内核驱动深入班)
- Linux内核被发现新的安全漏洞 非特权用户可利用漏洞获得root权限
- List头文件助力Linux内核开发(list.hlinux)
- Linux内核:开发与应用指南(linux内核书籍推荐)
- 技术Linux 内核下的视频新技术(linux内核视频)
- Linux底层开发:驾驭内核之路(linux底层开发)
- 开发陈莉君:Linux内核开发之旅(陈莉君linux内核)
- Linux 内核开发报告 2017 版
- 数的限制深入了解:Linux允许的最多文件数有限制,通过优化文件系统和内核参数可提高限制,以满足更高性能需求。(linux最多文件)
- 深入理解Linux内核:探索其核心机制与工作原理%(Linux内核)
- Linux抢占式内核:提高系统稳定性和性能。(linux抢占式)
- 极速更新:Linux内核更换升级(linux 更换 内核)
- 部署Linux 内核开发:环境部署必要性(linux内核开发环境)
- 深入理解Linux内核:驱动源码分析(linux驱动源码分析)