Linux で Rust ドライバーをサポートするためのパッチの XNUMX 番目のバージョンが到着しました

ミゲル・オジェダ Rust-for-Linux プロジェクトの作者 XNUMX番目のリリースをリリース Linux カーネル開発者が考慮すべき Rust 言語サポートを備えた Linux カーネル パッチの開発について。

これは、パッチの XNUMX 番目のリリースとしてランク付けされます (バージョン番号なしで最初にリリースされたバージョンを考慮に入れます)。. Rust のサポートは実験的なものと見なされます。 しかし、それはすでに linux-next ブランチに含まれており、5.20/6.0 の秋のリリースでの統合を主張しており、カーネル サブシステムの上に抽象化レイヤーを作成し、コントローラーとモジュールを作成する作業を開始するのに十分なほど進んでいます。

開発は Google と ISRG によって資金提供されています Let's Encryptプロジェクトの創設者であり、HTTPSとインターネットセキュリティを強化する技術の開発を推進している(Internet Security Research Group)。

提案された変更により、ドライバーとカーネルモジュールを開発するための第XNUMX言語としてRustを使用できるようになります。 Rustのサポートは、デフォルトでは有効になっておらず、カーネルに必要なビルド依存関係にRustが含まれることのないオプションとして提供されています。 Rustを使用してドライバーを開発すると、メモリ領域を解放した後のアクセス、nullポインターの逆参照、バッファーオーバーフローなどの問題なしに、最小限の労力でより優れた安全なドライバーを作成できます。

コンパイル時にRustでメモリの安全性が提供されるのは、参照をチェックし、オブジェクトの所有権とオブジェクトの存続期間(スコープ)を追跡し、コードの実行中のメモリアクセスの正確さを評価することです。

この XNUMX 番目のリリースの新機能

発表されたこの新しい提案では、 alloc ライブラリバリアント、エラー時に「パニック」状態が発生する可能性を排除しました。 Rust バージョン 1.62 に更新されました。 以前のバージョンと比較して、Rust ツールキットは、カーネル パッチで使用される const_fn_trait_bound 機能のサポートを安定させました。

それに加えて バインディング コードは「バインディング」ボックスのバンドルに分割されます これにより、メインのカーネル パッケージのみが変更された場合に再構築が容易になります。

ザ・ 「concat_idents!」マクロの実装、 concat_idents 機能に関連付けられていない手続き型マクロとして書き直され、ローカル変数参照を使用できるようになりました。

さらに、マクロが "static_assert!" 「core::assert!()」を許可するように書き直されました 定数の代わりに任意のコンテキストで使用されますが、マクロ「construction_error!」 モジュールに "RUST_BUILD_ASSERT_{WARN,ALLOW}" モードを設定するときに動作するように調整されました。

fs モジュールが追加されました ファイルシステムを操作するためのリンクを提供します。 Rust で書かれた単純なファイル システムの例と、システム キューを操作するために追加されたジョブ キュー モジュールが提案されています。

その他の変更点 この新しい提案から際立っている:

  • 別の設定ファイル「kernel/configs/rust.config」を追加しました。
  • マクロ置換で処理される「*.i」ファイルは、「*.rsi」に名前が変更されました。
  • C コードに使用されるもの以外の最適化レベルで Rust コンポーネントをビルドするためのサポートを削除しました。
  • kasync モジュールの開発は、非同期プログラミング メソッド (async) の実装に続きました。
  • Rust で書かれたカーネル レベルの TCP サーバーの例を追加し、Rust で割り込みを処理する機能を追加しました。
  • file_operations 構造体などの関数ポインター テーブルを操作しやすくするために、プロシージャ マクロが追加されました。
  • 双方向リンク リストの実装「unsafe_list::List」が追加されました。
  • 読み取りロックが現在のスレッドにバインドされているかどうかを確認するために、RCU と Guard タイプの初期サポートが追加されました。
  • カーネル スレッドを自動的に生成して開始する関数 Task::spawn() を追加しました。
  • Task::wake_up() メソッドも追加されました。
  • 遅延モジュールを追加

最後に あなたがそれについてもっと知りたいのなら、詳細を確認できます 次のリンクで。


コメントを残す

あなたのメールアドレスが公開されることはありません。 必須フィールドには付いています *

*

*

  1. データの責任者:AB Internet Networks 2008 SL
  2. データの目的:SPAMの制御、コメント管理。
  3. 正当化:あなたの同意
  4. データの伝達:法的義務がある場合を除き、データが第三者に伝達されることはありません。
  5. データストレージ:Occentus Networks(EU)がホストするデータベース
  6. 権利:いつでも情報を制限、回復、削除できます。