|
…
|
||
|---|---|---|
| .. | ||
| Makefile | ||
| README.md | ||
vmlinux-btf
An OpenWrt package that builds a BTF-enabled vmlinux in a shadow kernel tree and installs it as a standalone file, enabling CO-RE (Compile Once – Run Everywhere) eBPF programs to run on OpenWrt without tainting or modifying the main kernel build.
How It Works
- Downloads the upstream Linux kernel source that matches the current OpenWrt build environment.
- Extracts it into an isolated
shadow-kerneldirectory inside the build tree. - Applies the same generic and platform-specific patches that the main kernel receives, in the same order.
- Copies the main kernel's
.configas a baseline, then enables the full set of BTF and BPF-related options on top of it. - Compiles
vmlinuxwith full DWARF debug info. - Uses
paholeto extract a detached BTF blob from the resultingvmlinux. - Installs the blob to
/usr/lib/debug/boot/vmlinuxon the target device.
This approach keeps the main kernel tree completely untouched — BTF information is generated entirely in the shadow build.
Host Build Dependencies
The following tools must be present on the host machine running the OpenWrt build system before compiling this package.
Required by the OpenWrt build system itself
These are standard OpenWrt build prerequisites. If your environment already builds OpenWrt successfully, these should already be present.
| Tool | Purpose |
|---|---|
gcc / binutils |
Cross-compilation toolchain |
make |
Build orchestration |
xz-utils |
Decompression of kernel source tarball (xzcat) |
tar |
Extraction of kernel source |
bc |
Kernel version arithmetic during prepare |
flex, bison |
Kernel parser generation |
libssl-dev |
Kernel certificate handling |
libelf-dev |
ELF binary manipulation, required by kernel build |
python3 |
Kernel build scripts |
Install on Debian/Ubuntu:
sudo apt install build-essential libssl-dev libelf-dev \
bc flex bison python3 xz-utils tar
Install on Fedora/RHEL:
sudo dnf install gcc binutils openssl-devel elfutils-libelf-devel \
bc flex bison python3 xz tar
Required specifically by this package
dwarves (provides pahole)
pahole is used to extract the detached BTF blob from the compiled vmlinux. This is the only tool required by this package that is not a standard OpenWrt build dependency.
Install on Debian/Ubuntu:
sudo apt install dwarves
Install on Fedora/RHEL:
sudo dnf install dwarves
Note: A host
paholeversion of 1.16 or newer is required for--btf_encode_detachedsupport. The version bundled with the OpenWrtdwarves/hostfeed satisfies this requirement. If you installpaholemanually from your system package manager, verify the version withpahole --version.
Building
Add this package to your OpenWrt build configuration:
# From the OpenWrt build root
make menuconfig
# Navigate to: Kernel → vmlinux-btf
# Select with <M> or <*>
make package/vmlinux-btf/compile V=s
Or build the IPK directly:
make package/vmlinux-btf/{clean,compile} V=s
Installed Files
| Path | Description |
|---|---|
/usr/lib/debug/boot/vmlinux |
Detached BTF blob |
/usr/lib/debug/boot/vmlinux-<kernel-version> |
Symlink created by postinst |
The symlink is created at install time using the running kernel version (uname -r) and removed automatically on package removal.
Notes
- Build time is significant. This package compiles a complete kernel from source. Expect 20–60 minutes depending on your hardware and target architecture.
- Kernel version must match. The shadow kernel is built from the same source version as the OpenWrt target kernel (
$(LINUX_VERSION)). Installing this package on a device running a different kernel version will likely result in BTF type mismatches and broken CO-RE lookups. - Architecture-specific JIT support (
HAVE_EBPF_JIT) is set automatically by the kernel build system based on the target architecture and does not need to be configured manually.
License
GPL-3.0-or-later — see https://www.gnu.org/licenses/gpl-3.0.html