We don't use O_NONBLOCK when opening the serial port to check termios. We don't zero the serial_structs in check_serial_console(), which we should because the structs have padding in them, which the kernel won't touch during the TIOCGSERIAL ioctl -- and which might then cause a compare failure. We assume <"ttyS%d",si.line> and ignore the si.type field. The attached patch addresses all three. It's not massively pretty having to have a hardcoded list of si.type -> "ttyXXX" strings, but it's not really any worse than just hard-coding ttyS%d. We should fix the kernel to expose this properly. (cf. http://lkml.org/lkml/2008/2/27/213)
Created attachment 298683 [details] patch
We have a list of 'other' console types in 10-console.rules. Each of these should probably be filed as a kernel bug, for the kernel to support TIOCGSERIAL on those ports with an appropriate si.type and si.line. That includes ttySG*, which currently (ab)uses PORT_16550A afaict.
The 'other' types aren't necessarily /dev/console, though; they are 'other console-like devices'. http://git.fedorahosted.org/git/?p=initscripts.git;a=commit;h=f892674d525dde82da15ff1beb38e8e1e448e1d1 and http://git.fedorahosted.org/git/?p=initscripts.git;a=commit;h=1b13b011cf799297fbd42e0378ec6f8cd99d5644 Will show up in rawhide post-beta.
Doesn't seem to be there yet...