#author("2023-01-05T12:27:08+00:00","","") #author("2023-01-05T12:31:17+00:00","","") [[diary/Kojima]] ・kernel 6.1.2 with LLVM 現状(6.1.x)ではrust回りのドキュメントとかKconfigあたりの整備が始まってる程度なものの、 今後、rustのコードがカーネルに採用されるようになったとのことで、泥縄でrust回りの勉強。 どうやら rust のコードを使うには、LLVM が必須らしいので、とりあえず最近のカーネルを LLVM でビルドしてみた。 もっとも、最近のカーネルではLLVMにも十分対応しているので、ビルド時に make -j8 LLVM=1 くらいでビルドできる模様。 細かなビルドオプションは詰めきれてないけど、とりあえず5.15.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あたりを学ぶくらいかなぁ、、というところ(苦笑 - librsvgみたいに、rustで書いたライブラリをCな共有ファイルとして使う場合はライブラリの呼び出しをCの流儀に合わせるような処理が必要だけど、カーネルの場合はbinary blobみたいな感じで薄いレイヤーを被せるくらいで済むんだろうなぁ。。 -- [[kojima]] &new{2023-01-05 (木) 21:31:17}; #comment