On Mar 23, 2005, at 9:10 PM, BitKeeper Bot wrote:
ChangeSet 1.1358, 2005/03/24 03:10:42+00:00,
iap10@xxxxxxxxxxxxxxxxxxxxx
If Xen is told to use a serial console via a com1= or com2= directive
on the Xen command line, it now hides that particular UART from dom0.
This means that it's now safe to enable the 8250 driver in the Linux
config. If Xen has been told to use com1, the dom0 linux kernel will
not see /dev/ttyS0, but will see ttyS1,S2 etc if they are present,
enabling them to be used for mice, modems, printers etc.
Unfortunately, the 8250 driver will register itself for a ttyS even if
that particular UART isn't present. This is really annoying, as it
prevents the 'xencons' driver registering itself as ttyS0 even though
the 8250 won't see ttyS0 as present if Xen is using com1. This
prevents us from enabling 8250 in the default kernel config, as it
will change current behaviour.
If you want to use 8250 and xencons, the trick is to tell xencons to
grab a high numbered ttyS port that the 8250 driver will have left
alone. For example, put "xencons=ttyS31" on the Linux command line.
You'll then be able to edit /etc/inittab to add an entry for a
getty on ttyS31 if you want to be able to log in on the serial console
that is being shared with Xen.
If anyone knows a way of cleanly kicking the 8250 driver off a
particular char minor then please let me know!
That isn't possible, though it has been a frequent feature request for
the Linux serial layer. Major 4 minor 64 is reserved for the serial
driver(s). Other drivers, even similar drivers, must get their own.
This is to be expected: the SCSI driver does not take over major 3
minor 0, even though SCSI is a block driver "like IDE".
There is plenty of precedent here. The drivers in drivers/serial hijack
the ttyS nodes, since serial ports are generally onboard and it's
almost unheard-of to have different types present. Drivers that do not
fit into the serial framework, however, need their own major. IBM
pSeries virtual console uses /dev/hvsi*. Cyclades uses /dev/ttyC*.
$(grep '"tty."' drivers/char) will show you more than you ever knew
existed... and they all use their own major number and device nodes.
I wrote drivers/char/hvsi.c, so I've been here before, and I'd
definitely recommend not trying to hijack serial (ttyS) nodes. It just
doesn't make sense: what does hardware flow control mean to a virtual
console? What about baud rate, parity, stop bits, IO port? Even worse,
all those ioctls like TIOCSERGETLSR ("get line status register") --
which ioctls can you return an error for, and which can you fake, and
what will you break when you fake it? Example from anaconda (Red Hat's
installer):
if (major(sb.st_rdev) != 3 && major(sb.st_rdev) != 136 &&
(virtpcon != NULL)){
if ((ioctl (0, TIOCLINUX, &twelve) < 0) &&
(ioctl(0, TIOCGSERIAL, &si) != -1))
flags |= LOADER_FLAGS_SERIAL;
}
Wouldn't want to break that. I wonder if we want LOADER_FLAGS_SERIAL
set or not. I wonder what other installers do...
I haven't looked at hijacking the tty driver, but I'm wary for the same
reasons. I'd suggest not trying to take over anybody else's
major/minor.
--
Hollis Blanchard
IBM Linux Technology Center
-------------------------------------------------------
This SF.net email is sponsored by Microsoft Mobile & Embedded DevCon 2005
Attend MEDC 2005 May 9-12 in Vegas. Learn more about the latest Windows
Embedded(r) & Windows Mobile(tm) platforms, applications & content. Register
by 3/29 & save $300 http://ads.osdn.com/?ad_id=6883&alloc_id=15149&op=click
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.sourceforge.net/lists/listinfo/xen-devel
|