カーネルは、samples/bpf
にいくつかの例を提供しています。 Makefile
で十分に単純なカーネルモジュールを構築するのと同じように、ツリーの外側の例を構築することに興味があります。同じことをbpfで行うことは可能ですか?私はsamples/bpf/Makefile
から不要な部分を取り除き、依存関係をlibbpf
などに保存してみましたが、それほど簡単ではありませんでした。例えばカーネルツリーからBPFプログラムを構築する方法
、(私はサンプル/ BPF/Makefileのと同様に、make samples/bpf V=1
の出力に覗く)次のコマンドラインで、カーネルツリーのsamples/bpf/bpf_tcp_kern.c
外を構築しようとしている:
clang -nostdinc -isystem /usr/lib/gcc/x86_64-linux-gnu/5/include \
-I/home/mark/work/net-next.git/arch/x86/include -I/home/mark/work/net-next.git/arch/x86/include/generated -I./include -I/home/mark/work/net-next.git/arch/x86/include/uapi -I/home/mark/work/net-next.git/arch/x86/include/generated/uapi -I/home/mark/work/net-next.git/include -I/home/mark/work/net-next.git/generated/uapi -I./ \
-D__KERNEL__ -Wno-unused-value -Wno-pointer-sign \
-D__TARGET_ARCH_x86 -Wno-compare-distinct-pointer-types \
-Wno-gnu-variable-sized-type-not-at-end \
-Wno-address-of-packed-member -Wno-tautological-compare \
-Wno-unknown-warning-option \
-O2 -emit-llvm -c bpf_tcp_kern.c -o -| llc -march=bpf -filetype=obj -o bpf_tcp_kern.o
In file included from bpf_tcp_kern.c:15:
In file included from /home/mark/work/net-next.git/include/uapi/linux/bpf.h:11:
In file included from /home/mark/work/net-next.git/include/linux/types.h:6:
In file included from /home/mark/work/net-next.git/include/uapi/linux/types.h:5:
/home/mark/work/net-next.git/arch/x86/include/uapi/asm/types.h:5:10: fatal error: 'asm-generic/types.h' file not found
#include <asm-generic/types.h>
^
1 error generated
これは、 clang-llvm 3.8.0
ユーザーサイドのbpfアプリケーションを構築するには、libbpf
が必要です。この部分はうまくいきます。
何か不足していますか?私はこの作業がかなり簡単だと信じています;-)
私の 'Makefile'には実際に' include/generated/uapi'が含まれていますが、 'linux/kconfig.h'が見つからないという問題がありました。ありがとう。 – Mark
もう1つの追加リソース: 'kernel/sample/bpf /'にあるMakefileは、サンプルをビルドするために、カーネルツリーの外に作成されているようです:[link](https://github.com/netoptimizer/prototype-kernel/blob/master/kernel/samples/bpf/Makefile) – Qeole