bpftrace环境的配置和使用(基于riscv-k1)

  • 在k1上配置并使用bpftrace,基于上一篇的配置

bpftrace

配置过程大部分就是依赖的安装和编译问题,不再详细说明

  • 安装依赖
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    sudo apt-get update && sudo apt-get install -y \
    cmake flex bison \
    python3-dev python3-setuptools \
    libclang-20-dev libedit-dev libcurl4-openssl-dev libdebuginfod-dev liblzma-dev \
    zip unzip \
    llvm-20-tools llvm-20-dev libpolly-20-dev \
    libbpf-dev libcereal-dev \
    binutils-dev libdw-dev libpcap-dev \
    curl \
    dwarves \
    libgtest-dev
  • 配置编译和安装BCC(因为全部编译bpftrace需要依赖BCC的文件)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    cd ~/repo
    git clone https://github.com/iovisor/bcc.git
    cd bcc
    git submodule update --init --recursive
    # 创建一个干净的编译目录
    rm -rf build && mkdir build && cd build
    # 运行 cmake,并禁用示例以防止内存耗尽
    cmake -DCMAKE_INSTALL_PREFIX=/usr -DENABLE_EXAMPLES=OFF ..
    # 以较低的并行度进行编译,防止系统卡死
    make -j4
    # 安装
    sudo make install
    sudo ldconfig
  • 配置编译和安装bpftrace
    • GTest需要手动编译
      1
      2
      3
      4
      5
      6
      cd /usr/src/googletest
      sudo cmake .
      sudo make -j$(nproc)
      sudo cp lib/*.a /usr/lib/
      sudo cp -r googletest/include/gtest /usr/include/
      sudo cp -r googlemock/include/gmock /usr/include/
    • 编译并安装bpftool
      1
      2
      3
      cd bpftool/src # 从 libbpf/src 目录回到 bpftool/src
      make
      sudo make install
    • 编译并配置 blazesym
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      # 安装 Rust 环境(网速慢可用国内镜像)
      export RUSTUP_DIST_SERVER=https://mirrors.tuna.tsinghua.edu.cn/rustup
      export RUSTUP_UPDATE_ROOT=https://mirrors.tuna.tsinghua.edu.cn/rustup/rustup
      wget https://sh.rustup.rs -O rustup-init.sh
      chmod +x rustup-init.sh
      sudo ./rustup-init.sh -y
      rustc --version
      cargo --version

      cd ~/repo/libbpf-bootstrap/blazesym/capi
      cargo build --release
      sudo cp target/release/libblazesym_c.a /usr/local/lib/
      sudo cp capi/include/blazesym.h /usr/local/include/blazesym.h
      sudo ldconfig
    • clong bpftrace并编译安装
      1
      2
      3
      4
      5
      6
      7
      8
      9
      cd ~/repo
      git clone https://github.com/iovisor/bpftrace.git
      cd bpftrace
      git submodule update --init --recursive
      rm -rf build && mkdir build && cd build
      cmake ..
      make -j$(nproc)
      sudo make install
      bpftrace --version

安装完成!

命令测试

1
2
# 输出
sudo bpftrace -e 'BEGIN { printf("Hello, World! I have conquered eBPF on RISC-V!\n"); }'

test bpftrace on k1

1
2
# 追踪所有打开文件的操作
sudo bpftrace -e 'tracepoint:syscalls:sys_enter_openat { printf("PID %d opening: %s\n", pid, str(args->filename)); }'

test bpftrace on k1

bpftrace环境的配置和使用(基于riscv-k1)

https://goko-son626.github.io/post/use-bpftrace-on-k1.html

作者

GoKo Mell

发布于

2025-08-01

更新于

2025-09-11

许可协议

评论

:D 一言句子获取中...