Enable BTF headers for Linux kernel
v2 cover Enable BTF headers for Linux kernel
From: Francis Laniel <[email protected]>
Hi.
First of all, I hope you are fine and the same for your relatives.
Extended Berkeley Packet Filter (eBPF) is a virtual machine inside the kernel which permits executing safe code [1].
This code can, for example, be used to hook kernel events.
BPF Compile Once - Run Everywhere (BPF CO-RE) is thought as an evolution of conventional BPF program [2].
BPF CO-RE relies on BPF Type Format (BTF) to be executed on different kernels. This is done thanks to libbpf, the BPF loader, which resolves symbols contained into the BPF binary against symbols offered by the kernel.
Kernel shares its BTF symbols through /sys/kernel/btf/vmlinux which is enabled by CONFIG_DEBUG_INFO_BTF.
Nonetheless, CONFIG_DEBUG_INFO_BTF relies on pahole to convert DWARF symbols to BTF [3].
Thus, this series enable BTF headers for Linux kernel by:
1. First, adding pahole as host package by compiling it from source taken from its git repository.
2. Second, adding pahole as kernel dependencies if user selected BR2_PACKAGE_HOST_PAHOLE.
I understand Buildroot and BPF can seem to be far from each other at first glance.
But Buildroot, while mainly used to generate embedded Linux systems, is also used to generate "qemu ready" image [4].
More particularly, minikube, a tool used to deploy Kubernetes locally, relies on buildroot to generate its system image [5, 6].
I use minikube daily to test a tool we develop for Kubernetes and I wrote a patch to enable CONFIG_DEBUG_INFO_BTF [7, 8].
Thus, I thought it could be a good idea to share this patch upstream as this feature would be welcomed by the community [9].
Regarding the series itself, I tested it by compiling a system for qemu_x86_defconfig with BR2_LINUX_KERNEL_NEEDS_HOST_PAHOLE.
Then, I booted the system using qemu to check if /sys/kernel/btf/vmlinux exists, which is the case:
Welcome to Buildroot
buildroot login: root
# [ -f /sys/kernel/btf/vmlinux ] && echo yes
yes
If you have any remarks regarding this series, feel free to share as I would be happy to handle them to increase this contribution quality.
Changes since v1:
* Added pahole COPYING hash.
* Jumped pahole version from v1.22 to v1.23.
* Added host-elfutils as host-pahole dependencies (it does not build without).
* Built dynamically libppf for pahole instead of statically.
* Added BR2_LINUX_KERNEL_NEEDS_HOST_PAHOLE which acts like BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF. If CONFIG_DEBUG_INFO_BTF is set and this option not, kernel .config will not be written and an error will be printed.
Francis Laniel (2):
package/pahole: new host package
linux: add BR2_LINUX_KERNEL_NEEDS_HOST_PAHOLE
DEVELOPERS | 3 +++ linux/Config.in | 12 ++++++++++++ linux/linux.mk | 12 ++++++++++++ package/Config.in.host | 1 + package/pahole/Config.in.host | 8 ++++++++ package/pahole/pahole.hash | 3 +++ package/pahole/pahole.mk | 18 ++++++++++++++++++ 7 files changed, 57 insertions(+) create mode 100644 package/pahole/Config.in.host create mode 100644 package/pahole/pahole.hash create mode 100644 package/pahole/pahole.mk
Best regards and thank you in advance for your reviews.
---
[1] https://man7.org/linux/man-pages/man2/bpf.2.html
[2] https://nakryiko.com/posts/bpf-portability-and-co-re/
[3] https://elixir.bootlin.com/linux/v5.15.10/source/lib/Kconfig.debug#L315
[4] https://petermalmgren.com/qemu-buildroot/
[5] https://github.com/kubernetes/minikube
[6] https://github.com/kubernetes/minikube/blob/7dc8836303721c4486c007945beb5272cf28601c/deploy/iso/minikube-iso/configs/minikube_defconfig
[7] https://github.com/kinvolk/inspektor-gadget
[8] https://github.com/kinvolk/minikube/commit/44327414939f8acc08e095e789bc41f7dc73099e
[9] https://github.com/kubernetes/minikube/pull/12707#issuecomment-986990849
--
2.30.2
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot
PATCH v2 1/2 package/pahole: new host package
pahole is a tool used to show data structure embedded in debugging information formats like DWARF.
It is notably needed by the Linux kernel to generate BPF Type Format (BTF) information used by Compile Once - Run Everywhere (CO-RE) BPF tools.
To be built, pahole needs __LIB to be set to lib at stated in its README.
--- DEVELOPERS | 3 +++ package/Config.in.host | 1 + package/pahole/Config.in.host | 6 ++++++ package/pahole/pahole.hash | 3 +++ package/pahole/pahole.mk | 18 ++++++++++++++++++ 5 files changed, 31 insertions(+) create mode 100644 package/pahole/Config.in.host create mode 100644 package/pahole/pahole.hash create mode 100644 package/pahole/pahole.mk
DEVELOPERS +3 -0
@@ -939,6 +939,9 @@ N: Floris Bos <[email protected]> F: package/ipmitool/ F: package/odhcploc/ +N: Francis Laniel <[email protected]> +F: package/pahole/ + N: Francisco Gonzalez <[email protected]> F: package/ser2net/
package/Config.in.host +1 -0
@@ -60,6 +60,7 @@ menu "Host utilities" source "package/omap-u-boot-utils/Config.in.host" source "package/openocd/Config.in.host" source "package/opkg-utils/Config.in.host" + source "package/pahole/Config.in.host" source "package/parted/Config.in.host" source "package/patchelf/Config.in.host" source "package/pigz/Config.in.host"
package/pahole/Config.in.host new file +6 -0
@@ -0,0 +1,6 @@ +config BR2_PACKAGE_HOST_PAHOLE + bool "host pahole" + help + Pahole and other DWARF utils. + + https://git.kernel.org/pub/scm/devel/pahole/pahole.git
package/pahole/pahole.hash new file +3 -0
@@ -0,0 +1,3 @@ +# Locally computed +sha256 cde85af68b368f50a913be387f94f6b43612a04af6c92387b4dcabb712a668fe pahole-v1.23-br1.tar.gz +sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 COPYING
package/pahole/pahole.mk new file +18 -0
@@ -0,0 +1,18 @@ +######################################################################## +# +# pahole +# +######################################################################## + +PAHOLE_VERSION = v1.23 +PAHOLE_SITE = git://git.kernel.org/pub/scm/devel/pahole/pahole.git +PAHOLE_SITE_METHOD = git +# pahole contains git submodule and relies on them to be built. +PAHOLE_GIT_SUBMODULES = YES +HOST_PAHOLE_DEPENDENCIES = host-elfutils +# Defining __LIB is needed to build pahole. +HOST_PAHOLE_CONF_OPTS = -D__LIB=lib +PAHOLE_LICENSE = GPL-2.0 +PAHOLE_LICENSE_FILES = COPYING + +$(eval $(host-cmake-package))
Signature · 6 lines
2.30.2 _______________________________________________ buildroot mailing list [email protected] https://lists.buildroot.org/mailman/listinfo/buildroot
Thomas Petazzoni
AppliedRe: [Buildroot] [PATCH v2 1/2] package/pahole: new host package
Quoted 8 lines · On Wed, 22 Dec 2021 18:49:04 +0100 Francis Laniel…
pahole is a tool used to show data structure embedded in debugging information formats like DWARF.
It is notably needed by the Linux kernel to generate BPF Type Format (BTF) information used by Compile Once - Run Everywhere (CO-RE) BPF tools.To be built, pahole needs
__LIBto be set to lib at stated in its README.Signed-off-by Francis Laniel <[email protected]>
Quoted 10 lines
--- DEVELOPERS | 3 +++ package/Config.in.host | 1 + package/pahole/Config.in.host | 6 ++++++ package/pahole/pahole.hash | 3 +++ package/pahole/pahole.mk | 18 ++++++++++++++++++ 5 files changed, 31 insertions(+) create mode 100644 package/pahole/Config.in.host create mode 100644 package/pahole/pahole.hash create mode 100644 package/pahole/pahole.mk
Applied to master with some minor formatting tweaks reported by "make check-package". Thanks a lot!
Thomas
Signature · 7 lines
Thomas Petazzoni, CTO, Bootlin Embedded Linux and Kernel engineering https://bootlin.com _______________________________________________ buildroot mailing list [email protected] https://lists.buildroot.org/mailman/listinfo/buildroot
PATCH v2 2/2 linux: add BR2_LINUX_KERNEL_NEEDS_HOST_PAHOLE
In reply to Francis LanielCONFIG_DEBUG_BTF_INFO relies on pahole, so kernel DWARF are converted to BTF. If CONFIG_DEBUG_BTF_INFO is set and BR2_LINUX_KERNEL_NEEDS_HOST_PAHOLE not, an error message is shown and .config is not written.
--- linux/Config.in | 12 ++++++++++++ linux/linux.mk | 12 ++++++++++++ package/pahole/Config.in.host | 2 ++ 3 files changed, 26 insertions(+)
linux/Config.in +12 -0
@@ -470,6 +470,18 @@ config BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF CONFIG_UNWINDER_ORC=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel". +config BR2_LINUX_KERNEL_NEEDS_HOST_PAHOLE + bool "Needs host pahole" + help + Some Linux kernel configuration options (such as + CONFIG_DEBUG_INFO_BTF) require building a host + program called pahole. Enabling this option will ensure + host-pahole gets built before the Linux kernel. + + Enable this option if you get a Linux kernel build failure + such as "BTF: .tmp_vmlinux.btf: pahole (pahole) is not + available". + # Linux extensions source "linux/Config.ext.in"
linux/linux.mk +12 -0
@@ -114,6 +114,17 @@ ifeq ($(BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF),y) LINUX_DEPENDENCIES += host-elfutils host-pkgconf endif +ifeq ($(BR2_LINUX_KERNEL_NEEDS_HOST_PAHOLE),y) +LINUX_DEPENDENCIES += host-pahole +else +define LINUX_FIXUP_CONFIG_PAHOLE_CHECK + if grep -q "^CONFIG_DEBUG_INFO_BTF=y" $(KCONFIG_DOT_CONFIG); then \ + echo "To use CONFIG_DEBUG_INFO_BTF, enable host-pahole (BR2_LINUX_KERNEL_NEEDS_HOST_PAHOLE)" 1>&2; \ + exit 1; \ + fi +endef +endif + # If host-uboot-tools is selected by the user, assume it is needed to # create a custom image ifeq ($(BR2_PACKAGE_HOST_UBOOT_TOOLS),y)
@@ -324,6 +335,7 @@ define LINUX_KCONFIG_FIXUP_CMDS $(call KCONFIG_DISABLE_OPT,$(opt)) ) $(LINUX_FIXUP_CONFIG_ENDIANNESS) + $(LINUX_FIXUP_CONFIG_PAHOLE_CHECK) $(if $(BR2_arm)$(BR2_armeb), $(call KCONFIG_ENABLE_OPT,CONFIG_AEABI)) $(if $(BR2_powerpc)$(BR2_powerpc64)$(BR2_powerpc64le),
package/pahole/Config.in.host +2 -0
@@ -3,4 +3,6 @@ config BR2_PACKAGE_HOST_PAHOLE help Pahole and other DWARF utils. + Select this if you want to build a kernel with CONFIG_DEBUG_INFO_BTF set. + https://git.kernel.org/pub/scm/devel/pahole/pahole.git
Signature · 6 lines
2.30.2 _______________________________________________ buildroot mailing list [email protected] https://lists.buildroot.org/mailman/listinfo/buildroot
Thomas Petazzoni
AppliedRe: [Buildroot] [PATCH v2 2/2] linux: add BR2_LINUX_KERNEL_NEEDS_HOST_PAHOLE
Hello,
Quoted 5 lines · On Wed, 22 Dec 2021 18:49:05 +0100 Francis Laniel…
CONFIG_DEBUG_BTF_INFOrelies on pahole, so kernel DWARF are converted to BTF. IfCONFIG_DEBUG_BTF_INFOis set andBR2_LINUX_KERNEL_NEEDS_HOST_PAHOLEnot, an error message is shown and .config is not written.Signed-off-by Francis Laniel <[email protected]>
Thanks, applied, with one change.
package/pahole/Config.in.host config BR2_PACKAGE_HOST_PAHOLE · line 7
Quoted 10 lines
package/pahole/Config.in.host +2
-0@@ -3,4 +3,6 @@ config BR2_PACKAGE_HOST_PAHOLE help Pahole and other DWARF utils. + Select this if you want to build a kernel with CONFIG_DEBUG_INFO_BTF set. +
I've dropped this, because it's not really this option that should be enabled if the kernel is configured with CONFIG_DEBUG_INFO_BTF, but the BR2_LINUX_KERNEL_NEEDS_HOST_PAHOLE option.
Thanks for your contribution!
Best regards,
Thomas
Signature · 7 lines
Thomas Petazzoni, co-owner and CEO, Bootlin Embedded Linux and Kernel engineering and training https://bootlin.com _______________________________________________ buildroot mailing list [email protected] https://lists.buildroot.org/mailman/listinfo/buildroot
Re: [Buildroot] [PATCH v2 2/2] linux: add BR2_LINUX_KERNEL_NEEDS_HOST_PAHOLE
Hi.
Quoted 22 lines · Le jeudi 13 janvier 2022, 22:41:26 CET Thomas Petazzoni a écrit :
Hello,
On Wed, 22 Dec 2021 18:49:05 +0100
Quoted 6 lines · Francis Laniel
CONFIG_DEBUG_BTF_INFOrelies on pahole, so kernel DWARF are converted to BTF. IfCONFIG_DEBUG_BTF_INFOis set andBR2_LINUX_KERNEL_NEEDS_HOST_PAHOLEnot, an error message is shown and .config is not written.Signed-off-by Francis Laniel <[email protected]>Thanks, applied, with one change.
Quoted 8 lines
package/pahole/Config.in.host +0
-0@@ -3,4 +3,6 @@ config BR2_PACKAGE_HOST_PAHOLE help
Quoted 8 lines
Quoted 4 lines
package/pahole/Config.in.host +1
-0Pahole and other DWARF utils. + Select this if you want to build a kernel with CONFIG_DEBUG_INFO_BTFset. +
I've dropped this, because it's not really this option that should be enabled if the kernel is configured with
CONFIG_DEBUG_INFO_BTF, but theBR2_LINUX_KERNEL_NEEDS_HOST_PAHOLEoption.
Your modification made the thing clearer, thank you for it!
Quoted 1 line
Thanks for your contribution!
You are welcome! I thank you for the merge!
Quoted 1 line
Best regards,
Best regards.
Quoted 1 line
Thomas
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot