我可以在eBPF中使用vmlinux.h和不支持BTF的Linux内核吗?

eoxn13cs  于 2023-08-03  发布在  Linux
关注(0)|答案(1)|浏览(337)

我必须在不支持BTF的Linux内核上执行eBPF(linux 4.X)。
我必须经常访问eBPF中的内核结构。
如果没有vmlinux.h,我必须获取每个结构元素的内存偏移量。这将花费巨大的努力。
我可以在eBPF程序中使用vmlinux.h头文件吗?

7gs2gvoe

7gs2gvoe1#

我可以在eBPF程序中使用vmlinux.h头文件吗?
是的。vmlinux.h本质上是BTF的翻译版本,通常随较新的内核一起提供。您可以使用一个名为pahole的工具为通常不随附的内核生成BTF。BTFHub项目还包括一个为大多数常用发行版预先生成的BTF文件的加载,您也许可以使用其中的一个。
一旦您有了内核的BTF blob,就可以使用以下命令从中生成vmlinux.h:

$ bpftool btf dump file {path to file} format c > vmlinux.h

字符串
尽管如此,您也可以使用基于内核的vmlinux.h,并使用CO:RE重新计算正确的偏移量。如果目标没有随vmlinux一起提供,加载器也可以使用相同的BTFhub blob来替换。这是该项目的最初目的。

相关问题