4. 使用日志记录仿真输出

任务说明

本案例目标是在Renode中启用并配置日志系统,将仿真运行时的调试信息(如UART输出、外设访问、CPU执行事件)记录到日志文件与控制台,便于后续分析。我们将以STM32F4 Discovery开发板为平台,通过一条简单的UART回显程序演示日志的配置与输出。

实现方案

Renode使用基于NLog的日志框架,支持通过命令行参数或配置文件动态调整日志级别与输出目标。本案例采用以下方式:

  1. 创建日志配置文件logger.nlog,定义控制台与文件两个输出目标;
  2. 启动Renode时加载该配置,并设置日志级别为DEBUG;
  3. 运行固件后,观察UART数据收发日志与系统级调试信息。

日志配置与启动

首先创建日志配置文件logger.nlog:


<?xml version="1.0" encoding="utf-8"?>
<nlog>
  <targets>
    <target name="console" xsi:type="Console"
            layout="${longdate}|${level:uppercase=true}|${logger}|${message}" />
    <target name="file" xsi:type="File"
            fileName="renode_${shortdate}.log"
            layout="${longdate}|${level:uppercase=true}|${logger}|${message}" />
  </targets>
  <rules>
    <logger name="*" minlevel="Debug" writeTo="console,file" />
  </rules>
</nlog>

该配置将所有命名空间下级别不低于Debug的日志同时输出到控制台与日期命名的文件中。

启动Renode并加载日志配置:


renode --nlog-config logger.nlog -e "include @platforms/cpus/stm32f4-discovery.repl; machine LoadPlatform @platforms/boards/stm32f4-discovery.repl;"

其中--nlog-config指定日志配置文件路径。启动后,Renode控制台会实时显示日志信息,同时当前目录生成renode_YYYY-MM-DD.log文件。

固件与仿真脚本

准备一个简单的UART回显固件echo.elf(由STM32CubeIDE编译生成,功能为:收到一个字节后原样发送回UART)。创建仿真脚本test_logs.resc:


:name=LogTest
:description=Test logging output
include @platforms/cpus/stm32f4-discovery.repl
machine LoadPlatform @platforms/boards/stm32f4-discovery.repl

showAnalyzer UART1
machine Uart1 CreateFileBackend @uart_output.txt

sysbus LoadELF @echo.elf
start

脚本加载平台与固件,启动UART1分析器,并将UART1输出同时重定向到终端与uart_output.txt文件。

验证方法

在Renode的Mono控制台中执行以下命令发送测试数据:


uart1 WriteChar 0x41

预期结果:

  • 控制台日志中出现类似2025-01-01 12:00:00.1234|DEBUG|UARTPort|WriteChar: 0x41的记录;
  • uart_output.txt文件中包含字符A(0x41);
  • renode_*.log文件中记录了UART外设访问与CPU执行事件。

判定标准:日志文件与控制台均出现UART写入记录,且uart_output.txt内容与发送数据一致,即日志系统配置成功。

日志级别动态调整

若需减少日志量,可在启动后通过Mono控制台动态调整:


logLevel SetLevel Warning

该命令将全局日志级别提升至Warning,仅输出警告与错误信息,便于过滤调试噪声。

Renode日志系统配置与数据流 Renode 仿真核心 STM32F4 CPU Cortex-M4 执行 UART1 外设 数据收发 日志源 外设/CPU事件 日志输出目标 控制台 实时显示 renode_日期.log 文件持久化 uart_output.txt UART数据流 NLog 配置 logger.nlog 级别: Debug 规则: * → console,file 启动命令: renode --nlog-config logger.nlog -e "include @platforms/cpus/stm32f4-discovery.repl; ..."

关键点说明

  • 日志配置通过--nlog-config参数在启动时加载,无需修改Renode源码;
  • minlevel="Debug"会输出大量外设访问日志,生产环境建议设为Info或Warning;
  • UART数据流与系统日志分离:前者通过CreateFileBackend独立记录,后者由NLog统一管理。