Virtualbox Serial Port Host Pipe Windows 7

Active2 years, 3 months ago

I am having a difficult time trying to access a serial port on VirtualBox. My Guest OS is Windows XP and the host environment is Linux Ubuntu 10.04.

On a Windows host, this will be a name like COM1. On Linux or Oracle Solaris hosts, it will be a device node like /dev/ttyS0. Oracle VM VirtualBox will then simply redirect all data received from and sent to the virtual serial port to the physical device. Host Pipe: Configure Oracle VM VirtualBox to connect the virtual serial port to a software.

The serial modem device works perfectly in Ubuntu. I can communicate with it via cutecom or just sending plain echo messages to it like so:

Ubuntu Settings and config

I have added my user account to the following group: dialout and have set the serial using the following command: sudo setserial /dev/ttyS2 but still no luck when trying to access it in my Guest OS.

Heres the settings I use to configure the serial port in VirtualBox:

I have tried all the different port modes even disconnected but still no luck. I have consulted the manual aswell but nothing works. What could be wrong? Is it virtualbox or are my ubuntu settings configured incorrectly?

Please help

Thanks

Takkat
112k40 gold badges260 silver badges385 bronze badges
Bosvark

2 Answers

Setting up a serial port for VirtualBox is not easy, mainly because of many options on how to transfer data from the host to the guest. For transferring data from/to an attached device (here a modem) the following settings should work:

Of course you will have to adopt setting for your device on the host (that would be /dev/ttyS2 in your case).

If using an IRQ greater than 15 for the host you will have to enable I/O APCI as shown here:

After a setup depicted in the example here your Windows guest will see a virtual type 16450 serial port on COM1 using IRQ4 and I/O Port 0x3F8. Data will be transferred from and to host device /dev/ttyS20.

TakkatTakkat
112k40 gold badges260 silver badges385 bronze badges

If you are running a Windows host and a Linux Guest - you would use 'COM#:' for the port/file path. Port Mode: Host Device.

If you are running a Linux host and a Windows Guest - you would use '/dev/ttyS#' for the port/file path. Port Mode: Host Device.

Switch Port Host Command

Where # is the number of the port.

tfmontaguetfmontague
Active1 year, 4 months ago

I am running a certain application on Ubuntu (16.04) in VirtualBox, while VirtualBox is running on Windows 10 (host).

In Simulink (running on my host), I have a simulation where at the last stage, I gather some values. I want to output these values over a serial connection at a certain baud rate to the application that is running on VirtualBox (i.e. QGroundControl station).

So first part of my question - VirtualBox:

In VirtualBox, I enabled the serial port and chose a host pipe in port mode, as shown in:

In the picture you can see that COM6 is used, but I used COM1 and COM2 instead. I got the same result for both.

I am not that used to working with VirtualBox, so I don't really know if this means I have now created a connection between my host and guest or if I still need to activate or connect them in any way?

Second part of my question - Simulink:

In Simulink, I want to output my values using a serial send (because I think that is the easiest way? If there is a better way, please tell me), but if I want to select a port, no ports are shown, as you can see in:

What do I need to do/change in VirtualBox/Simulink to get my COM port to show up?

Last part - MATLAB:

Because in Simulink, no COM ports were shown. I wanted to check for available ports in MATLAB, but apparently all my ports are closed:

If I try to open one of my ports by using the fopen()-command, I get this message:

Error using serial/fopen
Open failed: Port: COM1 is not available. No ports are available.
Use INSTRFIND to determine if other instrument objects are connected to the requested device.
Using 'INSTRFIND' shows that all ports are closed.

Virtualbox Serial Port Host Pipe Windows 7Peter Mortensen
14.4k19 gold badges88 silver badges117 bronze badges

Windows 7 Virtualbox Download

LisLis

1 Answer

First of all, VirtualBox won't create a serial port for your host. So you have to create two virtual COM ports on the host using some other software and bridge these two ports virtually. Then use one port to connect to Simulink and other must be setup in such a way that VM COM port uses this port.

For creating a virtual COM port on Windows I will be using com0com fromFaking an RS232 Serial Port. You can use any software you like.

After installing com0com, open setuppg.exe from C:Program Files (x86)com0com.

Now click apply. Now you will have COM9 and COM10 bridged (it's like COM9 and COM10 are internally connected).

Next we need to connect COM9 port in Host to COM1 port in Guest OS for that open Oracle VM VirtualBox Manager and open the settings of your required virtual machine. Now, select Serial Ports and setup like shown below and click OK.

NOTE: Windows provides legacy names only for COM ports 1 through to 9. For all other COM ports you must use the full device naming convention under Windows. So if you decide to use COM10 instead of COM9, using COM10 at Path/Address won't work. Instead you have to use .COM10.

Now start your virtual machine, and your ports are ready. Now ports will be shown in Simulink and connect to COM10 in this scenario and in the virtual machine, connect your QGroundControl station to COM1.

Serial

Simulink <--> COM10 (Host)

COM10 (Host) <--> COM9 (Host) >> Connected using com0com

Virtualbox Serial Port Mode

COM9 (Host) <--> COM1 (Guest) >> Connected by Oracle VM VirtualBox

COM1 (Guest) <--> QGroundControl station

Peter Mortensen
14.4k19 gold badges88 silver badges117 bronze badges
Rijul SudhirRijul Sudhir
1,7941 gold badge9 silver badges17 bronze badges
Got a question that you can’t ask on public Stack Overflow? Learn more about sharing private information with Stack Overflow for Teams.

Not the answer you're looking for? Browse other questions tagged matlabvirtualboxcommunicationsimulinkqgroundcontrol or ask your own question.