Serial console only works after reboot?
bde at zeta.org.au
Sun Jan 4 22:38:11 PST 2004
On Sun, 4 Jan 2004, Nate Lawson wrote:
> On Sun, 4 Jan 2004, M. Warner Losh wrote:
> > In message: <20040103233044.N17367 at root.org>
> > Nate Lawson <nate at root.org> writes:
> > : On Sat, 3 Jan 2004, M. Warner Losh wrote:
> > : > In message: <20040103184934.V16815 at root.org>
> > : > Nate Lawson <nate at root.org> writes:
> > : > : I have a laptop (IBM T23) and use sio0 as my console/gdb port. One thing
> > : > : I noticed is if I power up the laptop and boot -h, I get garbage out the
> > : > : serial port. However, if I boot fully and then just warm reboot, the
> > : > : serial console works fine. I'm only using 9600 bps. Ideas?
> > : >
> > : > weird. Is the garbage data at some different rate?
> > :
> > : Nope, checked everything from 1200 up to 38400, different garbage but
> > : always garbage. This is with -current as of 2003/12/30, no patches.
> > Try 115200.
> That works.
Is this with just changing the external tty to 115200 and no config changes?
> Now the question is "why". Note that I have no "options
> CONSPEED" so according to /sys/dev/sio/sioreg.h, it should default to 9600
> and indeed does, after a reboot. But not on a cold startup.
As mentioned in other replies, CONSPEED is irrelevant for serial consoles
in many cases. The speed is normally determined by BOOT_COMCONSOLE_SPEED
(or its default of 9600).
- the kernel console may be a serial one even if the boot blocks don't
use or set a serial console. This happens when there is no other
preferred console, or if you switch to a serial console using
"sysctl kern.console=...". Then CONSPEED (or its default of 9600) is
- the initial setting of the console speed may be changed using
- if the "serial console" is actually just a gdb port, then it won't
be affected by BOOT_COMCONSOLE_SPEED. Then GDBSPEED (or its default
of CONSPEED) is used initially.
- the initial setting of the gdb speed may be changed using
"sysctl machdep.gdbspeed". This sysctl is sloppier than the one for
consoles -- it is just a SYSCTL_INT() and doesn't adjust any associated
state (mainly speeds for other uses of the port).
- if the serial console is also the gdb port, then the gdb speed is used
for gdb and the console speed is used for console i/o. There is also
a speed for the high-level tty. Speed setting is mostly dynamic (the
speed normally set for the high-level tty and switched on every character
for console and gdb i/o), so garbled output may result even for the
speed that matches the external device if the 3 speed settings are not
all the same. Console i/o usually works in this case though.
Add some printfs to see which of the speed settings are different, and
fix whatever sets an inconsistent one.
More information about the freebsd-current