本项目用于演示如何使用NDK编译一个eBPF程序,主要参考为Android平台编译eBPF程序
先同步需要的源代码,这里选择的是android11-gsi
分支,可以根据自己的需求修改
git clone -b android11-gsi https://android.googlesource.com/platform/bionic --depth=1
git clone -b android11-gsi https://android.googlesource.com/platform/system/core --depth=1
git clone -b android11-gsi https://android.googlesource.com/platform/system/bpf --depth=1
整理文件结构
mkdir system && mv core system/ && mv bpf system/
然后准备好NDK,修改build.sh
中的NDK_ROOT
即可
执行./build.sh
即可,产物在out
目录下
Q: 和参考文章有什么不同吗?
A: 编译增加了-g
选项,作用是生成带有BTF信息的.o
文件
https://clang.llvm.org/docs/UsersManual.html#cmdoption-g
如果没有BTF信息,那么加载eBPF程序时会要求内核启用CONFIG_DEBUG_INFO
和CONFIG_DEBUG_INFO_BTF
,否则无法正确加载
readelf -S out/stack.o | grep BTF