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

使用bpftool struct_ops加载bpf_cubic.o时遇libbpf Kconfig打开失败错误

加载BPF_CUBIC示例时libbpf报错无法打开系统Kconfig

我尝试将Linux内核中的bpf_cubic示例通过bpftool struct_ops命令加载到内核,代码编译成功,但执行bpftool struct_ops register bpf_cubic.o时出现如下错误:

libbpf: failed to open system Kconfig
libbpf: failed to load object 'bpf_cubic.o'

补充信息

  1. strace -f -ebpf bpftool struct_ops register bpf_cubic.o输出:
bpf(BPF_PROG_LOAD, {prog_type=BPF_PROG_TYPE_SOCKET_FILTER, insn_cnt=2, insns=0x7ffd21f7caf0, license="GPL", log_level=0, log_size=0, log_buf=NULL, kern_version=KERNEL_VERSION(0, 0, 0), prog_flags=0, prog_name="", prog_ifindex=0, expected_attach_type=BPF_CGROUP_INET_INGRESS, prog_btf_fd=0, func_info_rec_size=0, func_info=NULL, func_info_cnt=0, line_info_rec_size=0, line_info=NULL, line_info_cnt=0, attach_btf_id=0, attach_prog_fd=0, fd_array=NULL}, 144) = 3
bpf(BPF_PROG_LOAD, {prog_type=BPF_PROG_TYPE_SOCKET_FILTER, insn_cnt=2, insns=0x7ffd21f7c8e0, license="GPL", log_level=0, log_size=0, log_buf=NULL, kern_version=KERNEL_VERSION(0, 0, 0), prog_flags=0, prog_name="", prog_ifindex=0, expected_attach_type=BPF_CGROUP_INET_INGRESS, prog_btf_fd=0, func_info_rec_size=0, func_info=NULL, func_info_cnt=0, line_info_rec_size=0, line_info=NULL, line_info_cnt=0, attach_btf_id=0, attach_prog_fd=0}, 116) = 3
bpf(BPF_PROG_LOAD, {prog_type=BPF_PROG_TYPE_SOCKET_FILTER, insn_cnt=2, insns=0x7ffd21f7caf0, license="GPL", log_level=0, log_size=0, log_buf=NULL, kern_version=KERNEL_VERSION(0, 0, 0), prog_flags=0, prog_name="", prog_ifindex=0, expected_attach_type=BPF_CGROUP_INET_INGRESS, prog_btf_fd=0, func_info_rec_size=0, func_info=NULL, func_info_cnt=0, line_info_rec_size=0, line_info=NULL, line_info_cnt=0, attach_btf_id=0, attach_prog_fd=0, fd_array=NULL}, 128) = 3
libbpf: failed to open system Kconfig
libbpf: failed to load object 'bpf_cubic.o'
+++ exited with 255 +++
  1. uname -r输出:
6.1.45-8-esx
  1. ls -l /boot/config*输出:
-rw-r--r-- 1 root root 125476 Sep 20 07:09 /boot/config-6.1.45-8.ph5-esx
  1. /boot目录内容:
config-6.1.45-8.ph5-esx      linux-6.1.45-8.ph5-esx.cfg   System.old
efi                          photon.cfg                   vmlinuz
grub                         systemd.cfg                  vmlinuz-6.1.45-8.ph5-esx
grub2                        System.map                   vmlinuz.old
initrd.img-6.1.45-8.ph5-esx  System.map-6.1.45-8.ph5-esx

注:我通过menuconfig启用了BTF等bpftool相关特性,编译新内核后修改了/boot/grub2/grub.cfg指向新生成的vmlinuz,但/boot下的config文件是旧版本,未启用相关特性。

问题原因

  • Kconfig文件路径不匹配:libbpf默认会查找/boot/config-$(uname -r)文件验证内核配置,但你的uname -r输出是6.1.45-8-esx,而/boot下的config文件名为config-6.1.45-8.ph5-esx,文件名不匹配导致libbpf无法找到对应配置文件。
  • 现有config配置不全:即使路径匹配,当前/boot下的config是旧版本,没有包含新内核中启用的BTF、BPF_STRUCT_OPS等必要特性,libbpf验证BPF程序依赖的内核特性时会失败。
  • 新内核config未正确安装:编译新内核后,未将新生成的.config文件复制到/boot并命名为对应内核版本的文件名,导致libbpf无法读取正确的内核配置信息。

解决方法

  • 找到内核源码目录下编译新内核时生成的.config文件,复制到/boot目录并命名为config-6.1.45-8-esx:
    cp /path/to/kernel/source/.config /boot/config-6.1.45-8-esx
    
  • 确保新的config文件中开启了以下必要配置项:
    CONFIG_DEBUG_INFO_BTF=y
    CONFIG_BPF=y
    CONFIG_BPF_SYSCALL=y
    CONFIG_BPF_STRUCT_OPS=y
    CONFIG_TCP_CUBIC=y
    
  • 重启系统确认新内核正常运行后,重新执行bpftool struct_ops register bpf_cubic.o命令。

内容的提问来源于stack exchange,提问作者theseeker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 15:37:14