커널은 samples/bpf
에 많은 예제를 제공합니다. Makefile
이 충분히 간단 할 수있는 커널 모듈을 빌드하는 것처럼 트리 외부에서 예제 중 하나를 만드는 데 관심이 있습니다. bpf를 사용하여 동일한 작업을 수행 할 수 있습니까? 나는 samples/bpf/Makefile
에서 불필요한 부분을 찢어 내고 libbpf
과 그 외의 것들에 대한 종속성을 유지하려고 노력했지만 그렇게 쉽지는 않았다. 다음 명령 줄 커널 트리의 samples/bpf/bpf_tcp_kern.c
외부 구축을 위해 노력 예를 들어 커널 트리에서 BPF 프로그램을 빌드하는 방법
make samples/bpf V=1
의 내가 샘플로 살짝/BPF/메이크뿐만 아니라 출력) :
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
하나의 추가 자원 :'kernel/sample/bpf /'에있는 Makefile은 분명히 커널 트리 외부에서 샘플을 빌드하기 위해 파생 된 것입니다 : [link] (https://github.com/netoptimizer/prototype-kernel)/blob/master/kernel/samples/bpf/Makefile) – Qeole