#sel4 #applications #generated #wrapper #thin #supporting #toml

sys selfe-sys

libsel4.a的生成薄包装器,包含支持子crate

1 个不稳定版本

0.1.1 2022年1月21日

#850 in 配置


2 crate中使用

自定义许可证

55KB
1.5K SLoC

Rust 1K SLoC // 0.0% comments Shell 125 SLoC // 0.0% comments C 27 SLoC

selfe-sys

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

概述

  • selfe-config 是一个构建依赖库,用于定义seL4配置格式(sel4.toml)以及构建seL4所需的工具
    • 还包括一个二进制工具 selfe,用于使用sel4.toml配置文件构建seL4应用程序
  • example_application 是一个依赖selfe-sys以访问系统调用的Rust seL4应用程序。它可以独立构建/运行,也可以与 selfe 一起构建。
  • sel4-start 是一个库,它定义了在seL4上基于Rust的root任务所需的Rust语言项。
  • 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函数和类型定义。

这些绑定中的大多数都是使用bindgen从项目相关sel4.toml中指定的seL4内核源生成的,由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许可证版本2.0(“许可证”)许可;除非根据适用法律或书面同意,否则不得使用此文件,除非遵守许可证。您可以在以下位置获得许可证副本:

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

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

无运行时依赖

~0–2MB
~39K SLoC