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 变体也应能正常工作。

构建

这些说明涵盖了安装 libsel4-syscargo-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 将生成一组基本的属性测试。

    cargo fel4 test
    
    仅构建 feL4 测试应用程序
    cargo fel4 test build
    
    模拟先前构建的 feL4 测试应用程序
    cargo fel4 test simulate
    
    部署 feL4 测试应用程序
    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-configlibsel4-sys 软件包。

    有关 cargo-fel4 随附规范的信息,请参阅目标规范 README

测试

cargo-fel4 使用标准 Rust 测试框架管理其测试,并使用 proptest 进行基于属性的测试。

构建

构建测试与以下步骤相同:

cargo build --tests

运行

运行 cargo-fel4 的测试(与特定 feL4 项目的测试相对)需要安装前面列出的标准依赖项。可以通过运行以下命令来执行 cargo-fel4 的内部测试:

cargo test

许可证

有关更多详细信息,请参阅 LICENSE 文件。

依赖关系

~5MB
~99K SLoC