Linux 通过虚拟串行端口从主机连接到 VirtualBox Guest

Linux 通过虚拟串行端口从主机连接到 VirtualBox Guest

我需要从没有网络支持的客户虚拟机中检索配置文件。最简单的方法可能是使用串行端口。据我所知,我需要创建一种串行端口“循环”,以便我使用 minicom 连接到 /dev/vttyS0,并将 /dev/vttyS1 分配给 VirtualBox 客户机。

客人使用波特率为115200。我该如何创建这样的设备对?

我尝试了socat:

socat -d -d pty,raw,echo=0 pty,raw,echo=0

然而 VirtualBox 似乎无法理解它作为正确的串行设备抛出错误

Ioctl failed for serial host device /dev/pts/10 (VERR_INVALID_PARAMETER)
Device will not work properly

ErrorID DrvHostSerialFail
Severity Warning

答案1


首先在主机操作系统中设置串行控制台设置。
在虚拟盒设置中,
串行端口 --> 端口 1
端口号。COM1
端口模式 - 主机管道
连接到现有管道/socked - 未选中
路径/地址:/tmp/vbox
现在,设置 Minicom
sudo minicom -s -c on
串行端口设置
串行设备:unix#/tmp/vbox
退出


在客户机中启用串行控制台
sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX="控制台=ttyS0,115200n8控制台=tty0 ignore_loglevel"
sudo 更新 grub
现在在控制台 ttyS0 上启用 getty
对于 Upstart 系统
1)创建一个名为 /etc/init/ttyS0.conf 的文件,其中包含以下内容:

# ttyS0-盖蒂
#
# 此服务从系统启动时起在 ttyS0 上维护一个 getty
# 启动直到再次关闭。

停止后启动 rc RUNLEVEL=[12345]
在运行级别停止 [!12345]

重生执行/sbin/getty -L 115200 ttyS0 vt102

2)要求 upstart 启动 getty

sudo 启动 ttyS0


对于 Systemd 系统

# sudo systemctl 启用[电子邮件保护]
# sudo systemctl 启动[电子邮件保护]
# sudo systemctl 守护进程重新加载


现在重新启动你的客户操作系统,你将通过 minicom 在主机操作系统上获得串行控制台

答案2

主机与客户机之间的连接方式是

  1. 在 VirtualBox 中以“主机管道”模式创建串行端口,路径例如 /dev/vboxttyS0。
  2. 在客户机中启用该串行端口
  3. 使用socat unix-connect:/dev/vboxttyS0 -,b57600或,socat unix-connect:/dev/vboxttyS0 -,raw,echo=0在我的特定情况下效果更好。

我联系了操作系统供应商,结果发现串行端口必须明确启用,即使在裸机设备上它们默认是启用的 :/

相关内容