RT_Vterm 是基于 RT-Thread 内核与 RT-Tunnel 组件的虚拟终端组件,核心功能是实现嵌入式系统的 I/O 重定向、双向数据传输与命令交互。该组件通过 RT-Tunnel 的 “上下行隧道”(up_tunnel/down_tunnel)实现数据可靠传输,兼容 RT-Thread 字符设备模型,支持将控制台 / FinSH 输出切换到虚拟终端,同时提供命令注册、输入辅助等功能,适用于远程调试、串口复用、Web 终端扩展等场景。
- 基于 RT-Tunnel 双向传输:通过
up_tunnel(上行,设备→主机,ID:0x56545455)和down_tunnel(下行,主机→设备,ID:0x56545444)实现数据隔离与可靠传输,支持线程安全读写。 - RT-Thread 设备模型兼容:注册为 “vterm” 字符设备,支持
open/read/write标准接口,可直接作为控制台或 FinSH 的 I/O 设备。 - 灵活 I/O 切换与恢复:提供
vterm_console命令将控制台 / FinSH 切换到虚拟终端,restore_original命令恢复原始 I/O 设备(如物理串口),切换过程无数据丢失。 - 命令注册与输入辅助:支持自定义命令注册(最大 8 条,
vterm_cmd_register接口),提供vterm_input_assist_thread线程处理输入回显、换行转换(\n→\r\n),适配终端显示习惯。 - 多模式数据读写:
- 阻塞读:
RT_Vterm_WaitKey阻塞等待并读取 1 字节; - 非阻塞读:
RT_Vterm_GetKey无数据时返回 -1; - 单字符写:
RT_Vterm_PutChar简化单个字符传输; - 缓冲区状态查询:
RT_Vterm_HasData检查下行数据是否就绪。
- 阻塞读:
- 自动换行转换:写入数据时自动将
\n转为\r\n,确保终端显示换行正常,无需手动处理格式。
RT_Vterm 需在 RT-Tunnel 初始化后启动,推荐初始化顺序:
- 初始化 RT-Tunnel:确保
RT_Tunnel_Init先执行(通常自动初始化); - 初始化 RT_Vterm:调用
RT_Vterm_Init分配上下行隧道并配置操作模式; - shell切换到虚拟终端设备:调用
rt_hw_vterm_console_init注册 “vterm” 字符设备,并对接shell;
确保 RT-Tunnel 已启用,且 TUNNEL_NUM 至少为 2