TL;DR : linux kernelのrepositoryでrustフォルダが掘られた(next branchで)

要約すると以下のようになるっぽい。

    • rustはnightly build版が必要になります。nightlyの機能を活用しているので。

 

    • x86-64とarm64がサポートされています。あと、LLVM前提になります。

 

    • driver/charの下にサンプルコードがあるので、気になったら見てください。

 

    debugするときdemangleで問題になったら、ツール側をどうにかしてください。

まずはこちらをご覧いただきたい…

Linux Kernelのnext-XXXX branchにで…

image.png

見慣れないフォルダ!! rust !!! rust !!! rust !!!

image.png

確かに昨年、rustのサポートの話でていましたね…

ここから話を見つけました

lwn ( https://lwn.net/ ) に面白い記事ないかなー

↓ twitterでネタ被ってないよね…を簡単に確認

Rustの時代っぽいので,昨日書いたLinux Kernelに入りそうなRustについて軽くまとめた記事を共有しておきます.https://t.co/6qqjsjZ9bMソースコード読んだ方が楽しいしわかりやすいです.#kernelvm— ばにらびいんず(鳥) (@n01e0) March 20, 2021

(ネタ被りということでは、ギリギリセーフかな…? よし翻訳してみよう)

ということで…

さっそく、新しく追加されたRust関係のdocumentを見ていく( https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/Documentation/rust )。

    • index.rst

リンクのためのページなので、これはいいかな…

quick-start.rst

開発に関連するところ!これは読んでおこう!

docs.rst

ドキュメンテーションのシステムの話…… 余力があれば読もう(今はいいや)

coding.rst

コーディングスタイルの話…… 余力があれば読もう(今はいいや)

arch-support.rst

サポートするアーキテクチャの話だけど、情報量ないし、これはいいかな…

quick_start.rst

Quick Start

このドキュメントは、Rustを使ってkernel開発をどうやって始める方法について記載されています。
貴方がRustで作業した経験がある場合、かかる時間は少しだけです。

Requirements: Building

このセクションでは、開発に必要となるツールの入手について説明をします。

これらの要求については、あなたのlinux distributionでは、rustc, rust-src, rust-bindgen等のような名称で有効になっているかもしれません。しかし、書いているときには十分最新のものではない可能性があります(訳注:ここでいう「書く」は、あなたがドライバ/コードを書くという意味と思われます)。

rustc

最新の nightly Rust toolchain ( 少なくとも rustc ) が必要です、例えば nightly-2021-02-20。我々の目的は安定的なtoolchainをできるだけ用いる事です。しかし、nightly featuresのいくつかに依存もしています。

あなたがrustupを用いる場合、下記コマンドを実行してください。

rustup toolchain install nightly

あるいは、スタンドアロンのinstallerを取得したり、rustup を下記からインストールしてください。

https://www.rust-lang.org

Rust standard library source

build systemがcoreや`allocをクロスコンパイルするために、Rust standard library sourceが必要です。

あなたがrustupを用いる場合、下記コマンドを実行してください。

rustup component add rust-src

あるいは、もしstandalone installerを使っている場合、あなたのnightly toolchainをインストールしたフォルダの中に、Rust repositoryをcloneすることもできます。

git clone --recurse-submodules https://github.com/rust-lang/rust $(rustc --print sysroot)/lib/rustlib/src/rust

bindgen

bindgentoolを用いることで、kernelのC sideのbindingがbuild時に生成されます、最新のバージョン、例えば、0.56.0で作業をするべきです。

インストール方法は以下です(ソースコードからtoolを構築します)::

cargo install --version 0.56.0 bindgen

このツールは、libclang (LLVM)を使います。これは、kernel内のCコードを理解いするためです。すなわち、最新のLLVMをインストールしておかねばなりません。また、kernelをコンパイルするときには、CC=clangあるいはLLVM=1をつけることになります。

Requirements: Developing

このセクションでは、開発に必要となるツールの取得方法について説明します。もしkernelをbuildすることしかしないのであれば、これらは必要にはなりません。

rustfmt

rustfmt toolは、C bindingの生成を含む、Rust kernel codeすべてに対する自動フォーマットに用いられるツールです(詳細については、rust_coding(Documentation/rust/coding.rst)を参照してください)

もしあなたがrustupを使う場合、default profileでは既にツールはインストールされています。そのため、そのまま先へ進めることができます。もし他のprofileを使っている場合、コンポーネントを手動でインストールすることもできます。

rustup component add rustfmt

standalone installerにはrustfmtもまた含まれます。

clippy

clippyは、Rust linterです(訳注:lint とはコンパイラよりも厳密にチェックをする機構)。makeする際に、CLIPPY=1を渡すことで、Rust codeに対する追加の警告を得ることができます(詳細については、rust_coding(Documentation/rust/coding.rst)を参照してください)

もしあなたがrustupを使う場合、default profileでは既にツールはインストールされています。そのため、そのまま先へ進めることができます。もし他のprofileを使っている場合、コンポーネントを手動でインストールすることもできます。

rustup component add clippy

standalone installerにはclippyもまた含まれます。

rustdoc

rustdoc toolをインストールすることで、Rust codeに対する素晴らしいHTML documentationを得る事もできるようになります。それには、kernelの残り部分で使われているrust/内のライブラリ(crates)も含まれます。(詳細については、rust_coding(Documentation/rust/coding.rst)を参照してください)

もしあなたがrustupを使う場合、default profileでは既にツールはインストールされています。そのため、そのまま先へ進めることができます。もし他のprofileを使っている場合、コンポーネントを手動でインストールすることもできます。

rustup component add rustdoc

standalone installerにはrustdocもまた含まれます。

Configuration

General setup menu内で、Rust support (CONFIG_RUST)を有効にしなければなりません。このオプションは、build systemがrustcを配置している場合にだけ表示されます。次に、Rustが必要とする残りのオプションについて表示されます。

そのあと、Device Driversの下のCharacter devicesに異動し、Rust example(CONFIG_RUST_EXAMPLE`)という、Rust driverのサンプルを有効にしてください。

Building

x86_64やarm64 kernelを、GCC、Clangあるいは完全なLLVM toolchainでbuildすることはうまく動作するはずです。しかし、現時点ではGCCでの利用は実験的であることに注意をしてください。

Hacking

もしより深淵を覗きたい場合には、drivers/char/rust_example.rsに置かれたサンプルドライバーのソースコードを見てください。Rustのサポートコードはrustにあります。また、kernel hacking の下に、Rust hackingmenuもあります。

もしGCB/Binutilsを使っているが、Rust symbolでdemangleされない場合、その理由は利用しているtoolchainがRustの新しいv0 mangle schemeをまだサポートしていないからかもしれません。いくつかの方法が考えられます。

独自にtoolをbuildしてよいならば、GCC向けの非常に新しいreleaseにおけるcherry pickedでのサポートしたforkに追従することができます。

https://github.com/Rust-for-Linux/binutils-gdb/releases/tag/gdb-10.1-release-rust
https://github.com/Rust-for-Linux/binutils-gdb/releases/tag/binutils-2_35_1-rust

もしGDBしか必要とせず、CONFIG_DEBUG_INFOを有効にできるならば:
GDBのいくつかのバージョン(例えば、vanilla GDB 10.1)ではデバッグ情報として既にdemangledされた名前を利用することができます。
もしloadble moduleのサポートが要らないのであれば、compileするときに-Zsymbol-mangling-version=v0を外してください。しかし、これは我々はサポートしていませんので、急ぎでない場合には利用するべきではありません。

まとめ

    • rustはnightly build版が必要になります。nightlyの機能を活用しているので。

 

    • x86-64とarm64がサポートされています。あと、LLVM前提になります。

 

    • driver/charの下にサンプルコードがあるので、気になったら見てください。

 

    debugするときdemangleで問題になったら、ツール側をどうにかしてください。
广告
将在 10 秒后关闭
bannerAds