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