用eadb在Android上搭建eBPF运行环境

参考

操作

  • 参考eadb的readme,安装基本的环境
eadb prepare

这里安装一个基本的环境,后面自己编译bcc和bpftrace

  • 如果希望把/data/目录也传给chroot环境:

卸载文件系统:

/data/eadb # ./device-umount-all

修改/data/eadb/run.common,增加:
image

然后再次eadb shell登录即可。

  • 安装clang-12

在编译bcc的libbpf-tools目录下的文件遇到built-in函数无效的报错,参考:
libbpf-tools compile with core_fixes.bpf.h include got error

./core_fixes.bpf.h:79:6: error: use of unknown builtin '__builtin_preserve_type_info' [-Wimplicit-function-declaration]
if (bpf_core_type_exists(struct trace_event_raw_block_rq_completion___x))
^
/root/ebpfcompiletest/libbpfgo-tools/bcc/libbpf-tools/.output/bpf/bpf_core_read.h:185:2: note: expanded from macro 'bpf_core_type_exists'
__builtin_preserve_type_info(*(typeof(type) )0, BPF_TYPE_EXISTS)

需要升级clang的版本,升级到12即可,参考用clang编译Linux内核

./llvm.sh 12 all
  • 在编译BCC时,如果编译tests遇到错误,可以在cmake的时候不编译tests
    可以直接修改CMakeLists.txt:
    image

  • 下载和编译libbpf

make install_uapi_headers
  • 编译bpftrace是提示:bpf_btf_info中的name成员找不到

参考:bpf_btf_info has no member named 'name'

在libbpf源码下执行:

make install_uapi_headers
In file included from javagc.bpf.c:6:
In file included from /data/bpf/bcc/libbpf-tools/.output/bpf/usdt.bpf.h:6:
/usr/include/linux/errno.h:1:10: fatal error: 'asm/errno.h' file not found
#include <asm/errno.h>

解决:

ln -sf /usr/include/aarch64-linux-gnu/asm/ /usr/include/asm

完。

posted @ 2024-01-17 16:44  摩斯电码  阅读(355)  评论(0编辑  收藏  举报