RISCV日志保存功能使用参考

1. 概述

RISCV RTOS 终端支持两种输入输出模式:

  • 通过 uart 通讯输入输出终端信息
  • 通过共享内存将 RTOS 终端输入输出重定位到 Linux 终端

目前 RTOS 终端默认采用 uart 通讯作为输入输出,本文主要介绍如何如何启用上文描述的第二种输入输出方式。

2. RTOS 用法介绍

2.1. CONFIG 配置

修改位于mak/options_chipname_riscv_isw.mak config 文件中的 CONFIG_CONSOLE_OUTPUT_MODE配置为BUFFER_MODE

# Feature_Name = [SYS] Select defaule console output mode
# Description = Select default console output mode
# Option_Selection = DIRECT_MODE, BUFFER_MODE
CONFIG_CONSOLE_OUTPUT_MODE = BUFFER_MODE

CONFIG_CONSOLE_OUTPUT_MODE 配置为 DIRECT_MODE 时,终端日志会直接输出到 uart;配置为 BUFFER_MODE 时,终端日志将会输出到 RTOS 系统内部的环形缓冲区(ring buffer)中,可以通过配置 SYS 文件选择通过 uart 输出到终端软件中,或者输出到 Linux 终端。

2.2. SYS 配置

修改位于sc/driver/sysdriver/sysdesc/hal/pcupid/pub/pcupid-default.sys文件中的console节点mode_u8属性为1

<console>
    [mode_u8] 0;
    [poll_size_u16] 1024;
    [poll_timeout_u16] 1000;
    [status_u8] 1;
属性 描述 设定值 备注
mode_u8 mode_u8配置为0时,终端日志将会通过 uart 输出到终端软件上;配置为1时,终端日志将保存在环形缓冲区中。 默认值为0 可根据需要修改
poll_size_u16 设置log存储的bufsize,达到对应size后即会触发通知arm保存log 默认值为1024 byte 可根据需要修改
poll_timeout_u16 设定Log超时时间,如果超时时间到了 但是Log size没有达到poll size, 触发arm 保存log 单位ms,默认为1秒 可根据需要修改
status_u8 选择是否使能驱动 1:enable,0:disable 可根据需要修改

3. 使用方法

3.1. 命令行测试

配置正确后,可以看到 RISCV uart无任何输出,此时可以通过 Linux 下的 procfs 控制 RISCV RTOS,输出 RTOS 命令到 RTOS 终端:

/ # echo cli version > /proc/dualos/rtos

获取 RTOS 终端命令执行日志:

/ # cat /proc/dualos/log
cli - 'version'

Build on 14:54:18 Jun 26 2024
FreeRTOS V10.4.4+
g22cf99b[rtk][master_riscv]

范例中的version命令可以替换成任意 RTOS 支持的命令。

3.2. 使用 demo 程序测试

3.2.1. 编译 demo 程序

进入 sdk/verify/sample_code 目录,执行以下命令编译 demo:

cd sdk/verify/sample_code
make clean && make source/pcupid/riscv/riscv_log_save_demo

编译生成的可执行文件位于如下路径:

sample_code/out/arm64/app/prog_riscv_riscv_log_save_demo

3.2.2. 运行 demo 程序

将编译生成的可执行文件 prog_riscv_riscv_log_save_demo 放到板子上,并为 prog_riscv_riscv_log_save_demo 文件增加可执行权限,执行如下命令开始抓取日志:

chmod +x prog_riscv_riscv_log_save_demo
./prog_riscv_riscv_log_save_demo riscv.log

其中 riscv.log 为指定的日志输出文件。输入测试命令:

echo cli version > /proc/dualos/rtos echo cli version > /proc/dualos/rtos ...

以上指令需要执行多次,这样当 RISCV RTOS 输出的日志达到一定数量时 demo 就会抓取到输出的日志并在 Linux 终端有类似如下的输出:

./prog_riscv_riscv_log_save_demo riscv.log
write 0 bytes log data to log file
write 1035 bytes log data to log file

此时可以执行 CTRL + C 停止程序并结束日志抓取。打开 riscv.log 就能够看到 RISCV RTOS 输出的日志了:

/ # cat riscv.log
cli - 'version'

Build on 14:54:18 Jun 26 2024
FreeRTOS V10.4.4+
g22cf99b[rtk][master_riscv]

cli - 'version'

Build on 14:54:18 Jun 26 2024
FreeRTOS V10.4.4+
g22cf99b[rtk][master_riscv]