2 个版本
使用旧版 Rust 2015
0.1.1 | 2018年10月23日 |
---|---|
0.1.0 | 2018年9月24日 |
#510 in Cargo 插件
在 cargo-fel4 中使用
18KB
385 行
cargo-fel4
概述
Cargo 子命令,用于自动化 feL4 (Rust 的 seL4) 开发
cargo-fel4
通过自动化底层 seL4 代码库的构建、生成可用的 Rust 绑定以及提供将代码集成到可运行的 seL4 应用程序的方式,旨在加快 seL4 环境下的 Rust 开发速度。
安装后,使用 cargo fel4 new my-project
创建一个新的 feL4 项目,这是一个带有额外配置功能的常规 Rust no_std
库项目。
在该项目中,运行 cargo fel4 build
将生成一个封装您库代码的 seL4 应用程序,而 cargo fel4 simulate
将运行它。
目前通过 libsel4-sys 库 访问 seL4 功能,这是围绕 seL4 的一个薄绑定层。此包装器根据您的 feL4 项目设置构建和配置,存储在项目的 fel4.toml
清单文件中。
feL4 项目附带一个示例 基于属性的测试套件,用于演示如何在 feL4 环境中进行测试。尝试使用 cargo fel4 test build && cargo fel4 test simulate
cargo-fel4 的发布特别感谢和归属感给予 Robigalia,尤其是他们的启动汇编代码和关于语言项的示例规范,当然,还要感谢 Data61 等为 seL4 所做的工作。
入门指南
依赖关系
cargo-fel4
在多个其他工具的基础上运行,因此您需要 Rust 和 Cargo、Xargo 以及 QEMU 来构建和运行 feL4 项目。此外,feL4 依赖于 libsel4-sys crate,它有自己的依赖集。以下“构建”步骤中的某些步骤实际上是针对满足 libsel4-sys
依赖项而特定的。cargo-fel4
是在 Ubuntu Xenial 上开发的,但其他 Linux 变体也应能正常工作。
- rust (nightly)
- xargo (用于交叉编译)
- gcc/g++ 交叉编译器 (用于 ARM 目标)
- qemu (用于仿真)
- dfu-util (用于设备部署)
构建
这些说明涵盖了安装 libsel4-sys
和 cargo-fel4
依赖关系,以及构建 cargo-fel4
。
- 安装系统包依赖项
sudo apt-get install python-pip ninja-build libxml2-utils dfu-util curl sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf sudo apt-get install qemu-system-x86 qemu-system-arm
- 安装 pip 包依赖项
sudo pip install cmake sel4-deps
- 安装 Rust nightly 和其他组件
curl https://sh.rustup.rs -sSf | sh rustup install nightly rustup component add rust-src cargo install xargo
- 构建
cargo-fel4
cargo build
安装
构建完成后,可以使用 cargo install
安装 cargo-fel4
。
- 在 nightly 工具链下安装
cargo +nightly install cargo-fel4
用法
查看 cargo fel4 --help
的输出以获取更多信息。
cargo fel4 --help
A cargo subcommand for automating feL4 (seL4 for Rust) development
USAGE:
cargo fel4 <SUBCOMMAND>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
SUBCOMMANDS:
build Build a feL4 project
clean Remove generated artifacts
deploy Deploy a feL4 project
help Prints this message or the help of the given subcommand(s)
new Create a new feL4 project
simulate Simulate a feL4 project with QEMU
test Build and run feL4 tests
示例
- 创建新的 feL4 项目
要使用 cargo-fel4 创建新项目
cargo fel4 new my-project Created library `my-project` project $ tree my-project/ my-project/ ├── Cargo.toml ├── fel4.toml ├── src │ ├── fel4_test.rs │ └── lib.rs ├── target_specs │ ├── armv7-sel4-fel4.json │ ├── README.md │ └── x86_64-sel4-fel4.json └── Xargo.toml
- 构建 feL4 项目
要使用 cargo-fel4 构建 feL4 项目
cd my-project/ cargo fel4 build
- 模拟 feL4 项目
要通过 cargo-fel4 使用 QEMU 模拟 feL4 项目
cd my-project/ cargo fel4 simulate
- 部署 feL4 项目
要使用 cargo-fel4 将 feL4 项目部署到目标平台
cd my-project/ cargo fel4 deploy
- 运行测试
当创建新项目时,cargo-fel4 将生成一组基本的属性测试。
仅构建 feL4 测试应用程序cargo fel4 test
模拟先前构建的 feL4 测试应用程序cargo fel4 test build
部署 feL4 测试应用程序cargo fel4 test simulate
cargo fel4 test deploy
- 在 TX1 平台上进行 DFU 部署
要通过 DFU 部署 feL4 应用程序,请确保已设置串行连接,以便与 U-Boot 引导加载程序交互。
将 USB 线的 USB-mini 端连接到 TX1 的 USB-mini 端。然后插入 TX1 的电源并开启电源。
一旦 TX1 开启电源,请监视串行输出,以便可以在 U-boot 命令提示符处停止引导过程。
然后在 U-boot 命令提示符处,输入以下内容
setenv dfu_alt_info "kernel ram 0x83000000 0x1000000" setenv bootcmd_dfu "dfu 0 ram 0; go 0x83000000" saveenv
要使 U-boot 进入其 DFU 服务器模式,请输入
run bootcmd_dfu
U-boot 将等待上传一个镜像。
现在您可以从主机机器部署 cargo-fel4 应用程序镜像
cargo fel4 deploy
- 配置
cargo-fel4 通过
fel4.toml
清单文件进行配置。该清单文件负责指定 cargo-fel4 基础设施的总体配置,以及底层
libsel4-sys
软件包的 CMake 构建系统。在
fel4.toml
中指定的布尔属性将在执行cargo fel4 build
时作为 Rust 特性应用于 feL4 项目,因此可以在编译时进行配置,以适应可用的 seL4 选项的变化。fel4.toml
清单文件位于项目的根目录中,包含与输入/输出工件位置相关的几个属性。这些路径属性相对于项目根目录。例如,一个新创建的 feL4 项目在
fel4.toml
中包含以下内容:[fel4] artifact-path = "artifacts" target-specs-path = "target_specs" ...
在 cargo-fel4 构建过程中生成的输出工件将放置在由
artifact-path
属性指定的目录中。可用于 cargo-fel4 的目标规范文件位于由
target-specs-path
属性指定的目录中。cargo fel4 new my-project # The fel4.toml is generated at the project's root directory my-new-project/fel4.toml # Output artifacts produced by the build my-new-project/artifacts/ # Rust target specifications available to cargo-fel4 my-new-project/target_specs/
在更改 Rust 目标三元组或平台配置时,建议清理构建缓存。这可以通过 cargo-fel4 完成。
cargo fel4 clean
有关更多配置信息,请参阅 fel4-config 和 libsel4-sys 软件包。
有关 cargo-fel4 随附规范的信息,请参阅目标规范 README。
测试
cargo-fel4
使用标准 Rust 测试框架管理其测试,并使用 proptest
进行基于属性的测试。
构建
构建测试与以下步骤相同:
cargo build --tests
运行
运行 cargo-fel4
的测试(与特定 feL4 项目的测试相对)需要安装前面列出的标准依赖项。可以通过运行以下命令来执行 cargo-fel4
的内部测试:
cargo test
许可证
有关更多详细信息,请参阅 LICENSE 文件。
依赖关系
~5MB
~99K SLoC