Libbpf:在内核空间查找固定于非默认路径的BPF映射
解决LIBBPF_PIN_BY_NAME自定义查找路径的问题
要让内核态BPF程序能找到你固定在/sys/fs/bpf/my_prog/request_map的哈希映射,有两种直接可行的方法:
方法1:通过libbpf API设置自定义pin根路径
在用户态加载BPF对象的代码中,调用bpf_object__set_pin_root_path()函数,将查找map的根目录指定为你的自定义路径。这样LIBBPF_PIN_BY_NAME就会在该目录下搜索目标map。
示例代码:
#include <bpf/libbpf.h> // ... 其他初始化代码 struct bpf_object *obj = bpf_object__open_file("your_bpf_program.o", NULL); if (!obj) { // 处理打开失败错误 return -1; } // 设置自定义pin根路径 int ret = bpf_object__set_pin_root_path(obj, "/sys/fs/bpf/my_prog"); if (ret != 0) { fprintf(stderr, "Failed to set pin root path: %d\n", ret); bpf_object__close(obj); return -1; } // 加载BPF对象 ret = bpf_object__load(obj); if (ret != 0) { fprintf(stderr, "Failed to load BPF object: %d\n", ret); bpf_object__close(obj); return -1; } // ... 后续的程序逻辑
方法2:通过环境变量指定全局pin路径
在运行用户态加载程序前,设置LIBBPF_PIN_PATH环境变量,libbpf会自动将该路径作为所有LIBBPF_PIN_BY_NAME类型map的查找根目录。
示例shell命令:
export LIBBPF_PIN_PATH=/sys/fs/bpf/my_prog ./your_user_space_loader_program
这两种方法都能让内核态的BPF map定义正确关联到你预先固定在自定义路径下的哈希映射,无需修改BPF程序中的map定义代码。
内容的提问来源于stack exchange,提问作者Akash Cherukuri
相关产品推荐
相关产品推荐

