VirtualBox虚拟机串口输出配置

目录


1. 虚拟串口原理简介

  • VirtualBox 可模拟标准 16550A UART 串口(如 COM1,I/O 0x3F8)。
  • 虚拟串口可重定向到主机的管道、文件、TCP 端口等,便于调试和日志采集。
  • 虚拟串口与物理串口功能一致,Linux 内核和 GRUB 可直接识别并输出信息。

补充说明:

  • 大部分桌面版 Linux 镜像(如 Ubuntu Desktop、Fedora Workstation 等)默认启用 VGA 终端,无需特殊配置即可在虚拟机窗口看到终端和图形界面。
  • 但部分嵌入式、服务器或定制 Linux 镜像(如 ONIE、OpenWrt、某些最小化发行版)仅启用串口终端,此时虚拟机窗口(VGA)只显示 GRUB 菜单,Linux 启动后无任何输出。
  • 这时必须正确配置虚拟串口,并在内核启动参数中添加 console=ttyS0,115200 等,才能在串口终端(如 PuTTY、minicom)看到 Linux 的输出。

2. VirtualBox 虚拟串口配置

Windows 主机下配置步骤

  1. 虚拟机设置 → 串口 → 启用串口1(COM1,0x3F8,IRQ 4)。
  2. 端口模式选"主机管道(Host Pipe)“,路径如 \\.\pipe\vboxcom1,(规定需使用\.\pipe\name格式)勾选"创建管道”。
  3. 启动虚拟机后,用 PuTTY 连接 \\.\pipe\vboxcom1,即可看到串口输出。

其他模式

  • 输出到文件:

    1. 选择"原始文件"模式
    2. 指定输出文件路径,如 C:\vbox_serial.log
    3. 可选择"创建文件"或"追加到文件"
    4. 虚拟机启动后,串口输出会直接写入该文件
  • 输出到 TCP:

    1. 选择"TCP"模式
    2. 设置主机 IP(如 127.0.0.1)和端口(如 23)
    3. 选择"服务器"或"客户端"模式:
      • 服务器模式:虚拟机等待主机连接
      • 客户端模式:虚拟机主动连接主机
    4. 主机用 telnet/nc 等工具连接对应端口:
      telnet 127.0.0.1 23
      # 或
      nc 127.0.0.1 23
      
  • 输出到物理串口:

    1. 选择"主机设备"模式
    2. 指定主机实际串口,如 Windows 的 COM1 或 Linux 的 /dev/ttyS0
    3. 需确保主机串口未被其他程序占用
    4. 可用物理串口线连接其他设备查看输出

3. Linux 串口设备节点说明

  • 串口设备节点为 /dev/ttyS0(第一个串口),由内核+udev自动生成。
  • 查看设备信息:
    udevadm info -a -n /dev/ttyS0
    dmesg | grep ttyS
    

4. GRUB 控制台参数设置

同时输出到 VGA 和串口

  1. 编辑 /etc/default/grub
    GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200"
    
  2. 更新 GRUB 并重启:
    sudo update-grub
    sudo reboot
    
  3. 可选:让 GRUB 菜单本身输出到串口,在 /etc/grub.d/40_custom 添加:
    serial --unit=0 --speed=115200
    terminal_input serial console
    terminal_output serial console
    

5. 常见问题与排查

5.1 权限不足

  • 报错 Permission denied
    • 临时:echo "xxx" | sudo tee /dev/ttyS0
    • 长期:sudo usermod -aG dialout $USER,重登生效。

5.2 没有串口输出

  • 检查内核参数是否有 console=ttyS0,115200
  • 检查虚拟机串口配置是否正确。
  • dmesg | grep console 查看实际控制台。

6. 参考命令与技巧

  • 查看当前内核启动参数:
    cat /proc/cmdline
    
  • 查看串口设备信息:
    udevadm info -a -n /dev/ttyS0
    
  • 监听串口事件:
    udevadm monitor --udev
    
  • 发送信息到串口:
    echo "Hello Serial" | sudo tee /dev/ttyS0
    
  • 串口终端工具:
    sudo minicom -D /dev/ttyS0 -b 115200
    sudo screen /dev/ttyS0 115200
    

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐