linux虚拟机访问串口的关键在于虚拟机软件是否将宿主机串口正确映射给客户机,需关机配置并兼顾宿主机可用性、虚拟机映射和客户机权限三方面。

Linux 虚拟机要访问串口,关键不是“Linux系统本身”,而是虚拟机软件(如 VMware 或 VirtualBox)是否把宿主机的串口资源正确暴露给客户机。配置必须在虚拟机关机状态下完成,且需兼顾宿主机串口可用性、虚拟机设备映射和客户机权限三方面。
确认宿主机串口资源
先查清楚物理串口是否存在或能否被识别:
- Windows 宿主机:打开设备管理器 → 查看“端口(COM 和 LPT)”,记下实际可用的 COM 口(如 COM3);
- Linux 宿主机:运行 cat /proc/tty/driver/serial,带 tx 和 rx 字样的行对应真实串口,编号 0 即 /dev/ttyS0;
- 若无物理串口,可借助第三方工具(如 Windows 下的 com0com、Virtual Serial Port Driver)创建一对虚拟 COM 口(如 COM11 ↔ COM12),再将其映射进虚拟机。
在虚拟机中添加并配置串口设备
以 VMware Workstation 为例(VirtualBox 类似,路径略有不同):
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 关机状态下右键虚拟机 →「设置」→「添加」→「串行端口」→「完成」;
- 选中新增的串口 → 勾选「启动时连接」;
- 模式选择:
- 若用物理串口:选「使用本机物理串行端口」→ 输入宿主机上的 COM 号(Windows)或设备路径(Linux,如 /dev/ttyS0);
- 若用命名管道(推荐用于双串口通信):选「使用命名管道」→ 管道名填 \.pipemyserial(Windows)或 /tmp/myserial(Linux 宿主机)→ 下方勾选「该端是服务器」(第一个串口)或「该端是客户端」(第二个串口);
- 重复上述步骤添加第二个串口,确保两个串口指向同一管道或配对虚拟 COM 口。
在 Ubuntu 等客户机中启用访问权限
即使设备已识别,普通用户默认无权读写串口:
- 查看设备是否存在:ls -l /dev/ttyS*(常见为 /dev/ttyS0、/dev/ttyS1);
- 将当前用户加入 dialout 组:sudo usermod -a -G dialout $USER;
- 注销并重新登录(或重启虚拟机),使组权限生效;
- 验证权限:运行 echo test > /dev/ttyS0 不报 Permission denied 即成功。
验证串口是否工作
简单测试收发连通性:
- 开两个终端,一个监听:cat /dev/ttyS0;
- 另一个发送:echo "hello" > /dev/ttyS0(注意:若监听与发送为同一端口,需短接 TX/RX 引脚或用环回线;更推荐用两个串口,如 ttyS0 发 → ttyS1 收);
- 或使用工具如 minicom 或 cutecom 配置波特率后交互测试。










