![Linux 通过虚拟串行端口从主机连接到 VirtualBox Guest](https://linux22.com/image/1534221/Linux%20%E9%80%9A%E8%BF%87%E8%99%9A%E6%8B%9F%E4%B8%B2%E8%A1%8C%E7%AB%AF%E5%8F%A3%E4%BB%8E%E4%B8%BB%E6%9C%BA%E8%BF%9E%E6%8E%A5%E5%88%B0%20VirtualBox%20Guest.png)
我需要从没有网络支持的客户虚拟机中检索配置文件。最简单的方法可能是使用串行端口。据我所知,我需要创建一种串行端口“循环”,以便我使用 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
主机与客户机之间的连接方式是
- 在 VirtualBox 中以“主机管道”模式创建串行端口,路径例如 /dev/vboxttyS0。
- 在客户机中启用该串行端口
- 使用
socat unix-connect:/dev/vboxttyS0 -,b57600
或,socat unix-connect:/dev/vboxttyS0 -,raw,echo=0
在我的特定情况下效果更好。
我联系了操作系统供应商,结果发现串行端口必须明确启用,即使在裸机设备上它们默认是启用的 :/