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]