今天是跟着极客时间学习ebpf的第一天。

ebpf Hello-world

  1. 安装相应的库

    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
       
    # 最后重新运行就得到了期望的结果了。
    
  2. 完整代码

    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()