Skip to content

Latest commit

 

History

History
91 lines (76 loc) · 3.62 KB

CrateDependencies.md

File metadata and controls

91 lines (76 loc) · 3.62 KB

依赖CantripOS的Rust crates

要使用CantripOS crates,您可以从本地存储库或直接从GitHub使用git引用它们;例如,在Config.toml中:

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

注意:git的使用取决于cargo是否支持在cantrip仓库中搜索名为“cantrip-os-common”的crate。

请注意,许多CantripOS crate需要seL4内核配置(例如,知道是否配置了MCS)。 这由cantrip-os-common/sel4-config crate处理, 该crate由build.rs使用以将内核配置参数导入Cargo功能。 在Cargo.toml中,使用您需要的内核参数创建一个特性清单,例如:

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

接着指定 build-dependencies:

[build-dependencies]
# build.rs depends on SEL4_OUT_DIR = "${ROOTDIR}/out/cantrip/kernel"
sel4-config = { path = "../../cantrip/apps/system/components/cantrip-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/cantrip/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 脚本会为您设置它,但是如果您选择直接运行 ninja,您需要在环境中设置它。

类似于 SEL4_OUT_DIR,cantrip-os-common/src/sel4-sys crate 具有用于 Rust 程序的 seL4 系统调用包装器, 需要一个名为 SEL4_DIR 的环境变量,该变量包含内核源代码的路径。build-sparrow.sh 也会设置此变量。