On linux USB-serial devices create two aliases to its serial port:
/dev/tty* and /dev/serial/by-id/<my_usb_device_id>

Is there a way on OSX to identify a serial port by the USB device id? Both in System Profiler and using ioreg -p IOUSB I can see the id, but that doesn't get me any closer to connecting using that id.

We're developing several pieces of hardware and it's a pain to test them as every time I connect a different device I need to verify the serial port configuration of the testing software, because on OSX the tty.* port name depends on the port on my computer, not on the device. The guys running linux are happily using the /dev/serial/by-id/<my_usb_device_id> port to automatically distinguish between the different devices.


For an FTDI bridge I have, the serial number already appears in the device name: it appears as /dev/serial/by-id/usb-FTDI_FT231X_USB_UART_DA00AG57-if00-port0 (corresponding to some /dev/ttyUSBx) on Linux, and as /dev/cu.usbserial-DA00AG57 and /dev/tty.usbserial-DA00AG57 on macOS. (See https://stackoverflow.com/a/8632603/4896937 for difference between tty.* and cu.*.)

Unfortunately, for Prolific bridge I have, an issue like yours still applies: a device appearing as /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0 (which doesn't contain a serial number) is simply /dev/cu.usbserial and /dev/tty.usbserial on macOS (not even System Profiler gives a serial number for it). Who knows what would happen if I had a second one plugged in.

Maybe there is a more general answer out there that is vendor-independent, but be warned some devices might not report a serial number.

  • For me they appear as /dev/tty.usbmodemFD121 and /dev/tty.usbmodemFA131. The number depends directly on the USB port on my laptop. System info shows the correct id for the devices set by their firmware. Both serials are created by STM32F2/F4 processors. – Johan Feb 6 '17 at 8:16

Actually, you should be able to find the mapping from device ID/serial number to serial port name using ioreg. Try this command:

ioreg -r -c IOUSBHostDevice -l

It will print all the USB host devices, and it will print out all properties from the subtree of each device. You should be able to find your device on the top level based on its ID or serial number. Once you've found it, you should be able to scan through its subtree, and eventually find an object of class IOSerialBSDClient. This will contain the property IODialinDevice which is what you want.

If you then want to do this programmatically, you could add the -a option to the ioreg command, which will output a plist version of the above output. You could then parse this with a library such as plistlib.

You might find it helpful to use the IORegistryExplorer app to help visualise this, as the full ioreg output is slightly difficult to read! This is available in XCode's "Hardware IO Tools" package which you can find by searching the downloads on the Apple developer site. Here's what it looks like on my device:

IORegistryExplorer example


I had the same issue with Profilic Bridge and download the driver from http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=229&pcid=41 fix the problem after restart.

  • What problem was that? The OP asked how to identify a device, there’s no mention of having driver issues. – Allan Mar 23 at 11:24

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .