[Note: This post has been edited to reflect updates in recent software drops.]
This is a description of the various types of serial ports the Edison provides in conjunction with the breakout boards.
Name: “Multi-gadget” or “Firmware Programming” or "Serial console" or "OTG" port.
Location: USB-micro connector near center of Arduino board.
Arduino SW name: Serial
Linux name: /dev/ttyGS0
This is the port you use to program your Edison/Arduino, and also the default port for the Serial console inside the Arduino IDE. If the correct drivers are installed, this port also provides access to a USB storage partition and an RNDIS network interface (hence the name “multi-gadget”). When using the Arduino adapter board, this port is only active when SW1 is set to “device” mode, that is, the position closest to the multi-gadget port connector.
Name: UART1, the general-purpose TTL-level port (Arduino shield compatibility).
Location: Pins 0 (RX) and 1 (TX) on the Arduino shield interface headers.
Arduino SW name: Serial1
Linux name: /dev/ttyMFD1
This is the port that is exposed to an Arduino shield on pins 0 and 1, creating a simple 5V TTL interface to an external device.
Name: UART2, “Linux kernel debug” or “debug spew” port.
Location: USB-micro connector near edge of Arduino board.
Arduino SW name: Serial2
Linux name: /dev/ttyMFD2
This is a very useful port to connect to for debugging, especially when trying to isolate boot problems. The kernel generates its debug “spew” to this port at 115,200 baud. I find it useful to always have a PuTTY terminal console connected to this. When the Serial2 object is initialized with Serial2.begin(), the kernel's access to the port is removed, and the sketch is given control until it calls Serial2.end().
Name: VCP or “Virtual communications port”. (Appears only when Serial-over-USB device connected.)
Location: Big type “A” USB port nearest the Arduino power connector.
Arduino SW name: not supported by default but see below*
Linux name: /dev/ttyACMx or /dev/ttyUSBx or ?
On the Arduino adapter this port appears only when a suitable device is plugged into the “A” USB port and the appropriate drivers are loaded and SW1 is set to “host” mode, that is, the position closest that port. If you have a USB hub attached here, you can plug in multiple serial-over-usb devices to get multiple ports.
*Serial, Serial1, and Serial2 are supported in the official Edison/Arduino software release [as of October 2014], but it is quite easy to make use of the excellent TTYUARTClass to get similar support for virtual ports as well. For example, to access both the Linux debug port and the virtual serial GPS device, we simply add code like this:
TTYUARTClass SerialGPS(&rx_buffer_GPS, 3, false); // USB GPS device
SerialGPS.init_tty("/dev/ttyACM0"); // bind to GPS device
SerialGPS.begin(9600); // our GPS operates at 9600 baud.
Now SerialGPS acts just the same as Serial, Serial1, and Serial2.
Hope this helps!