・kernel 6.1.2 with LLVM
現状(6.1.x)ではrust回りのドキュメントとかKconfigあたりの整備が始まってる程度なものの、 今後、rustのコードがカーネルに採用されるようになったとのことで、泥縄でrust回りの勉強。
どうやら rust のコードを使うには、LLVM が必須らしいので、とりあえず最近のカーネルを LLVM でビルドしてみた。
もっとも、最近のカーネルではLLVMにも十分対応しているので、ビルド時に make -j8 LLVM=1 くらいでビルドできる模様。 細かなビルドオプションは詰めきれてないけど、とりあえず5.18.82あたりを元に設定した .config を使った感じ、 フルビルドに約50分くらいかかった。
$ uname -a Linux pl80a2 6.1.2-plamo64 #1 SMP PREEMPT_DYNAMIC Tue Jan 3 10:19:42 JST 2023 x86_64 x86_64 x86_64 GNU/Linux
/proc/config.gz には、ビルドしたコンパイラ(LLVM)の情報も記録されている模様
$ zcat /proc/config.gz | head -20 # # Automatically generated file; DO NOT EDIT. # Linux/x86 6.1.2 Kernel Configuration # CONFIG_CC_VERSION_TEXT="clang version 13.0.1" CONFIG_GCC_VERSION=0 CONFIG_CC_IS_CLANG=y CONFIG_CLANG_VERSION=130001 CONFIG_AS_IS_LLVM=y CONFIG_AS_VERSION=130001 CONFIG_LD_VERSION=0 CONFIG_LD_IS_LLD=y CONFIG_LLD_VERSION=130001 CONFIG_CC_CAN_LINK=y CONFIG_CC_CAN_LINK_STATIC=y CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y CONFIG_TOOLS_SUPPORT_RELR=y CONFIG_CC_HAS_ASM_INLINE=y
6.1.2には実際のrustのコードはまだ入っていないみたいだけど、ドキュメントを見てると NVMe あたりのドライバが開発されているようなので、 6.x の LTS くらいには入ってくるかなぁ、、って印象。
rustのコードはいくつか眺めたものの、ちょっと自分で書ける気はしないので、せいぜいrustを使うためのcargoあたりを学ぶくらいかなぁ、、というところ(苦笑