【问题标题】:Serial Port Connection Between Host and Guest with Virtualbox使用 Virtualbox 的主机和来宾之间的串行端口连接
【发布时间】:2013-03-30 14:32:33
【问题描述】:

我正在尝试学习如何编写将从 Linux 中的串行端口读取的 C 代码。我发现似乎是一个很好的教程here

我希望能够测试这段代码,所以我认为我需要一个串行端口,或者在读取上面的代码时写入串行端口的方法。

我正在使用 virtualbox 在我的 Mac 上将 Ubuntu 10.04 作为虚拟机运行。我的想法是建立一个虚拟串行连接并从主机写入来宾。希望在主机终端中像cat "Hello World" > /tmp/fake_serial 这样简单,并且可以由上面链接中的程序读取。

这可能吗?我尝试使用虚拟盒添加串行端口,当我尝试执行上述命令时,我收到一条错误消息,提示我无法写入套接字。

我想到的第二个选项是在来宾操作系统中使用类似minicom 的东西来连接到/dev/ttyS1 并同时为我的代码编写消息以读取。同样,假设波特率和其他设置都可以,这可能吗?

我没有很多使用串行端口的经验,所以如果我能提供任何关于最佳方式的建议,我将不胜感激。提前致谢。

【问题讨论】:

    标签: c serial-port virtualbox


    【解决方案1】:

    当我不得不从我的真实机器到虚拟机进行一些串行端口测试时,我最终进行了“环回”类型测试。我拿了两个USB-Serial converters 和一个RS232 F-F adaptor 并将我的机器连接到自身。然后在设置-> USB 下的 VirtualBox 中,您可以将两个 USB 串行转换器之一路由到您的 VirtualBox“拥有”。

    一旦您插入转换器,一个将在 Mac 上注册,一个在 Ubuntu“计算机”上注册,然后您可以在两台机器之间正常进行串行通信。

    您也许还可以使用 pty(“伪电传”设备)emulate a virtual serial port,但我对此并不积极,因为我认为这样做的能力已被锁定在较新的内核中。

    【讨论】:

    • 感谢您的建议,不幸的是我没有所需的适配器,所以我自己想出了一个解决方法。
    【解决方案2】:

    所以为了让它工作,我只是在 VirtualBox 上添加了另一个 Ubuntu VM,并通过虚拟串行端口将两者连接在一起。我用于大量开发的主要原始 VM 将被称为 VM1。新的 VM 带有一个仅用于向 VM1 发送消息的小型硬盘驱动器,将被称为 VM2。这些都是 Ubuntu 10.04 虚拟机。

    在 VirtualBox 中转到 VM1 的设置,转到端口,然后按如下方式更改设置:

    现在进入VM2,选择设置,端口,然后修改如下:

    现在首先需要启动 VM1。启动后,启动 VM2。现在您可以在 VM1 中打开一个终端,然后输入 screen /dev/ttyS0 38400(在此之前您可能需要运行 sudo apt-get install screen)。然后进入VM2,打开终端,输入echo "Hello" > /dev/ttyS0

    您应该会看到Hello 出现在 VM1 中打开的终端中。当你运行完屏幕按ctrl-a k 杀死它,否则如果你尝试用串口做其他事情,你可能会收到一条错误消息,说端口忙。

    【讨论】:

    • 谢谢。这正是我正在寻找的:D 我只有一个问题:有没有办法只使用一个 VM 并使用主机写入管道?
    • 这对我有用,只要我使用 screen 命令发出 sudo:“sudo screen /dev/ttyS0 38400”
    【解决方案3】:

    我在 Ubuntu 14.04 主机上使用 VirtualBox 5.0.10 运行 QNX 来宾时遇到了类似的情况。

    我的解决方案似乎足以适用于上述案例。

    我以与 Kells1986 设置他的 VM1 相同的方式配置来宾 VM:

    在“串行端口”/“端口 1”选项卡下:

    • 勾选“启用串口”
    • 将“端口号”设置为“COM1”
    • 将“IRQ”设置为“4”
    • 将“I/O 端口”设置为“0x3F8”
    • 将“端口模式”设置为“主机管道”
    • 取消选中“连接到现有管道/套接字”
    • 将“路径/地址”设置为可访问的文件系统路径(例如“/home/safayet/vmSerialPipe”)

    根据VirtualBox manual

    您可以告诉 VirtualBox 将虚拟串行端口连接到 主机上的软件管道。 ...在 Mac、Linux 或 Solaris 主机上,使用本地域套接字 ...在 Linux 上,有各种工具可以连接到本地域套接字或在服务器模式下创建一个。最灵活的工具是 socat,它作为许多发行版的一部分提供。

    domain socket 是类似于管道的IPC mechanism on UNIX systems

    我使用socat命令连接到Ubuntu主机上虚拟串口的“管道”端:

    socat - UNIX-CONNECT:/home/safayet/vmSerialPipe
    

    【讨论】:

    • 如何从 (Linux) 主机连接到访客串行端口——正是我想要的。
    猜你喜欢
    • 2017-09-03
    • 2013-06-23
    • 2017-04-29
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    • 2013-09-30
    • 2011-04-20
    • 2018-08-27
    相关资源
    最近更新 更多