如何使用dwarves pahole,从vmlinux文件生成vmlinux.h头文件?

vmlinux.h头文件对编写eBPF程序非常重要,但需要从vmlinux文件自行生成。那如何从vmlinux文件生成vmlinux.h头文件?

这个问题需要视乎dwarves中的版本号而定。

方法一:如果dwarves版本小于1.24,则需要pahole + bpftool。

命令行如下:

cp -a vmlinux vmlinux.btf
pahole -J vmlinux.btf
bpftool btf dump file vmlinux.btf format c > vmlinux.h

注意:该方法运行bpftool这个过程会非常非常慢,甚至可能几个小时都未必能运行成功;而且生成的vmlinux.h文件甚至可以达到超过200MB。建议使用方法二。

方法二:如果dwarves版本大于等于1.24,则只需要pahole。

在2022年8月发布的dwarves 1.24版本中,pahole增加了一个–compile选项,能直接从vmlinux生成vmlinux.h头文件[1]。

命令行如下:

./pahole --compile vmlinux > vmlinux.h

如果安装的linux发行版附带的dwarves小于1.24,建议自行编译一份1.24和以上版本的dwarves,然后用新版本的pahole运行方法二。

参考链接:

[1]https://github.com/acmel/dwarves/blob/master/changes-v1.24

本页永久链接:https://www.orztip.com/?p=770&article_title=generate-vmlinux-h-using-dwarves-pahole-bpftool