开发环境搭建
系统:Ubuntu 20.10
内核:5.8.0-25
由于20.10不是LTS版本,需要先修改/etc/apt/source.list文件,把“http://archive.ubuntu.com/ubuntu”修改为“https://mirrors.ustc.edu.cn/ubuntu-old-releases/ubuntu”,然后update。
sudo sed -i 's/http:\/\/archive.ubuntu.com\/ubuntu/https:\/\/mirrors.ustc.edu.cn\/ubuntu-old-releases\/ubuntu/g' /etc/apt/sources.list sudo apt-get update
安装相关依赖,下载libbpf的源码并编译:
sudo apt-get install git clang make libelf1 libelf-dev zlib1g-dev git clone https://github.com/libbpf/libbpf.git cd libbpf/src/ make sudo make install
从GitHub下载bpftool的二进制文件并放到/usr/local/sbin/中,然后在eBPF项目代码的目录下生成vmlinux.h。
bpftool btf dump file /sys/kernel/btf/vmlinux format c > vmlinux.h
clang -g -O2 -target bpf -D__TARGET_ARCH_x86_64 -I/usr/src/linux-headers-5.8.0-25/include -I/usr/include -c ./splice.bpf.c -o splice.bpf.o bpftool gen skeleton ./splice.bpf.o > splice.skel.h clang -I/usr/include -c splice.c -o splice_epbf.o clang splice_epbf.o -lbpf -lelf -lz -o splice_epbf
进入root用户,运行程序。
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64 ./splice_epbf