使用Virtualbox在主机和来宾之间建立串行端口连接

时间:2013-04-08 13:26:07

标签: c serial-port virtualbox

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

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

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

这可能吗?我尝试使用虚拟框添加串口,当我尝试执行上述命令时,出现错误,说我无法写入套接字。

我想到的第二个选项是在客户操作系统中使用类似minicom的内容,连接说/dev/ttyS1并为我的代码写入消息同时读取。再次,假设波特率和其他设置都可以,这可能吗?

我没有很多使用串口的经验,所以我很感激有关最佳方法的建议。提前致谢。

3 个答案:

答案 0 :(得分:5)

为了实现这一点,我在VirtualBox上添加了另一个Ubuntu VM,并通过虚拟串口将两者连接在一起。我用于大量开发的主要原始VM将被称为VM1。具有仅用于向VM1发送消息的小型硬盘的新VM将被称为VM2。这些都是Ubuntu 10.04 VM。

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

现在转到VM2,然后选择设置,端口,然后按如下所示进行更改:

VM2 Settings

现在首先需要启动VM1。当它启动时,然后启动VM2。现在,您可以在VM1中打开终端,并键入screen /dev/ttyS0 38400(在此工作之前,您可能需要运行sudo apt-get install screen)。然后转到VM2,打开终端,然后键入echo "Hello" > /dev/ttyS0

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

答案 1 :(得分:1)

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

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

你也可能emulate a virtual serial port使用pty(“伪电传”设备),但我对这一点并不乐观,因为我认为这样做的能力被锁定在较新的内核中。

答案 2 :(得分:1)

我遇到了类似的情况,在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 socketIPC mechanism on UNIX systems,类似于管道。

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

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