如何在Zephyr-RTOS Linux仿真环境中模拟嵌入式板串口用于测试
Zephyr-RTOS 虚拟串口模拟方案建议
核心方案:Native POSIX 目标 + 虚拟串口对
Zephyr的native_posix模拟目标完全匹配你的需求,配合Linux的虚拟串口对(ptmx/pts),可以实现类似BSD管道的背靠背通信,且无需修改业务代码即可切换物理串口。核心依赖是Zephyr内置的uart_native_posix驱动,它能将Zephyr的串口API直接映射到Linux主机的虚拟/物理串口设备。
配置步骤
启用必要的Kconfig选项
在项目的prj.conf中添加:CONFIG_NATIVE_POSIX=y CONFIG_SERIAL=y CONFIG_UART_NATIVE_POSIX=y CONFIG_CONSOLE=y # 若需将系统控制台映射到串口创建Linux虚拟串口对
使用socat工具创建配对的虚拟串口(需提前安装socat):socat PTY,link=/dev/ttyZephyr0,mode=666 PTY,link=/dev/ttyZephyr1,mode=666执行后,
/dev/ttyZephyr0和/dev/ttyZephyr1会形成双向通信的串口对,权限设置为666可避免主机端权限问题。映射Zephyr串口到虚拟设备
有两种配置方式可选:- 动态参数指定:编译后运行Zephyr程序时直接指定串口设备:
west build -b native_posix ./build/zephyr/zephyr.exe --uart0=/dev/ttyZephyr0 - 设备树静态配置:创建
overlay.dts覆盖默认串口节点:
编译时指定overlay:&uart0 { status = "okay"; compatible = "zephyr,native-posix-uart"; current-speed = <115200>; zephyr,uart-raw-device = "/dev/ttyZephyr0"; };west build -b native_posix -DDTC_OVERLAY_FILE=overlay.dts
- 动态参数指定:编译后运行Zephyr程序时直接指定串口设备:
连接测试驱动
你的Linux测试驱动直接连接配对的/dev/ttyZephyr1即可与Zephyr系统通信,通信逻辑和物理串口完全一致。
物理串口切换方案
无需修改业务代码,仅需调整配置即可切换到硬件测试:
- 关闭Native POSIX相关配置:
CONFIG_NATIVE_POSIX=n CONFIG_UART_NATIVE_POSIX=n - 启用目标硬件的串口驱动(以STM32为例):
CONFIG_UART_STM32=y CONFIG_UART_STM32_USART1=y # 根据硬件选择对应串口 - 调整设备树,启用硬件串口节点(如STM32的
&usart1),设置引脚、波特率等参数。
CI/集成测试适配
在Docker环境中可自动化完成:
- 预装
socat和Zephyr开发工具链; - 编写脚本自动创建虚拟串口对;
- 后台启动Zephyr模拟程序;
- 运行测试脚本连接配对串口,执行业务逻辑测试。
内容的提问来源于stack exchange,提问作者KentH
相关产品推荐
相关产品推荐

