1 个不稳定版本
0.1.1 | 2022年1月21日 |
---|
#850 in 配置
在 2 crate中使用
55KB
1.5K 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_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许可证版本2.0(“许可证”)许可;除非根据适用法律或书面同意,否则不得使用此文件,除非遵守许可证。您可以在以下位置获得许可证副本:
http://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”基础分发,不提供任何明示或暗示的保证或条件。有关许可证的特定语言、许可和限制,请参阅许可证。
无运行时依赖
~0–2MB
~39K SLoC