brintos

brintos / linux-shallow public Read only

0
0
Text · 3.9 KiB · cabe2d2 Raw
122 lines · plain
1eBPF sample programs2====================3 4This directory contains a test stubs, verifier test-suite and examples5for using eBPF. The examples use libbpf from tools/lib/bpf.6 7Note that the XDP-specific samples have been removed from this directory and8moved to the xdp-tools repository: https://github.com/xdp-project/xdp-tools9See the commit messages removing each tool from this directory for how to10convert specific command invocations between the old samples and the utilities11in xdp-tools.12 13Build dependencies14==================15 16Compiling requires having installed:17 * clang18 * llvm19 * pahole20 21Consult :ref:`Documentation/process/changes.rst <changes>` for the minimum22version numbers required and how to update them. Note that LLVM's tool23'llc' must support target 'bpf', list version and supported targets with24command: ``llc --version``25 26Clean and configuration27-----------------------28 29It can be needed to clean tools, samples or kernel before trying new arch or30after some changes (on demand)::31 32 make -C tools clean33 make -C samples/bpf clean34 make clean35 36Configure kernel, defconfig for instance37(see "tools/testing/selftests/bpf/config" for a reference config)::38 39 make defconfig40 41Kernel headers42--------------43 44There are usually dependencies to header files of the current kernel.45To avoid installing devel kernel headers system wide, as a normal46user, simply call::47 48 make headers_install49 50This will create a local "usr/include" directory in the git/build top51level directory, that the make system will automatically pick up first.52 53Compiling54=========55 56For building the BPF samples, issue the below command from the kernel57top level directory::58 59 make M=samples/bpf60 61It is also possible to call make from this directory.  This will just62hide the invocation of make as above.63 64Manually compiling LLVM with 'bpf' support65------------------------------------------66 67Since version 3.7.0, LLVM adds a proper LLVM backend target for the68BPF bytecode architecture.69 70By default llvm will build all non-experimental backends including bpf.71To generate a smaller llc binary one can use::72 73 -DLLVM_TARGETS_TO_BUILD="BPF"74 75We recommend that developers who want the fastest incremental builds76use the Ninja build system, you can find it in your system's package77manager, usually the package is ninja or ninja-build.78 79Quick sniplet for manually compiling LLVM and clang80(build dependencies are ninja, cmake and gcc-c++)::81 82 $ git clone https://github.com/llvm/llvm-project.git83 $ mkdir -p llvm-project/llvm/build84 $ cd llvm-project/llvm/build85 $ cmake .. -G "Ninja" -DLLVM_TARGETS_TO_BUILD="BPF;X86" \86            -DLLVM_ENABLE_PROJECTS="clang"    \87            -DCMAKE_BUILD_TYPE=Release        \88            -DLLVM_BUILD_RUNTIME=OFF89 $ ninja90 91It is also possible to point make to the newly compiled 'llc' or92'clang' command via redefining LLC or CLANG on the make command line::93 94 make M=samples/bpf LLC=~/git/llvm-project/llvm/build/bin/llc CLANG=~/git/llvm-project/llvm/build/bin/clang95 96Cross compiling samples97-----------------------98In order to cross-compile, say for arm64 targets, export CROSS_COMPILE and ARCH99environment variables before calling make. But do this before clean,100configuration and header install steps described above. This will direct make to101build samples for the cross target::102 103 export ARCH=arm64104 export CROSS_COMPILE="aarch64-linux-gnu-"105 106Headers can be also installed on RFS of target board if need to keep them in107sync (not necessarily and it creates a local "usr/include" directory also)::108 109 make INSTALL_HDR_PATH=~/some_sysroot/usr headers_install110 111Pointing LLC and CLANG is not necessarily if it's installed on HOST and have112in its targets appropriate arm64 arch (usually it has several arches).113Build samples::114 115 make M=samples/bpf116 117Or build samples with SYSROOT if some header or library is absent in toolchain,118say libelf, providing address to file system containing headers and libs,119can be RFS of target board::120 121 make M=samples/bpf SYSROOT=~/some_sysroot122