我正在尝试学习如何编写将从Linux中的串行端口读取的C代码。我发现了一个好的教程here。
我希望能够测试这段代码,所以我认为我需要一个串口,或者在上面的代码正在读取时写入串口的方法。
我正在使用virtualbox在我的Mac上运行Ubuntu 10.04作为虚拟机。我的想法是建立虚拟串行连接并从主机写入访客。希望在主机终端中像cat "Hello World" > /tmp/fake_serial
一样简单,并且在上面的链接中由程序读取。
这可能吗?我尝试使用虚拟框添加串口,当我尝试执行上述命令时,出现错误,说我无法写入套接字。
我想到的第二个选项是在客户操作系统中使用类似minicom
的内容,连接说/dev/ttyS1
并为我的代码写入消息同时读取。再次,假设波特率和其他设置都可以,这可能吗?
我没有很多使用串口的经验,所以我很感激有关最佳方法的建议。提前致谢。
答案 0 :(得分:5)
为了实现这一点,我在VirtualBox上添加了另一个Ubuntu VM,并通过虚拟串口将两者连接在一起。我用于大量开发的主要原始VM将被称为VM1。具有仅用于向VM1发送消息的小型硬盘的新VM将被称为VM2。这些都是Ubuntu 10.04 VM。
在VirtualBox中,转到VM1的设置,转到端口,然后按如下所示更改设置:
现在转到VM2,然后选择设置,端口,然后按如下所示进行更改:
现在首先需要启动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”选项卡下:
您可以告诉VirtualBox将虚拟串口连接到 主机上的软件管道。 ...在Mac,Linux或Solaris主机上,使用本地域套接字...在Linux上,有各种工具可以连接到本地域套接字或在服务器模式下创建一个。最灵活的工具是
socat
,可作为许多发行版的一部分使用。
domain socket
是IPC mechanism on UNIX systems,类似于管道。
我使用socat
命令连接到Ubuntu主机上虚拟串行端口的“管道”端:
socat - UNIX-CONNECT:/home/safayet/vmSerialPipe