waydroid在麒麟系统bpf问题记录

麒麟系统版本:Linux version 5.4.18-85-generic (buildd@78035fe431f3) (gcc version 9.4.0 (Ubuntu 9.4.0-1kylin1~20.04.1)) #74-KYLINOS SMP Fri Mar 24 11:20:19 UTC 2023

安卓bpfloader服务加载bpf程序失败导致系统无法正常启动;总共四个bpf程序,clatd.o和offload.o可以正常加载,netd.o和time_in_state.o无法正常加载。

从linux kernel官网下载kernel源码(版本5.4.0,下的仓库没有找到 5.4.18,后面发现stable版本才有),编译安装,运行自己的内核,发现clatd.o可以正常加载,netd.o,offload.o和time_in_state.o无法正常加载。调试kernel端的bpf源码,结合安卓bpf程序源码的注释,可以确认需要开启一些内核配置及安卓专用的内核补丁;

netd.o需要配置CONFIG_CGROUP_BPF

time_in_state.o需要配置CONFIG_BPF_EVENTS

offload.o需要补丁编辑 text file

使用这些配置和补丁的内核,waydroid可以正常启动并加载所以bpf程序;我们使用麒麟系统的话,改不了内核,所以无法解决这些问题,目前可以去掉安卓端bpf程序的critical段属性,不带critical段属性的bpf程序加载失败,不会导致bpfloader服务启动失败,使系统无法正常启动。