     var tty: termios
     var fd: Int32
 
-    public init?(_ uartId: String) {
-        device = "/dev/tty"+uartId
-        tty = termios()
-
-        fd = open(device, O_RDWR | O_NOCTTY | O_SYNC)
-        guard fd>0 else {
-            perror("Couldn't open UART device")
-            abort()
-        }
-
-        let ret = tcgetattr(fd, &tty)
-
-        guard ret == 0 else {
-            perror("Couldn't get terminal attributes")
-            abort()
-        }
+    public init?(_ uartIdList: [String]) {
+        // try all items in list until one works
+        for uartId in uartIdList {
+
+            device = "/dev/"+uartId
+            tty = termios()
+
+            fd = open(device, O_RDWR | O_NOCTTY | O_SYNC)
+            guard fd>0 else {
+                if errno == ENOENT {
+                    // silently return nil if no such device
+                    continue
+                }
+                perror("Couldn't open UART device")
+                continue
+            }
+
+            let ret = tcgetattr(fd, &tty)
+
+            guard ret == 0 else {
+	        close(fd)
+                perror("Couldn't get terminal attributes")
+                continue
+            }
+
+            return
+	}
+
+        return nil
+    }
+
+    public convenience init?(_ uartId: String) {
+        self.init([uartId])
     }
 
     public func configureInterface(speed: UARTSpeed, bitsPerChar: CharSize, stopBits: StopBits, parity: ParityType) {

    public static func UARTs(for board: SupportedBoard) -> [UARTInterface]? {
        switch board {
        case .CHIP:
            return [SysFSUART("S0")!]
        case .RaspberryPiRev1:
            fallthrough
        case .RaspberryPiRev2:


    public func configure(_ cfg: inout termios) {
        switch self {
        case .S2400:
            cfsetispeed(&cfg, speed_t(B2400))
            cfsetospeed(&cfg, speed_t(B2400))
        case .S4800:
            cfsetispeed(&cfg, speed_t(B4800))
            cfsetospeed(&cfg, speed_t(B4800))
        case .S9600:
            cfsetispeed(&cfg, speed_t(B9600))
            cfsetospeed(&cfg, speed_t(B9600))
