用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

完。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章