#env-var #cargo #emulator #firmware #run #renode #cargo-runner

无std app renode-run

在renode模拟器中运行嵌入式程序

5个版本

0.2.0 2024年3月26日
0.1.3 2023年10月5日
0.1.2 2023年3月15日
0.1.1 2023年3月15日
0.1.0 2023年3月15日

#10 in #emulator

Download history 42/week @ 2024-04-02 7/week @ 2024-04-09 2/week @ 2024-05-28

216 每月下载量

MIT/Apache

36KB
701

renode-run — ci crates.io

一个自定义Cargo运行器,用于在renode模拟器中运行Rust固件。

功能

  • 作为Cargo运行器,集成到 cargo run
  • renode的所有脚本功能和CLI作为配置暴露在你的 Cargo.toml 中。
  • 提供环境配置,允许你在几乎所有地方执行环境变量替换。

安装

要安装 renode-run,使用 cargo install renode-run

设置

注意 主机系统上需要安装renode

1. 设置Cargo运行器

renode-run 设置为你的Cargo运行器 (.cargo/config.toml)。

[target.'cfg(all(target_arch = "arm", target_os = "none"))']
runner = "renode-run"

2. 运行

你现在可以使用 cargo run 运行你的固件。

配置

[package.metadata.renode] 选项

注意 许多这些选项都可以通过CLI选项覆盖。几乎每个字段都支持环境变量替换。

resc 脚本生成相关的字段

  • name: 生成 resc 脚本中使用的名称字段。如果不存在,则使用crate的名称或提供默认名称。
  • description: 生成 resc 脚本中使用的描述字段。如果不存在,则使用crate的描述或提供默认描述。
  • machine-name: 机器的名称。
  • init-commands: 机器创建后并在声明变量之前运行的命令数组。
  • 变量:变量声明的数组。 renode-run 会自动插入由 Cargo 提供的 $bin = @target/<profile>/<bin>
  • 平台描述:单个平台描述。可以是以下之一
    • 由 renode 提供的 repl 文件(以 @ 开头)
    • 本地的 repl 文件(不以 @ 开头)
    • 要导入并生成到输出目录的本地 repl 文件(以 < 开头)。当你想在 repl 文件的 内容上执行环境替换时很有用。
    • 一个字面字符串
  • 平台描述数组:平台描述的数组。每个条目可以是以下之一
    • 由 renode 提供的 repl 文件(以 @ 开头)
    • 本地的 repl 文件(不以 @ 开头)
    • 要导入并生成到输出目录的本地 repl 文件(以 < 开头)。当你想在 repl 文件的 内容上执行环境替换时很有用。
    • 一个字面字符串
  • reset:重置宏定义。默认是 sysbus LoadELF $bin
  • start:启动命令定义。默认是 start
  • pre-start-commands:在 start 命令之前立即执行的命令数组。
  • post-start-commands:在 start 命令之后立即执行的命令数组。

renode-run 行为相关的字段

  • 环境变量:要为 renode-runrenode 环境设置的变量和值数组。
  • renode:要使用的 renode 可执行文件的路径。默认使用系统的 $PATH
  • omit-start:不要生成 start 命令。默认为 false
  • omit-out-dir-path:不要将输出目录添加到 renode 的路径。
  • resc-file-name:生成的 resc 脚本名称。默认为 emulate.resc
  • use-relative-paths:待定
  • disable-envsub:待定
  • using-sysbus:待定

renode 本身调用相关的字段

  • plain:将 --plain 添加到传递给 renode 的参数列表中。
  • port:将 --port <port> 添加到传递给 renode 的参数列表中。
  • disable-xwt:将 --disable-xwt 添加到传递给 renode 的参数列表中。
  • hide-monitor:将 --hide-monitor 添加到传递给 renode 的参数列表中。
  • hide-log:将 --hide-log 添加到传递给 renode 的参数列表中。
  • hide-analyzers:将 --hide-analyzers 添加到传递给 renode 的参数列表中。
  • console:将 --console 添加到传递给 renode 的参数列表中。
  • keep-temporary-files:将 --keep-temporary-files 添加到传递给 renode 的参数列表中。

示例

[package.metadata.renode]
name = 'my-script'
description = 'my renode script - ${FOOKEY} works'
machine-name = 'my-machine'
using-sysbus = true
renode = '${HOME}/repos/forks/renode/renode'
environment-variables = [
    ['FOOKEY', 'FOOVAL'],
    ["MYENV", "MYVAL"],
]
init-commands = [
    'logLevel -1 i2c2',
]
variables = [
    '$tap?="renode-tap0"',
    # Set random board UNIQUE ID
    '''
    python "import _random"
    python "rand = _random.Random()"

    $id1 = `python "print rand.getrandbits(32)"`
    $id2 = `python "print rand.getrandbits(32)"`
    $id3 = `python "print rand.getrandbits(32)"`
    ''',
]
platform-descriptions = [
    '@platforms/boards/stm32f4_discovery-kit.repl',
    'path/to/dev_board.repl',
    '< ${SOMETHING}/other_dev_board.repl',
    '''
    phy3: Network.EthernetPhysicalLayer @ ethernet 3
        Id1: 0x0000
        Id2: 0x0000
    ''',
    '''
    wss: Python.PythonPeripheral @ sysbus 0x50070000
        size: 0x10
        initable: true
        filename: "${ORIGIN}/sensor_models/wss.py"
    ''',
]
pre-start-commands = [
    '''
    emulation CreateSwitch "switch"
    connector Connect sysbus.ethernet switch
    emulation CreateTap $tap "tap"
    connector Connect host.tap switch
    ''',
    '''
    logFile @/tmp/logfile.log true
    logLevel 3 file
    ''',
    'emulation LogEthernetTraffic',
    'machine StartGdbServer 3333',
    '''
    sysbus.usart3 AddLineHook "PANIC" "Antmicro.Renode.Logging.Logger.Log(LogLevel.Error, line)"
    sysbus.usart3 AddLineHook "test result: ok" "Antmicro.Renode.Emulator.Exit()"
    ''',
]
reset = '''
sysbus LoadELF $bin
sysbus WriteDoubleWord 0x1FFF7A10 $id1
sysbus WriteDoubleWord 0x1FFF7A14 $id2
sysbus WriteDoubleWord 0x1FFF7A18 $id3
'''

许可证

根据以下之一获得许可

根据您的要求。

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义,您提交的任何有意包含在工作中的贡献,将按照上述方式许可,不附加任何额外条款或条件。

依赖项

约 7-17MB
约 232K SLoC