10월 6일 기준, Rust for Linux는 linux-next에 있으며 stable이 아닙니다.
따라서 이 글은 Linux 6.1 stable이 나오기 전에 구식이 될 수 있습니다.
현재 Linux 6.1 rc1에는 ARM64용 Rust for Linux가 포함되어 있지 않습니다. 따라서 이 글에서는 https://github.com/Rust-for-Linux/linux/tree/for-next/rust 를 사용합니다.

소개#
이 글에서는 x86_64 debian 환경에서 Rust for Linux를 크로스 컴파일하는 방법을 설명합니다. Apple Silicon을 제외하면 아직 arm64 네이티브 커널을 빌드할 만한 충분한 컴퓨팅 파워가 없습니다.
참고로 이 글은 다음 링크를 참고하여 작성되었습니다.
- https://github.com/Rust-for-Linux/linux/blob/rust/Documentation/rust/quick-start.rst
- https://docs.kernel.org/kbuild/llvm.html#cross-compiling
Debian / Ubuntu 패키지 요구사항#
# Install build-requirements for kernel compile with LLVM.
# Biggest difference to native build is
# crossbuild-essential-arm64 needed to build` for arm64
apt install clang git llvm-dev libclang-dev build-essential \
bc kmod cpio flex libncurses5-dev libelf-dev libssl-dev \
dwarves bison lld curl crossbuild-essential-arm64커널 빌드 전에 필요한 패키지를 설치해야 합니다.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustup default 1.62
rustup component add rust-src
# rustfmt and clippy is need for later developing and debugging.
rustup component add rustfmt
rustup component add clippycurl로 Rust를 설치합니다. 기본 옵션을 선택하면 됩니다. 또한 현재 Rust for Linux는 1.62 버전에서 동작합니다. 최신 버전(1.64 테스트 완료)에서도 네이티브 컴파일은 잘 동작하지만, 크로스 컴파일은 동작하지 않습니다.
Arch 패키지 요구사항#
- TBD
Rust-For-Linux에서 Linux 클론하기#

# In my case use `Develop` as worksapce, you can replace this word.
mkdir -p ~/Develop
cd ~/Develop
git clone https://github.com/Rust-for-Linux/linux.git -b rust위와 같이 클론합니다.
Rust-For-Linux에 필요한 Rust 스크립트#
클론한 Linux 디렉토리에서 실행합니다.
git clone --recurse-submodules \
--branch $(scripts/min-tool-version.sh rustc) \
https://github.com/rust-lang/rust \
$(rustc --print sysroot)/lib/rustlib/src/rust이 작업은 rustlib 저장소를 Rust 툴체인 디렉토리에 클론합니다.
cargo install --locked --version $(scripts/min-tool-version.sh bindgen) bindgen이 작업은 기존 C 코드를 Rust 코드에 바인딩하기 위해 필요합니다.
RUST_AVAILABLE 확인#
cd ~/Develop/linux
make LLVM=1 rustavailable$ make LLVM=1 rustavailable
***
*** Rust compiler 'rustc' is too new. This may or may not work.
*** Your version: 1.62.1
*** Expected version: 1.62.0
***
Rust is available!위와 같은 결과가 나오면 준비 완료입니다.
(1.62.1에서도 크로스 컴파일이 잘 되었지만, 최적의 호환을 위해서는 rustup default 1.62.0을 실행하세요.)
menuconfig로 Linux 소스코드 설정하기#
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfigGeneral setup -> Rust support#

General setup -> Rust support에서 이 옵션을 활성화합니다.
만약 해당 플래그가 보이지 않으면 make LLVM=1 rustavailable 과정이 성공적으로 완료되었는지 다시 확인하세요.
CONFIG_RUST see here.
See details ⇀Kernel hacking -> Sample kernel code#
Rust 커널 코드를 쉽게 개발하기 위해 예제가 필요합니다. 다음 메뉴에서 예제를 활성화할 수 있습니다.
![]() | ![]() |
Kernel hacking -> Sample kernel code에서 관심 있는 항목을 활성화합니다 (전부 다 활성화할 필요는 없습니다).
직접 드라이버를 작성할 때는 활성화하지 않는 것을 권장합니다. 시스템이 느려지거나 dmesg에 불필요한 로그가 남을 수 있기 때문입니다.
특히 netfilter 예제는 너무 많은 dmesg를 출력하므로, netfilter 예제를 공부하는 경우가 아니라면 비활성화하는 것을 권장합니다.
Kernel hacking -> Rust hacking#
Rust 커널 코드나 드라이버를 디버깅하려면 일부 디버그 옵션을 활성화해야 합니다.

Kernel hacking -> Rust hacking에서 해당 메뉴와 하위 메뉴를 활성화합니다.
크로스 컴파일#

# -j4 for 4 core virtual machine, -j2 for 2 core, -j1 for single core.
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- LLVM=1 -j32위 명령어로 빌드합니다. 가상 머신에 할당된 코어 수를 고려하여 job 수를 설정해야 합니다. (-j#)
빌드 중에 일부 플래그에 대해 질문이 나올 수 있습니다. 저는 기본값을 선택했습니다.
간단한 컴파일 속도 비교#
| 머신 / 환경 | 컴파일 시간 |
|---|---|
| M1 Max 가상 머신 (4코어 8GB RAM, aarch64 debian11) | 16분 |
| M1 Asahi Linux (4P+4E 코어 16GB RAM MacMini, 6.1.0-rc6-asahi) | 11분 |
| AMD Ryzen 5950x 네이티브 (16코어 32스레드, 64GB, x86_64) | 3분 |
| AMD Threadripper Pro 5975wx 네이티브 (32코어 64스레드, 256GB, x86_64) | 2분 |
크로스 컴파일된 커널을 arm64 가상 머신에 설치하기#
- TBD, 곧 업데이트 예정입니다.
크로스 컴파일된 커널을 라즈베리 파이에 설치하기#
- TBD, 곧 업데이트 예정입니다.


