You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AOSP 13中eBPF kprobe程序编译成功后无法自动加载问题咨询

AOSP 13下kprobe类型eBPF程序未自动加载的排查方案

关键排查步骤

  • 确认加载配置文件
    AOSP中eBPF程序的自动加载依赖/system/etc/bpf/progs.config,必须为你的kprobe程序添加对应条目,格式要和DEFINE_BPF_PROG参数匹配:

    kb_do_tcp_sendmsg kprobe/tcp_sendmsg 0 0
    

    格式说明:[程序名称] [挂载点] [UID] [GID],这里的UID/GID对应你代码里的AID_ROOT(值为0)。

  • 验证内核完整支持
    仅开启CONFIG_KPROBE=y不够,4.19内核还需要开启CONFIG_BPF_KPROBE_OVERRIDE才能支持kprobe类型的eBPF程序。可通过以下命令确认:

    zcat /proc/config.gz | grep CONFIG_BPF_KPROBE_OVERRIDE
    

    若输出为CONFIG_BPF_KPROBE_OVERRIDE=y才符合要求,否则需要重新编译内核开启该选项。

  • 检查文件权限与SELinux上下文

    • 确保/system/etc/bpf/下的kprobe程序文件权限为root:root 0644,和正常运行的tracepoint程序权限一致。
    • 检查SELinux上下文:执行ls -Z /system/etc/bpf/,程序文件的上下文应为u:object_r:system_bpf_file:s0,若不符,执行restorecon -v /system/etc/bpf/kb_do_tcp_sendmsg修复。
  • 查看加载失败日志
    重启设备后,通过以下命令提取eBPF相关日志,定位具体失败原因:

    logcat | grep -i bpf
    dmesg | grep -i bpf
    

    常见错误包括:kprobe挂载点不存在、程序字节码验证失败、权限不足等。

  • 手动加载测试
    使用bpftool手动加载程序,直接获取错误信息:

    bpftool prog load /system/etc/bpf/kb_do_tcp_sendmsg /sys/fs/bpf/kb_do_tcp_sendmsg type kprobe
    

    若手动加载失败,终端会返回明确的错误提示,比如内核不支持的指令、上下文类型不匹配等。

代码优化建议

你提供的代码片段中,void* ctx的定义存在风险:4.19内核中kprobe程序的上下文应为struct pt_regs*,虽然void*能编译,但可能导致内核验证程序时失败。建议修改为:

DEFINE_BPF_PROG("kprobe/tcp_sendmsg", AID_ROOT, AID_ROOT, kb_do_tcp_sendmsg)  
(struct pt_regs *ctx){
    return 0;      
} 

同时确保编译时使用AOSP官方提供的bpf工具链,避免因工具链版本差异导致的ELF格式问题。

内容的提问来源于stack exchange,提问作者王张军

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 15:00:50