Re: [OE-core] [PATCH v5 00/15] Enable rust support for linux kernel

Harish Sadineni
2026-02-12T18:13:56Z

On 2/4/2026 5:54 PM, Paul Barker wrote:
> On Wed, 2026-02-04 at 12:00 +0000, Paul Barker wrote:
>> On Thu, 2026-01-29 at 08:38 -0800, Sadineni, Harish via
>> lists.openembedded.org wrote:
>>> From: Harish Sadineni <Harish.Sadineni@windriver.com>
>>>
>>> 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: Export artifacts needed for out-of-tree Rust compilation
>>> - patch 12: Prepare out-of-tree rust module compilation
>>> - patch 13: Added rust-out-of-tree-module recipe in meta-skeleton layer
>>> - Patch 14: Fixed buildpaths errors for rust-out-of-tree-module recipe by appending --remap-path-prefix to RUST_DEBUG_REMAP
>>> - patch 15: 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 |
>>> +-------------------------------+------------+-----------+-----------+-----------+
>> We discussed these patches on Monday and have some feedback on the
>> design. Things are nearly correct, we do want to ensure that the user
>> experience is good before merging this though as people will quickly
>> start to depend on it.
>>
>> We think it would be better if Rust support was controlled by
>> KERNEL_FEATURES instead of DISTRO_FEATURES. This option now only impacts
>> the kernel and any kernel module recipes. It also may need to change
>> depending on MACHINE which makes it not a good fit for DISTRO_FEATURES -
>> e.g. one BSP may use an older LTS kernel with no required Rust code and
>> a different BSP may use a newer kernel and need a driver written in Rust
>> for the board to function.
>>
>> We should add a new module-rust.bbclass instead of extending
>> module.bbclass with conditional logic. This can be included by any
>> modules which use Rust and handle any common setup. It can also check
>> for the presence of required files (scripts/target.json & rust/*) in the
>> kernel's shared workdir, and perhaps the kernel config so that we can
>> give a sensible error message if they are missing. This means that
>> module-rust.bbclass doesn't need to check KERNEL_FEATURES for
>> rust-kernel, it can just look at the shared workdir (probably in
>> do_configure) to make sure that we're ready to build a Rust module.
> After I sent this, I spotted a patch for module.bbclass to check that
> CONFIG_MODULES is enabled [1]. Doing the same thing in a new
> module-rust.bbclass to check for CONFIG_RUST may be exactly what we
> need.
>
> [1]: https://lore.kernel.org/openembedded-core/20260204020908.864912-1-kai.kang@windriver.com/T/#u

Hi Paul,

I have incorporated the suggested changes and sent v6 of the series.

Thanks,
Harish

>> If we can't use KERNEL_FEATURES, then perhaps a new KERNEL_RUST_SUPPORT
>> variable would work. In either case, this should only be checked in the
>> kernel recipe itself.
>>
>> Bruce - what do you think about KERNEL_FEATURES being used in this way?
>>
>> Best regards,
>>