当前位置: 首页 > news >正文

如何使用 Renode(快速入门)

Renode 是一个强大的开源仿真框架,主要用于模拟嵌入式系统的硬件和软件环境,特别适用于 IoT 设备、ARM 微控制器、RISC-V 平台等。你可以用它来运行固件、调试嵌入式程序、捕获总线通信(如 UART、SPI、I2C、CAN)甚至与测试框架集成。


🚀 如何使用 Renode(快速入门)


✅ 一、安装 Renode

方法 1:使用 prebuilt 安装包(推荐)
  • macOS (通过 Homebrew):

    brew install --cask renode
    
  • Ubuntu / Debian:

    sudo apt update
    sudo apt install mono-complete wget unzip
    wget https://builds.renode.io/renode-latest.linux-portable.tar.gz
    tar -xzf renode-latest.linux-portable.tar.gz
    cd renode_*
    ./renode
    
  • Windows:
    下载预编译 .zip 文件:
    👉 https://builds.renode.io/

方法 2:使用 renode-run(适合只运行 demo)
pip install renode-run

✅ 二、运行一个简单的 demo 固件

示例:STM32 固件运行
renode

然后在 Renode Monitor 中输入:

mach create
machine LoadPlatformDescription @platforms/cpus/stm32f4_discovery.repl
sysbus LoadELF @path/to/your/firmware.elf
start

📌 @path/to/your/firmware.elf 是你的裸机程序,比如基于 STM32 的 Blinky 工程


✅ 三、运行 CAN 或特斯拉 Roadster 示例

以 Tesla Roadster 项目为例:

  1. 克隆项目:

    git clone --recursive https://github.com/antmicro/renode-tesla-roadster-simulation.git
    cd renode-tesla-roadster-simulation
    
  2. 提取固件(见前面翻译步骤)

  3. 启动仿真:

    renode roadster.resc
    

    会打开 Monitor 控制台、CAN 分析器窗口等。


✅ 四、使用 Wireshark 查看 CAN 总线流量

在 Monitor 控制台中输入:

emulation LogCANTraffic

Renode 会将所有 CAN 帧导出到一个 PCAP 文件,并自动打开 Wireshark 显示。


✅ 五、运行测试(Robot Framework)

renode-test roadster.robot --show-log

可自动运行测试脚本、解析 UART/CAN 输出并断言结果。


🧠 常用命令总结(Renode Monitor)

命令功能说明
mach create创建一个新的虚拟机器
sysbus LoadELF @路径加载 ELF 格式固件
sysbus LoadBinary @路径加载二进制裸机固件
start启动仿真
pause / reset暂停或重置仿真
uart0 AttachToConsole显示串口输出
emulation CreateProfiler创建性能分析器
emulation LogCANTraffic捕获并查看 CAN 通信数据

🎯 适合使用 Renode 的场景

  • 在没有真实硬件的情况下运行嵌入式固件
  • 对通信协议(CAN、UART 等)进行调试和分析
  • 自动化 CI 测试嵌入式软件(Robot Framework)
  • 反向工程/固件分析(如 Tesla VMS 研究)
  • 教学和演示嵌入式系统运行

STM32F103 是 ST 非常流行的一款 Cortex-M3 微控制器,适合裸机、RTOS、CAN 通信等项目。在 Renode 中模拟 STM32F103 系统是完全可行的。以下是一个完整的 STM32F103 + Renode 入门指南,包括如何运行你的固件。


✅ 使用 Renode 运行 STM32F103 固件

一、准备工作

✅ 你需要的文件:
  1. STM32F103 固件(推荐使用 .elf,也可用 .bin
  2. Renode 平台描述文件(.repl

二、步骤详解

✅ 1. 安装 Renode(如你未安装)
wget https://builds.renode.io/renode-latest.linux-portable.tar.gz
tar -xzf renode-latest.linux-portable.tar.gz
cd renode_*
./renode

✅ 2. 创建平台描述文件

创建一个平台描述文件 stm32f103.repl

using "platforms/cpus/stm32f1.repl"cpu: CPU.STM32F103C8sysbus:uart1: UART.STM32-> cpu@0x40013800timer2: Timer.STM32-> cpu@0x40000000gpioa: GPIOPort.STM32-> cpu@0x40010800gpiob: GPIOPort.STM32-> cpu@0x40010C00flash: MappedMemorysize: 0x20000-> cpu@0x08000000sram: MappedMemorysize: 0x5000-> cpu@0x20000000

✅ 3. 编写 Renode 脚本 .resc

保存为 stm32f103.resc

using sysbus
mach create "stm32f103"machine LoadPlatformDescription @stm32f103.replsysbus LoadELF @your_firmware.elfuart1 CreateTerminalBackend "uart"start

📝 如果你是裸机 .bin 文件,用这个替换:

sysbus LoadBinary @your_firmware.bin 0x08000000

✅ 4. 运行仿真

在 Renode 目录下执行:

./renode stm32f103.resc

你会看到 Monitor 控制台,并可打开 UART 窗口查看输出。


三、可选:观察串口输出

在 Monitor 中输入:

uart1 AttachToConsole

或者你可以在脚本中加:

uart1 CreateTerminalBackend "uart"

这样 Renode 会为 UART1 创建一个控制台窗口。


🧪 示例测试固件(Blinky)

如果你还没有固件,可以尝试 STM32CubeMX + Keil 或 PlatformIO 编译一个简单的 Blinky 工程。

STM32F103C8 的 Blinky 主循环一般是:

while (1) {HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);HAL_Delay(500);
}

在 Renode 中,GPIO 不直接映射到 LED,你可以用 log 或脚本方式观察 GPIO 变化,我也可以帮你模拟 LED。


📈 进阶功能

  • 模拟 CAN 总线:添加 can1: CAN.STM32 设备
  • 使用 emulation LogPeripheralAccess 查看内存访问
  • 使用 emulation CreateProfiler "profile.dump" 分析性能
  • 与 Wireshark 配合查看 CAN 或串口流量

没错!在 Renode 中,GPIO 引脚不会自动映射到物理 LED 灯(毕竟它是模拟环境),但你可以通过 多种方式 来观察或“模拟”GPIO 控制 LED 的行为。下面是一些实用的方法和操作示例:


✅ 方法 1:使用 Renode 脚本创建“虚拟 LED”

示例场景:STM32F103 用 GPIOC13 控制 LED(通常接板载 LED)

你可以通过 Renode 的 LED 模块 将 GPIO 映射为虚拟 LED!


🔧 修改你的平台描述文件(.repl)

stm32f103.repl 里添加:

  gpio_led: LED-> sysbusconnector:gpioa@13 -> gpio_led@0

或者如果使用的是 GPIOC13,可以写:

  gpioc: GPIOPort.STM32-> cpu@0x40011000gpio_led: LED-> sysbusconnector:gpioc@13 -> gpio_led@0

这样,当固件将 GPIOC13 设置为低电平时,Renode 的虚拟 LED 会点亮。


✅ 方法 2:用脚本观察 GPIO 状态变化

你可以在 Monitor 控制台里输入以下命令:

showAnalyzer gpioc

这会打开一个图形窗口,实时显示每个 GPIO 引脚的状态(高电平或低电平)。这样你可以看到哪个引脚被拉高/拉低,比如 GPIOC13。


✅ 方法 3:记录 GPIO 活动日志

logLevel 0
logPeripheralAccess gpioc

这会打印出每次对 GPIOC 的写入,比如:

[INFO] gpioc: Set pin 13 to low
[INFO] gpioc: Set pin 13 to high

你可以结合这个日志判断 LED 状态。


✅ 方法 4:通过脚本监控 GPIO 自动行为

如果你希望在 GPIO 状态改变时执行一些操作,比如:

gpioc AddValueChangedHook 13 "echo 'LED toggled!'"

这段脚本会在 GPIOC13 电平变化时输出一句日志。你也可以用它触发模拟事件或记录文件等。


🧪 实战测试:固件点灯循环(C代码)

你的裸机代码大概如下:

while (1) {HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); // LED ONHAL_Delay(500);HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);   // LED OFFHAL_Delay(500);
}

这个代码在 Renode 中不会真的点亮 LED,但结合上述 LED 虚拟设备或 GPIO 观察工具,你可以清楚看到它的行为!


✅ 总结

方法功能适合场景
虚拟 LED图形化显示点灯/灭灯模拟视觉效果
GPIO Analyzer实时电平图调试多个引脚
日志记录文本输出行为变化离线分析
Hook 自动响应GPIO 事件触发自定义动作自动测试

Renode 对 仿真支持最完整、最成熟的 SoC 型号,主要集中在以下几个厂商和系列上,尤其是 Antmicro 官方长期支持、用于演示和 CI 测试的目标:


✅ 最完整仿真支持的 SoC 型号(推荐)

### 1. STM32F4 系列(特别是 STM32F4Discovery)

  • 型号示例STM32F4Discovery (STM32F407VG)

  • 支持情况

    • ✔️ Cortex-M4
    • ✔️ NVIC、SysTick
    • ✔️ UART, GPIO, I2C, SPI, Timer
    • ✔️ ADC(基础支持)
    • ⚠️ DMA(部分支持)
    • ⚠️ USB(基础虚拟化存在,但不完全)
    • ✔️ 片上外设全部映射,并支持 .svd 显示寄存器

📦 Renode 自带平台文件:platforms/boards/stm32f4_discovery.repl


2. RISC-V 系列(SiFive Freedom E310 / HiFive1)

  • 型号示例SiFive E310-G000 (HiFive1)

  • 支持情况

    • ✔️ 完整 CPU 模型(RV32IMAC)
    • ✔️ GPIO, UART, SPI, PWM
    • ✔️ Timer, CLINT, PLIC
    • ✔️ 自带 SDK 和 demo 可直接运行
  • 🧪 用作 Renode 官方 CI 测试和 demos 的平台之一

📦 平台文件:platforms/cpus/sifive_e310.repl + platforms/boards/hifive1.repl


3. nRF52 系列(Nordic nRF52840)

  • 型号示例nRF52840-DK

  • 支持情况

    • ✔️ Cortex-M4F CPU
    • ✔️ NVIC, GPIO, UART, Timer, RTC
    • ✔️ QSPI Flash, Radio(仿真形式)
    • ✔️ 多协议支持:BLE 模拟(部分)
  • 📦 Zephyr、RIOT、Mynewt 等 RTOS 有完整 demo 配套


4. Microchip SAM E70 / ATSAM 系列

  • 型号示例ATSAME70Q21B

  • 支持情况

    • ✔️ Cortex-M7
    • ✔️ UART, GPIO, Timer, ADC
    • ✔️ NVIC、DMA、PDC 支持较完整
    • ⚠️ 外设模拟精度略逊于 STM32F4

🚫 STM32F1、F0、L 系列支持情况(较弱)

  • STM32F103、STM32F072、STM32L0、L4:仅基础支持,很多外设缺失或行为简化

  • 比如你看到的 RCC、DMA、ADC 报警,通常就是因为:

    • 未模拟对应 peripheral
    • 或仅有 SVD 显示、无行为模拟

✅ 推荐平台选择建议

目标推荐平台
STM32 仿真最强支持STM32F4Discovery(F407VG)
RISC-V 入门与测试HiFive1 (E310)
BLE + Cortex-MnRF52840-DK
Zephyr 官方 CI 支持平台STM32F4, nRF52840, E310
USB 测试(部分)⚠️ STM32F4(基础 USB OTG)

✅ 示例:STM32F4Discovery 平台加载命令

include @platforms/boards/stm32f4_discovery.resc

.repl

machine LoadPlatformDescription @platforms/boards/stm32f4_discovery.repl

stm32f4_discovery.resc 如下:

# 1. 启动 Renode 并加载开发板
mach create
machine LoadPlatformDescription @platforms/boards/stm32f4_discovery.repl# 2. 加载 ELF 文件
sysbus LoadELF @/path to /stm32f4_discovery.elf# 3. 配置 UART 输出
sysbus.uart4 CreateFileBackend "/path to /uart4.log" true# 4. 启动模拟
start

linux 终端运行 renode stm32_discovery.resc,执行完后,程序运行中所有串口输出都会写入这个文件。

查看方法:

tail -f uart4_output.log
http://www.dtcms.com/a/269037.html

相关文章:

  • 二进制安全-汇编语言-03-寄存器(内存访问)
  • cuda编程笔记(6)--流
  • PowerQuery逆透视之二维表转一维表
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | ContentPlaceholder(背景占位)
  • 电动汽车的传导发射仿真
  • navicate如何设置数据库引擎
  • RabbitMQ在SpringBoot中的使用详解
  • 2025光学成像与机器视觉国际会议 (OIMV 2025)
  • 用Python制作华夫图:从零开始
  • ShortGPT: Layers in Large Language Models are More Redundant Than You Expect
  • delphi,c++程序 阻止Win11 用户更改系统时间
  • 电子防抖(EIS)技术概述
  • Springboot 如何加密数据库连接相关配置信息
  • 特伦斯T1节拍器,突出综合优势与用户体验
  • AI建站工具对决:Wegic、腾讯云、Hocoos、Typedream深度测评,谁是国内用户的首选?
  • MySQL Galera Cluster企业级部署
  • 【Python】VSCode:解决模块导入与调试
  • 【音视频】HLS简介与服务器搭建
  • 【LLIE专题】通过预训练模型先验提升暗光增强模型复原效果
  • 安卓10.0系统修改定制化____如何修改固件 去除开机向导 实现开机直接进入桌面
  • C++笔记之开关控制的仿真与实际数据处理优雅设计
  • 基于物联网的城市低洼地段水深报警系统设计
  • 【人工智能学习路线(一)】以SCI为目标学习笔记——Python 编程基础入门
  • 面试总结46-50天
  • Python爬虫图片验证码和滑块验证码识别总结
  • 前端技术博客汇总文档
  • 思考5-10分钟,输出高质量的学术科研报告,谷歌的deepsearch模型太惊艳了!
  • 【最新版】Spring Boot 项目打包部署到服务器
  • 【配置+图解Android各种版本配置】
  • V8 主要版本与对应 ECMAScript 支持