[PATCH v7 00/14] Enable rust support for linux kernel

Harish.Sadineni
2026-03-04T17:44:18Z

From: Harish Sadineni <Harish.Sadineni@windriver.com>

v7:
- The rust support in kernel runtime selftest intermittently fails on autobuilder armhost/qemuarm64
because qemu.run_serial(modprobe <module_name>) occasionally returns incorrect status even when the
module loads successfully. Since the test already validates module loading via dmesg, Disabled
status assertion check to avoid flakiness.
Bug Report: https://bugzilla.yoctoproject.org/show_bug.cgi?id=16189

v6:
- rust-kernel support is now can be managed with a dedicated KERNEL_RUST_SUPPORT variable instead
of DISTRO_FEATURES. Kernel rust support changes are now moved to new classes kernel-yocto-rust.bbclass
& module-rust.bbclass for ease of maintenance.
- Dropped patch "kernel.bbclass: Export artifacts needed for out-of-tree Rust compilation"
- Extended disabling of cache to make-mod-scripts as well.

v5:
- Regression in autobuilder with v4 series is due to applying v4 series together with following patch
"llvm: enable LLVMgold.so build by adding binutils dependency"(https://lists.openembedded.org/g/openembedded-core/message/229387)
is fixed by droping Alistair Francis's patch(https://lists.openembedded.org/g/openembedded-core/message/229091).
- Updated patch "rust: install Rust library sources for 'make rustavailable' support" to install
rust standard library sources for rust-native.

v4:
- Resolved patchtest failures.

v3:
- Removed the DISTRO_FEATURES dependency for installing Rust library sources in the Rust recipe,
- Extended support for on target rust kernel module developmet by installing Rust library sources and
introduced packaging of the Rust standard library sources in a dedicated ${PN}-src-lib package.
- Integrated Alistair Francis's patch(https://lists.openembedded.org/g/openembedded-core/message/229091)
that uses the Rust bootstrap tool to install Rust library sources for rust-native.
- Dropped the patch that added rust-kernel to native/nativesdk feature filters in bitbake.conf.
- Updated flags in the make-mod-scripts recipe to fix build failures when building Rust out-of-tree
module recipes.
- Dropped the bindgen-cli patch extending BBCLASSEXTEND to include
nativesdk, as it has been merged into oe-core.

v2:
- Combined [PATCH 05/16][0] & [PATCH 06/16][1] from v1.
- Updated commit message and added in code comments for patch "[PATCH 09/15] kernel-devsrc: copying
rust-kernel source to $kerneldir/build"

[0] https://lists.openembedded.org/g/openembedded-core/message/228559
[1] https://lists.openembedded.org/g/openembedded-core/message/228560

v1:
The previous series was RFC v4, "Enable Rust support for Linux kernel"
(https://lists.openembedded.org/g/openembedded-core/message/226623).

In addition, Yoann Congal posted RFC v2, "Kernel Rust out-of-tree module support"
(https://lists.openembedded.org/g/openembedded-core/message/227281), which builds on top of RFC v4.

The current patch series is a unified version that combines both efforts.
Compared to the earlier series, the main changes are:

-Kernel configuration fragments have been moved to yocto-kernel-cache.
-The kernel fragments have been removed from SRC_URI and from the files
directory previously stored underrecipes-kernel/linux/files.
-Updated the "[PATCH 11/16] selftest/cases/runtime_test: Add test for Linux Rust sample"
by appending KERNEL_EXTRA_FEATURES:append = 'features/kernel-sample/kernel-rust-sample.scc'
instead of adding this directly in the linux-yocto recipe.

This patch series introduces Rust support into the linux-yocto kernel recipe and
related build infrastructure in the Yocto Project. The goal is to enable building
the Linux kernel with Rust components and provide support for building kernel module
which is written in rust and also provide support to build rust kernel modules in sdk.

And this series adds test for Linux Rust sample and also added support
for out-of-tree kernel module written in Rust as well as associated test.

Summary of patches:

- Patch 01: Add required dependencies ('clang-native', 'rust-native','bindgen-cli-native') to the kernel to support Rust binding generation.
- Patch 02: Install the Rust standard library source ('library/') for native,target and sdk.
- Patch 03: Updated `kernel-yocto.bbclass` to invoke `make rustavailable` during 'do_kernel_configme', ensuring Rust readiness.
- Patch 04: Add kernel configuration support for Rust (via 'kernel-rust.scc'), enabling the Rust build options in kernel config.
- Patch 05: Fixed buildpaths errors when rust is enabled for kernel by appending --remap-path-prefix to RUST_DEBUG_REMAP
- Patch 06: split `HOSTCC` flag to align with to linux-yocto and fix build issue with make-mod-scripts recipe.
- Patch 07: Disabling ccache when rust-kernel is enabled for linux-yocto.
- Patch 08: Copy Rust kernel sources into kernel-devsrc build directory which will be required while running 'make prepare' in sdk.
- Patch 09: Added oe-selftest case for the Linux Rust sample.
- patch 10: Copying include/config/auto.conf in STAGING_KERNEL_BUILDDIR
- patch 11: Add support for rust-out-of-tree module compilation
- patch 12: Added rust-out-of-tree-module recipe in meta-skeleton layer
- Patch 13: Fixed buildpaths errors for rust-out-of-tree-module recipe by appending --remap-path-prefix to RUST_DEBUG_REMAP
- patch 14: Added rust-out-of-tree selftest

Patches have been build-tested successfully on:
- qemuarm64
- qemux86-64

Benchmark test-result for x86-64:
+-------------------------------+------------+-----------+-----------+-----------+
| DISTRO_FEATURES | real | user | sys | FS usage |
+-------------------------------+------------+-----------+-----------+-----------+
| rust-kernel (enabled) | 46m1.720s | 0m28.864s | 0m3.696s | 58 GB |
| rust-kernel (disabled) | 30m1.053s | 0m20.091s | 0m2.748s | 33 GB |
+-------------------------------+------------+-----------+-----------+-----------+

The increased in time & fs is due to kernel rust dependencies in
linux-yocto.

Harish Sadineni (10):
linux-yocto: conditionally add clang/rust/bindgen-cli-native to
DEPENDS
rust: install Rust library sources for 'make rustavailable' support
kernel-yocto-rust: enable Rust kernel support via 'make
rustavailable'.
linux-yocto: enable Rust support in kernel configuration
kernel-yocto-rust: Fix for buildpaths errors when rust is enabled for
kernel
make-mod-scripts: split `HOSTCC` flag to align with to linux-yocto
kernel: Disable ccache when kernel rust support is enabled
kernel-devsrc: copying rust-kernel source to $kerneldir/build
module-rust.bbclass: Prepare out-of-tree rust module compilation
make-mod-scripts: fix for buildpath issues with rust-out-of-tree
compilation

Yoann Congal (4):
selftest/cases/runtime_test: Add test for Linux Rust sample
kernel.bbclass: Copy include/config/auto.conf in
STAGING_KERNEL_BUILDDIR
meta-skeleton: Add rust-out-of-tree-module recipe
runtime_test: Add rust-out-of-tree selftest

.../rust-out-of-tree-module_git.bb | 17 ++++++++
meta/classes-recipe/kernel-yocto-rust.bbclass | 25 +++++++++++
meta/classes-recipe/kernel-yocto.bbclass | 2 +
meta/classes-recipe/kernel.bbclass | 1 +
meta/classes-recipe/module-rust.bbclass | 21 ++++++++++
meta/lib/oeqa/selftest/cases/runtime_test.py | 41 +++++++++++++++++++
meta/recipes-devtools/rust/rust_1.93.0.bb | 19 ++++++++-
meta/recipes-kernel/linux/kernel-devsrc.bb | 9 ++++
meta/recipes-kernel/linux/linux-yocto.inc | 3 ++
meta/recipes-kernel/linux/linux-yocto_6.18.bb | 1 +
.../make-mod-scripts/make-mod-scripts_1.0.bb | 16 +++++++-
11 files changed, 153 insertions(+), 2 deletions(-)
create mode 100644 meta-skeleton/recipes-kernel/rust-out-of-tree-module/rust-out-of-tree-module_git.bb
create mode 100644 meta/classes-recipe/kernel-yocto-rust.bbclass
create mode 100644 meta/classes-recipe/module-rust.bbclass

--
2.49.0