3.1 Android eBPF代码仓解读

写在前面

前面已经介绍,Android从9.0版本开始支持eBPF,并且主要用于网络及CPU性能的监控上。它包含一个eBPF加载器和库。加载器在Andoroid init启动/system/etc/bpf/下的所有eBPF程序,ebpf程序在完成加载后,内核ebpf程序进行verify和attach,顺利的话,最终,ebpf程序会被hook或插入到指定的内核函数中,这样就可以完成对内核活动的监控。

本章,我们继续探索eBPF在Android上的应用。首先我们来看,ebpf的代码仓分布。

一,bpfloader

  • android/system/bpf
  • android/system/bpf/bpfloader

这个bpf代码仓基本上是ebpf加载器在android上的唯一实现。系统编译时生成bpfloader可执行程序,系统镜像打包后的路径为/system/bin/bpfloader。

它包含bpfloader.rc文件和bpfloader主程序。而rc我们就比价熟悉了,它是很多native服务的初始化及运行入口,那么bpfloader.rc自然而然也是bpfloader程序运行的入口。

bpfloader负载在系统初始化时,会创建相关的目录,并加载/system/etc/bpf目录下的所有eBPF程序。android 12默认支持的eBPF程序包括clatd.o,gpu_mem.o,netd.o,time_in_state.o等。

  • android/system/bpf/libbpf_android

系统编译时生成libbpf_android.so,系统镜像打包后的路径为/lib64/libbpf_android.so。其主要的作为bpfloader可执行程序的共享库,

你可能感兴趣的:(Android,eBPF,Book,android,eBPF,ebpf,linux,网络)