[SRU][R][PATCH v2 0/1] Enable BTF generation for out-of-tree module builds

Jacob Martin jacob.martin at canonical.com
Thu Mar 26 14:18:12 UTC 2026


BugLink: https://bugs.launchpad.net/bugs/2133794

[Impact]

When building out-of-tree kernel modules (via DKMS or manual module
build), BTF (BPF Type Format) generation is skipped due to a vmlinux not
being found in the expected location. This prevents BPF-based tracing
tools (bpftrace, BCC) from attaching kprobes/kfuncs to out-of-tree
module functions.

[Fix]

The patch "UBUNTU: [Packaging] add stripped-down vmlinux with only BTF
sections to flavour headers package" resolves this issue by including a
stripped-down version of the vmlinux with only .BTF and .BTF_ids
sections at /usr/src/linux-headers-7.0.0-xx-generic/vmlinux in the
linux-headers-7.0.0-xx-<flavour> packages.

This solution matches the one in Debian by Bastian Blank:
https://salsa.debian.org/kernel-team/linux/-/commit/0dedced119aea5426f81a9318c36e0a6c7339547.

[Test Plan]

Verify that BTF generation succeeds:

1. Install headers for the target kernel.

$ sudo apt install linux-headers-7.0.0-xx-generic

2. Obtain sources for a test kernel module.

$ git clone https://github.com/ivbakula/hello-world-kernel-module

3. Build this kernel module.

make -C /lib/modules/7.0.0-xx-generic/build M=hello-world-kernel-module modules

4. Verify BTF generation is successful.

$ objdump --section=.BTF -s ~/hello-world-kernel-module/hello.ko

/root/hello-world-kernel-module/hello.ko: file format elf64-x86-64

Contents of section .BTF:
 0000 9feb0100 18000000 00000000 60000000 ............`...
 0010 60000000 16000000 00000000 0000000a `...............
 0020 02000000 00000000 00000003 00000000 ................
 0030 03000000 01000000 05000000 00000000 ................
 0040 0000000a 04000000 15000000 0000000c ................
 0050 09000000 20000000 0000000c 08000000 .... ...........
 0060 00000000 0000000d 01000000 00000000 ................
 0070 0000000d 00000000 68656c6c 6f5f6578 ........hello_ex
 0080 69740068 656c6c6f 5f696e69 7400 it.hello_init.

Note: if BTF generation is unsuccessful, the output will appear as:

$ objdump --section=.BTF -s hello.nobtf.ko

hello.nobtf.ko: file format elf64-x86-64

objdump: section '.BTF' mentioned in a -j option, but not found in any input file

[Where issues could occur]

This modifies the flavour-specific header package to include a
stripped-down vmlinux with only .BTF and .BTF_ids sections. Issues could
occur if software on the system assumes vmlinux at this path will be a
full vmlinux, but finds the version with only .BTF and .BTF_ids
sections. As a vmlinux file was not included in the headers at all
before, it is unlikely existing functionality was relying on it.

[Other notes]

Changed in v2: Rather than rely on the dbgsyms package being installed,
provide a stripped-down vmlinux file in the headers package, with only
.BTF and .BTF_ids sections.

Jacob Martin (1):
  UBUNTU: [Packaging] add stripped-down vmlinux with only BTF
    sections to flavour headers package

 debian/rules.d/2-binary-arch.mk | 8 ++++++++
 1 file changed, 8 insertions(+)

-- 
2.43.0




More information about the kernel-team mailing list