1 个不稳定发布
0.1.1 | 2022年1月21日 |
---|
#4 in #sel4
在 selfe-start 中使用
60KB
1.5K 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_Word
和 seL4_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-xbuild 或 xargo 也可以进行交叉编译。显式指定您的 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
嵌入式默认配置文件最小支持 sabre
和 pc99
平台
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