Serial Port Connection Between Host and Guest with Virtualbox
c, serial-port, virtualbox
Solution
So to get this working I just added another Ubuntu VM on VirtualBox, and connected the two together via a virtual serial port. My main, original VM, which I use for a lot of developing will be referred to as VM1. The new VM, with a small hardrive that will only be used for sending messages to VM1 will be called VM2. These are both Ubuntu 10.04 VMs.
In VirtualBox go to Settings for VM1, go to ports, and change the settings as follows:
Now go to VM2, and select settings, ports, then change as follows:
Now first you need to start VM1. When that's booted then boot VM2. Now you can open a terminal in VM1, and type `screen /dev/ttyS0 38400` (you may need to run `sudo apt-get install screen` before this works). Then go to VM2, open a terminal, and type `echo "Hello" > /dev/ttyS0`.
You should see `Hello` appear in the terminal open in VM1. When you're done running screen press `ctrl-a k` to kill it, otherwise if you try to do other stuff with the serial port you may get an error message saying that the port is busy.
Problem
I'm trying to learn how to write C code that will read from the serial port in Linux. I've found what seems to be a good tutorial here. I want to be able to test this code, so I think I need either a serial port, or a way to write to the serial port while the code from above is reading. I'm running Ubuntu 10.04 as a virtual machine on my Mac using virtualbox. My idea was to set up a virtual serial connection and write from the host to the guest. Hopefully something as simple as `cat "Hello World" > /tmp/fake_serial` in a host terminal, and for that to be read by the program in the link above. Is this possible? I've tried adding a serial port using virtual box and when I try to do the above command I get an error saying I can't write to a socket. The second option I thought of was using something like `minicom` inside the guest OS, to connect to say `/dev/ttyS1` and write messages for my code to read at the same time. Again, assuming that the baud rates and other settings are OK, would this be possible? I don't have a lot of experience working with serial ports, so I'd appreciate any suggestions about the best way to do this. Thanks in advance.