Rust-for-Linuxの開発環境を用意する
Rust-for-Linuxの開発環境を構築する備忘録的な。基本的にはQuick Startに全て書いてあるが、ステップごとの確認方法などもこの記事では追記している。
なおこの記事ではArch Linux上で環境構築をしているためパッケージマネージャーにpacmanを使っている。他のディストリビューションやOS上で再現するには別のパッケージマネージャーに置き換えてほしい。
ソースコードをとってくる
当然まずRust-for-Linuxのソースコードをクローンする。
$ git clone git@github.com:Rust-for-Linux/linux.git
以降はこのソースコードのルートディレクトリで作業する。
ビルドに必要なもの
rustup
そもそもRustの環境をつくるのにrustupが必要。なければどこかしらからインストールする。
$ sudo pacman -S rustup
なおrustupを使わない方法もQuick Startには記載されている。この記事ではrustupを使っていく。
rustc
特定バージョンのrustcが必要。
$ rustup override set $(scripts/min-tool-version.sh rustc)
次で確認できる。rust-for-linuxのルートディレクトリが表示されたら成功している。
$ rustup override list
/home/foo/path/to/rust-for-linux 1.62.0-x86_64-unknown-linux-gnu
rust-src
$ rustup component add rust-src
次のコマンドでrust-src
componentをインストールできたか確認できる。
$ rustup component list
...
rust-src (installed)
...
libclang
$ sudo pacman -S clang
bindgen
特定バージョンのbindgenが必要。
$ cargo install --locked --version $(scripts/min-tool-version.sh bindgen) bindgen
bindgen
コマンドへのPATH
が通っているか確認する。
$ bindgen --version
bindgen 0.56.0
もしコマンドが見つからなければPATHを通す。~/.bash_profile
かなんかに次の行を追加してログインし直す。
# in ~/.bash_profile
export PATH="$HOME/.cargo/bin:$PATH"
最終確認
ルートディレクトリで次のコマンドを打つとビルド環境が整ったかどうかを確認できる。
$ make LLVM=1 rustavailable
Rust is available!
開発に必要なもの
rustupがインストールされていればほとんどの場合は不要だが一応記述しておく。
rustfmt/clippy/cargo/rustdoc
rustfmt
, clippy
, cargo
, rustdoc
はrustupからtoolchainをインストールすれば大体インストールされている。次のコマンドで確認できる。
$ rustup component list
...
cargo-x86_64-unknown-linux-gnu (installed)
clippy-x86_64-unknown-linux-gnu (installed)
...
rust-docs-x86_64-unknown-linux-gnu (installed)
...
rustfmt-x86_64-unknown-linux-gnu (installed)
もしインストールされていなければインストールする。
$ rustup component add rustfmt
ビルドする
bc
パッケージがなかった
なぜかbc
パッケージがなくてビルドが失敗したのでインストールした。
$ sudo pacman -S bc
本当にビルドする
ビルドするには.config
ファイルが構成設定のために必要。このファイルを生成するにはmake menuconfig
というTUIツールを使う方法などがあるが、GitHub Actionsに利用されている.config
ファイルをコピーしてくるという簡単な方法があるみたい。これについてはRust for Linuxを手元で試すという記事を参考にした。
$ cp .github/workflows/kernel-x86_64-debug.config .config
$ make CC=clang -j $(nproc)
LLVMのフルツールチェインがインストールされているならmake LLVM=1
でも良いみたい。私の環境にはclangしかインストールしていなかったため、上記のmake CC=clang
という方法をとった。
これでカーネルイメージ (bzImage) がarch/x86/boot/bzImage
とかに作られる。
Discussion