#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

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS