參考
- 用clang編譯Linux內核
- type_id=3 vlen != 0 on 5.4 LTS kernel
- libbpf-tools compile with core_fixes.bpf.h include got error
- bpf_btf_info has no member named 'name'
- https://github.com/joelagnel/adeb/tree/master/
- 編譯bpftrace的官方參考:
- 編譯bcc的官方參考:
- libbpf-tools編譯和使用步驟
- Android S 快速搭建BCC環境
操作
- 參考eadb的readme,安裝基本的環境
eadb prepare
這裏安裝一個基本的環境,後面自己編譯bcc和bpftrace
- 如果希望把/data/目錄也傳給chroot環境:
卸載文件系統:
/data/eadb # ./device-umount-all
修改/data/eadb/run.common,增加:
然後再次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:
-
下載和編譯libbpf
make install_uapi_headers
- 編譯bpftrace是提示:bpf_btf_info中的name成員找不到
參考:bpf_btf_info has no member named 'name'
在libbpf源碼下執行:
make install_uapi_headers
-
運行bpftrace必現vlen錯誤
參考:type_id=3 vlen != 0 on 5.4 LTS kernel -
編譯javac.bpf.c報錯:
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
完。