nettrace
nettrace copied to clipboard
手动指定内核版本编译
您好,我想请教一下跨内核版本编译的场景,具体而言是在 kernel 4.15.0 中编译 kernel 4.9.0 的 nettrace 工具,目前在编译过程中遇到了以下问题:
~/workspace/nettrace/nettrace$ docker run -it --rm --network=host --privileged -v $(pwd):$(pwd) -v /lib/modules/:/lib/modules/ -v /usr/src/:/usr/src/ imagedong/nettrace-build make -C $(pwd) NO_BTF=1 NO_GLOBAL_DATA=1 KERNEL=/home/ubuntu/workspace/nettrace/nettrace/linux all
make: Entering directory '/home/ubuntu/workspace/nettrace/nettrace'
make -C src all
make[1]: Entering directory '/home/ubuntu/workspace/nettrace/nettrace/src'
/bin/sh: 1: pkg-config: not found
python3 gen_trace.py > trace_group.c
python3 gen_trace.py probe > progs/kprobe_trace.h
ln -s vmlinux_header.h kheaders.h
clang -O2 -c -S -Wall -fno-asynchronous-unwind-tables \
-Wno-incompatible-pointer-types-discards-qualifiers \
progs/kprobe.c -emit-llvm -Wno-unknown-attributes -I./ -I/home/ubuntu/workspace/nettrace/nettrace/shared/bpf/ -g -DBPF_NO_GLOBAL_DATA -DNO_BTF -D__F_STACK_TRACE -D__F_NFT_NAME_ARRAY -D__KERN_VER=4.9.110 -D__KERN_MAJOR=4 -Wno-unused-function -Wno-compare-distinct-pointer-types -Wuninitialized -D__TARGET_ARCH_x86 -DBPF_NO_PRESERVE_ACCESS_INDEX -nostdinc -isystem /usr/lib/gcc/x86_64-linux-gnu/12/include -I/home/ubuntu/workspace/nettrace/nettrace/linux/arch/x86/include -I/home/ubuntu/workspace/nettrace/nettrace/linux/arch/x86/include/generated -I/home/ubuntu/workspace/nettrace/nettrace/linux/include -I/home/ubuntu/workspace/nettrace/nettrace/linux/arch/x86/include/uapi -I/home/ubuntu/workspace/nettrace/nettrace/linux/arch/x86/include/generated/uapi -I/home/ubuntu/workspace/nettrace/nettrace/linux/include/uapi -I/home/ubuntu/workspace/nettrace/nettrace/linux/include/generated/uapi -include /home/ubuntu/workspace/nettrace/nettrace/linux/include/linux/kconfig.h -I/usr/include/ -D__KERNEL__ -Wno-unused-value -Wno-pointer-sign -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 -Wno-frame-address -D__F_SK_PRPTOCOL_LEGACY -D__F_NO_SK_FLAGS_OFFSET -Xclang \
-disable-llvm-passes -o - | \
opt -O2 -mtriple=bpf-pc-linux | \
llvm-dis | \
llc -march=bpf -filetype=obj -o progs/kprobe.o
In file included from <built-in>:1:
/home/ubuntu/workspace/nettrace/nettrace/linux/include/linux/kconfig.h:4:10: fatal error: 'generated/autoconf.h' file not found
#include <generated/autoconf.h>
^~~~~~~~~~~~~~~~~~~~~~
1 error generated.
make[1]: *** [../common.mk:115: progs/kprobe.o] Error 1
make[1]: Leaving directory '/home/ubuntu/workspace/nettrace/nettrace/src'
make: *** [Makefile:24: all] Error 2
make: Leaving directory '/home/ubuntu/workspace/nettrace/nettrace'
作为内核开发的新手,我是直接将 kernel 4.9.0 的源码路径作为 KERNEL 参数,但这明显是不对的,想请教一下如何获得低版本例如 kernel 4.9.0 的头文件,目前 apt-get install 列表已不再维护该内核版本的 linux-headers
而且当我获取了 linux-headers-4.9.0-8-amd64 内核头文件后,指定该路径仍会报错:
docker run -it --rm --network=host --privileged -v $(pwd):$(pwd) -v /lib/modules/:/lib/modules/ -v /usr/src/:/usr/src/ imagedong/nettrace-build make -C $(pwd) NO_BTF=1 NO_GLOBAL_DATA=1 KERNEL=/home/ubuntu/workspace/nettrace/nettrace/linux-headers-4.9.0-8-amd64 all
make: Entering directory '/home/ubuntu/workspace/nettrace/nettrace'
make -C src all
make[1]: Entering directory '/home/ubuntu/workspace/nettrace/nettrace/src'
/bin/sh: 1: pkg-config: not found
clang -O2 -c -S -Wall -fno-asynchronous-unwind-tables \
-Wno-incompatible-pointer-types-discards-qualifiers \
progs/kprobe.c -emit-llvm -Wno-unknown-attributes -I./ -I/home/ubuntu/workspace/nettrace/nettrace/shared/bpf/ -g -DBPF_NO_GLOBAL_DATA -DNO_BTF -D__F_STACK_TRACE -D__F_NFT_NAME_ARRAY -D__KERN_VER=2.6. -D__KERN_MAJOR=2 -Wno-unused-function -Wno-compare-distinct-pointer-types -Wuninitialized -D__TARGET_ARCH_x86 -DBPF_NO_PRESERVE_ACCESS_INDEX -nostdinc -isystem /usr/lib/gcc/x86_64-linux-gnu/12/include -I/home/ubuntu/workspace/nettrace/nettrace/linux-headers-4.9.0-8-amd64/arch/x86/include -I/home/ubuntu/workspace/nettrace/nettrace/linux-headers-4.9.0-8-amd64/arch/x86/include/generated -I/home/ubuntu/workspace/nettrace/nettrace/linux-headers-4.9.0-8-amd64/include -I/home/ubuntu/workspace/nettrace/nettrace/linux-headers-4.9.0-8-amd64/arch/x86/include/uapi -I/home/ubuntu/workspace/nettrace/nettrace/linux-headers-4.9.0-8-amd64/arch/x86/include/generated/uapi -I/home/ubuntu/workspace/nettrace/nettrace/linux-headers-4.9.0-8-amd64/include/uapi -I/home/ubuntu/workspace/nettrace/nettrace/linux-headers-4.9.0-8-amd64/include/generated/uapi -include /home/ubuntu/workspace/nettrace/nettrace/linux-headers-4.9.0-8-amd64/include/linux/kconfig.h -I/usr/include/ -D__KERNEL__ -Wno-unused-value -Wno-pointer-sign -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 -Wno-frame-address -D__F_SK_PRPTOCOL_LEGACY -Xclang \
-disable-llvm-passes -o - | \
opt -O2 -mtriple=bpf-pc-linux | \
llvm-dis | \
llc -march=bpf -filetype=obj -o progs/kprobe.o
<built-in>:1:10: fatal error: '/home/ubuntu/workspace/nettrace/nettrace/linux-headers-4.9.0-8-amd64/include/linux/kconfig.h' file not found
#include "/home/ubuntu/workspace/nettrace/nettrace/linux-headers-4.9.0-8-amd64/include/linux/kconfig.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
make[1]: *** [../common.mk:115: progs/kprobe.o] Error 1
make[1]: Leaving directory '/home/ubuntu/workspace/nettrace/nettrace/src'
make: *** [Makefile:24: all] Error 2
make: Leaving directory '/home/ubuntu/workspace/nettrace/nettrace'
下面是从 debian 的归档系统中获取的 linux-headers-4.9.0-8-amd64