🔖

WSL2でRustでデバイスドライバをビルドする方法

2022/10/17に公開

https://ascii.jp/elem/000/004/082/4082673/
↑を参考に↓のリポジトリのnextブランチにあるLinux6.0カーネルのソースコードをビルドする。
https://github.com/nathanchance/WSL2-Linux-Kernel
このとき、オプション設定にて
https://zenn.dev/garasubo/articles/rust-for-linux
を参考にしてRUSTオプションを有効にする。
なお、sudoにてRust1.62.0以上のrustcを走らせる必要があるため、走らせられる環境の人はそのままで、走らせられない人は

sudo ln -s $(which rustc) /usr/bin/rustc

などとして、makeコマンドを走らせる場合には

sudo PATH="$PATH" make (オプションなど)

とすればよい。するとRUST_IS_AVAILABLEが有効になるのでRUSTオプションが付けられるようになる。
そしてWSL2にビルドしたカーネルを導入し終えたら、このようなMakefileと

obj-m := rust_minimal.o

all:
  make -C /path/to/WSL2-Linux-Kernel/ M=$(pwd) modules

clean:
  make -C /path/to/WSL2-Linux-Kernel/ M=$(pwd) clean

ここにあるrust_minimal.rsを用意する。
https://github.com/nathanchance/WSL2-Linux-Kernel/blob/next/samples/rust/rust_minimal.rs
そしてmakeをするとrust_minimal.koというファイルができる。試しに以下のようにロードやアンロードしてメッセージを確認してみよう。

sudo insmod rust_minimal.ko
sudo rmmod rust_minimal.ko
dmesg | tail

Discussion