今天是跟着极客时间学习ebpf的第一天。
ebpf Hello-world
-
安装相应的库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
# 使用的是Ubuntu 22.04.4 LTS,内核版本:5.15.0-101-generic sudo apt-get -y make clang llvm libelf-dev libbpf-dev bpfcc-tools sudo apt-get -y linux-headers-$(uname -r) - # 编写好代码之后,执行: python hello.py. 发现 notfound bcc 这个包。 pip install bcc --use-pep517 # 再次运行之后发现,cannot import name 'BPF' from 'bcc'. 通过查看bcc仓库中的issue找到如下解决方案。暂时不明白原理 export PYTHONPATH=$(dirname `find /usr/lib -name bcc`):$PYTHONPATH # 运行后发现少了 numba pip install numba pytest # 最后重新运行就得到了期望的结果了。
-
完整代码
1 2 3 4 5 6 7
// hello.c int hello_world(void *ctx) { bpf_trace_printk("Hello world!"); return 0; }
1 2 3 4 5 6 7 8 9 10
#!/usr/bin/env python3 # 添加shebang 行,告诉系统,使用python3来运行这个脚本 # hello.py from bcc import BPF b = BPF(src_file="hello.c") b.attach_kprobe(event="do_sys_openat2", fn_name="hello_world") b.trace_print()