The Linux kernel has been gaining Rust support since version 6.1, with more
subsystems and drivers being written in Rust alongside traditional C code.
In the near future, practically useful drivers and subsystems for Armbian users
are expected to require or benefit from Rust kernel support. Enabling
CONFIG_RUST in the kernel build unlocks this capability.
Without this extension, Armbian kernels are built without Rust support —
the toolchain is not installed and CONFIG_RUST does not appear in
menuconfig. This extension installs a pinned Rust toolchain via rustup,
enables CONFIG_RUST automatically, and configures all required build
parameters so that Rust kernel modules can be compiled alongside C code.
The toolchain versions and other aspects of the build can be adjusted via
parameters passed to the build system.
Distribution-provided Rust packages currently cannot fully satisfy all the
requirements for enabling Rust in a recent kernel. Mixing some components
from the distro with others from external sources is fragile and not
worthwhile. For this reason the extension downloads a complete, version-pinned
toolchain via rustup independently of the host distro.
When the base distro used by the Armbian build system provides packages sufficient to build the Rust environment for the latest kernels entirely from distro sources, Armbian will likely switch to using them.
./compile.sh BOARD=<board> BRANCH=<branch> ENABLE_EXTENSIONS="kernel-rust"To open menuconfig with Rust options visible:
./compile.sh kernel-config BOARD=<board> BRANCH=<branch> ENABLE_EXTENSIONS="kernel-rust"To enable permanently from a userconfig file:
enable_extension "kernel-rust"- Kernel version: 6.12 or newer. The minimum required rustc version depends on the kernel release; see the Rust-for-Linux version policy.
- Host package:
libclang-dev— installed automatically by the extension. - Build host architecture: x86_64, aarch64, or riscv64.
- Internet access on first use (downloads rustup-init and toolchain components).
| Variable | Default | Description |
|---|---|---|
RUST_VERSION |
1.85.0 |
rustc version installed via rustup. |
BINDGEN_VERSION |
0.71.1 |
bindgen-cli version installed via cargo. |
RUST_KERNEL_SAMPLES |
no |
Set to yes to build sample Rust kernel modules (rust_minimal, rust_print, rust_driver_faux) as loadable modules. Useful for smoke-testing the toolchain. |
RUST_EXTRA_COMPONENTS |
(empty array) | Additional rustup components to install (e.g. clippy, llvm-tools). |
RUST_EXTRA_CARGO_CRATES |
(empty array) | Additional cargo crates to install. Supports name or name@version syntax. |
The toolchain is installed once into ${SRC}/cache/tools/rustup/ and reused
across builds. The cache is content-addressed by a hash of:
RUST_VERSIONBINDGEN_VERSION- build host architecture
RUST_EXTRA_COMPONENTSRUST_EXTRA_CARGO_CRATES
Changing any of these values invalidates the cache and triggers a full reinstall
on the next build. The marker file is .marker-<hash> inside the cache directory.
Other extensions can request additional toolchain components or crates before the toolchain is installed:
# In your extension file:
RUST_EXTRA_COMPONENTS+=("clippy" "llvm-tools")
RUST_EXTRA_CARGO_CRATES+=("mdbook" "cargo-deb@2.11.0")The extension adds a short hash of RUST_VERSION|BINDGEN_VERSION to the kernel
artifact version string (key _R, e.g. rust1a2b). This ensures that changing
toolchain versions triggers a kernel rebuild even if the kernel source is
unchanged.
The kernel build runs under env -i, which clears the entire environment.
The extension passes Rust tool paths directly as make parameters
(RUSTC=, RUSTFMT=, BINDGEN=) and sets RUST_LIB_SRC via the make
environment array. Direct paths into the toolchain sysroot are used instead
of rustup proxy binaries, so RUSTUP_HOME does not need to be in the
cleared environment.
ccache does not support rustc (upstream won't-fix since 2019). The kernel
build system has no RUSTC_WRAPPER mechanism, so Rust compilation is not
cached by ccache. Only C/assembly compilation benefits from ccache when this
extension is active.