sparrow-kata - プロジェクトスズメ:カタOS

(Project Sparrow: KataOS)

Created at: 2022-08-11 03:23:30
Language: Rust
License: Apache-2.0

プロジェクトスズメ:カタOS

Sparrowは、アンビエントMLアプリケーション用の低消費電力で安全な埋め込みプラットフォームを構築するプロジェクトです。ターゲットプラットフォームはRISC-VOpenTitanを活用しています。

Sparrowソフトウェアには、seL4上で動作し、(seL4カーネルを無視して)ほぼ完全にRustで書かれているKataOSという名前の自家製のオペレーティングシステムが含まれています。

これは、KataOS全体を組み立てるCAmkESプロジェクトです。これは、アップストリームの seL4 に移動することを意図していないコードが含まれているため、seL4 ソースツリーの外部に存在します。

これは、CMakeList をシンボリックリンクして標準の CAmkES ビルド システムを使用し.txt CAmkES 依存関係が既にインストールされていることを前提としています。また、settings.cmakeをシンボリックリンクしているため、「アプリケーション」の概念を保持しているため、ビルドシステムはCAMKES_APP CMakeキャッシュ値を使用してビルドするアセンブリを切り替えることができます。KataOSには1つのアプリ、システムしかありません

スズメの錆の木箱(ここに含まれているもの)。

[最終的にすべてのSparrow(ソフトウェアとハードウェアの設計)が利用可能になるまで、共有の準備ができていると判断したより多くのソフトウェアが公開されます。

多くのKataOS Rustクレートは、apps/system/componentsディレクトリにあります。共通/共有コードはカタ・オズ・コモンにあります:

  • アロケータ: リンクリストアロケータクレート上に構築されたヒープアロケータ
  • camkes: Rust で CAmkES コンポーネントを書くためのサポート
  • capdl: capDL ツールによって生成された capDL 仕様の読み取りのサポート
  • コピー領域:物理ページをスレッドのVSpaceに一時的にマッピングするためのヘルパー
  • cspace-slot: スロットアロケータ用の RAII ヘルパー
  • ロガー:錆ロガークレートとのseL4統合
  • モデル: capDL の処理のサポート。カタ-OS-ルートサーバによって使用されます
  • パニック: seL4 固有のパニックハンドラ
  • sel4-config: seL4 カーネルコンフィグレーション用のグルーを構築する
  • sel4-sys: seL4 システムインタフェースと接着剤
  • スロットアロケータ:トップレベルのCNodeのスロットのアロケータ

錆びた木箱に応じて

Sparrow の木箱を使うには、ローカルリポジトリから参照するか、git を使って GitHub から直接参照することができます。例えば、Config.tomlでは:

kata-os-common = { path = "../system/components/kata-os-common" }
kata-os-common = { git = "https://github.com/AmbiML/sparrow-kata" }

注意: git の使用法は、カタレポで "kata-os-common" という名前の木箱を検索するための貨物のサポートに依存します。git依存関係を使用する場合、gitタグを使用してクレートバージョンをロックすることができます。

多くの Sparrow クレートには seL4 カーネルコンフィグレーションが必要であることに注意してください (MCS が設定されているかどうかを知るためなど)。これは、カーネルコンフィグレーションパラメータを Cargo 機能としてインポートするために build.rs によって使用される kata-os-common/sel4-config クレートによって処理されます。Cargo.tomlでは、必要なカーネルパラメータを含む機能マニフェストを作成します。

[features]
default = []
# Used by sel4-config to extract kernel config
CONFIG_PRINTING = []

次に、ビルド依存関係を指定します。

[build-dependencies]
# build.rs depends on SEL4_OUT_DIR = "${ROOTDIR}/out/kata/kernel"
sel4-config = { path = "../../kata/apps/system/components/kata-os-common/src/sel4-config" }

少なくとも以下を含む build.rs を使用します。

extern crate sel4_config;
use std::env;

fn main() {
    // If SEL4_OUT_DIR is not set we expect the kernel build at a fixed
    // location relative to the ROOTDIR env variable.
    println!("SEL4_OUT_DIR {:?}", env::var("SEL4_OUT_DIR"));
    let sel4_out_dir = env::var("SEL4_OUT_DIR")
        .unwrap_or_else(|_| format!("{}/out/kata/kernel", env::var("ROOTDIR").unwrap()));
    println!("sel4_out_dir {}", sel4_out_dir);

    // Dredge seL4 kernel config for settings we need as features to generate
    // correct code: e.g. CONFIG_KERNEL_MCS enables MCS support which changes
    // the system call numbering.
    let features = sel4_config::get_sel4_features(&sel4_out_dir);
    println!("features={:?}", features);
    for feature in features {
        println!("cargo:rustc-cfg=feature=\"{}\"", feature);
    }
}

build.rs がカーネルビルド領域の先頭へのパスを持つSEL4_OUT_DIR環境変数をどのように期待しているかに注目してください。build-sparrow.sh スクリプトはこれを設定しますが、たとえば、忍者を直接実行する場合は、環境内で設定する必要があります。

Rust プログラム用の seL4 システムコールラッパーを持つ kata-os-common/src/sel4-sys クレートをSEL4_OUT_DIRするのと同様に、カーネルソースの先頭へのパスを持つSEL4_DIR環境変数が必要です。これも build-sparrow.sh によって設定されます。

ソースコードヘッダー

ソースコードを含むすべてのファイルには、著作権とライセンス情報が含まれています。依存/非Googleコードの場合、これらはアップストリームリポジトリから継承されます。Googleの変更がある場合は、Google Apacheライセンスが以下にあります。

Apacheヘッダー:

Copyright 2022 Google LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.