#sel4 #run-time #required #process #tiny #build #libsel4

nightly selfe-runtime

一个小型运行时库,任何使用libsel4.a的进程都需要它。

1 个不稳定发布

0.1.1 2022年1月21日

#4 in #sel4


selfe-start 中使用

自定义许可

60KB
1.5K SLoC

Rust 1K SLoC // 0.0% comments Shell 124 SLoC C 26 SLoC

selfe-sys

libsel4.a 的一个生成的薄包装器,包含支持子库。

概述

  • selfe-config 是一个构建依赖库,它定义了一个 seL4 配置格式(sel4.toml)以及用于使用该配置构建 seL4 的实用程序
    • 还包括一个二进制工具,selfe,它通过 sel4.toml 配置文件的帮助构建 seL4 应用程序
  • example_application 是一个依赖 selfe-sys 以访问系统调用的 Rust seL4 应用程序。它可以独立构建/运行或与 selfe 一起构建。
  • selfe-start 是一个库,它定义了在 seL4 上的基于 Rust 的 no_std 根任务所需的 Rust lang-items。
  • selfe-runtime 是一个微型运行时库,任何使用 libsel4.a 的进程都需要它。

有关更详细的信息,请参阅子目录下的 README。

使用

在您的 Cargo.toml 清单中添加对库的依赖关系

[dependencies]
selfe-sys = "0.1"

然后在您的 Rust 项目中

extern crate selfe_sys;

use selfe_sys::{seL4_CapInitThreadTCB, seL4_TCB_Suspend};

fn main() {

    let _suspend_error = unsafe {
        seL4_TCB_Suspend(seL4_CapInitThreadTCB as usize)
    };

}

此外,您的库可能需要在您的 .cargo/config 文件中设置以下 rustflags 以成功链接。

[build]
rustflags = ["-C", "link-args=-no-pie"]

请注意,Rust 可用的库名为 selfe_sys

库内容

selfe_sys 包含来自 libsel4 的系统调用、常量、API 函数和类型定义。

这些绑定的大部分都是通过从项目相关 sel4.toml 中指定的 seL4 内核源使用 bindgen 生成的,由 selfe-config 管理。 sel4-sys 包的确切内容将取决于在 sel4.toml 文件中设置的配置标志,因为它们会影响作为绑定生成输入使用的 seL4 中的头文件。

这里的目的是尽可能少地手动努力就能跟踪 seL4 的变化。

因为这些绑定旨在零开销,所以输出不是特别符合 Rust 习惯。一个值得注意的无成本功能增强是,已经定义了 seL4_WordseL4_CPtr 以与常规 Rust usize 相同。

构建

从常规的 Rust 工具链开始,安装构建工具。

cargo install cargo-xbuild
cargo install selfe-config --bin selfe --features bin --force

请注意,Python、CMake、Ninja、QEMU 等作为 seL4 的间接依赖项存在。

默认配置已提供,因此即使在没有提供指向 sel4.toml 文件的特定 SEL4_CONFIG_PATH 环境变量的情况下,常规的 cargo build 也会正常工作。

cargo build

使用 cargo-xbuildxargo 也可以进行交叉编译。显式指定您的 Rust 目标三元组作为参数,并使用环境变量 SEL4_CONFIG_PATH 指向您的 sel4.toml 配置文件,并使用环境变量 SEL4_PLATFORM 选择您希望的目标平台。

交叉编译示例

SEL4_CONFIG_PATH=/home/other/sel4.toml SEL4_PLATFORM=pc99 cargo xbuild --target=x86_64-unknown-linux-gnu

嵌入式默认配置文件最小支持 sabrepc99 平台

SEL4_PLATFORM=sabre cargo xbuild --target armv7-unknown-linux-gnueabihf
SEL4_PLATFORM=pc99 cargo xbuild --target x86_64-unknown-linux-gnu

测试

此库包含三种类型的测试

  • 编译时测试,断言并确认 bindgen 输出的预期结构
  • bindgen 自身产生的运行时单元测试,检查布局细节
  • 运行时基于属性的测试,确保某些与内核交互的函数表现合理。这些针对基于 "位字段" 的结构,这些结构是在 seL4 的构建系统中通过组合自定义解析和基于 Python 模板代码创建生成的。

x86_64 类型的宿主开发机器上使用 cargo test 运行它们所有

许可

有关详细信息,请参阅 LICENSE

版权所有 2021 Auxon Corporation

根据 Apache License,版本 2.0(“许可证”);除非遵守本许可证或书面同意,否则不得使用此文件。您可以在以下位置获得许可证副本:

https://apache.ac.cn/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”分发,不提供任何明示或暗示的保证或条件。有关许可证的特定语言管理许可和限制,请参阅许可证。

依赖关系

~0–2MB
~40K SLoC