linux-mips
[Top] [All Lists]

Re: question concerning serial console setup

To: Conrad Parker <conradp@cse.unsw.edu.au>
Subject: Re: question concerning serial console setup
From: Jeff Harrell <jharrell@ti.com>
Date: Sun, 16 Jan 2000 20:41:38 -0700
Cc: linux@cthulhu.engr.sgi.com
References: <386A5F9B.50B4AFEF@ti.com> <19991230114736.C18261@cse.unsw.edu.au>
Sender: owner-linuxmips@oss.sgi.com
Conrad Parker wrote:
On Wed, Dec 29, 1999 at 12:23:07PM -0700, Jeff Harrell wrote:
> I wonder if anybody might have some information concerning the setup of
> a serial console device
> on the MIPS/Linux platform.  I have been looking at the sgi (indy)
> source code to determine how to
> setup a serial console device.  The file arch/mips/sgi/kernel/setup.c
> contains a call to "console_setup"
> passing the parameters "ttys0" and NULL.  I have had some trouble
> locating the routine that this is
> actually calling (file, directory?).  It looks like there is a version
> in printk.c and in one of  the char drivers (serial167.c).
> These do not seem like the correct routines.

the version in serial167.c is commented out and looks like it was once
there only as a placeholder.

console_setup() in printk.c is the correct one, but it doesn't do everything
you want. It simply determines which of the possible consoles is the system
("preferred") console. Normally this is called via parse_options in
init/main.c so you can set it on booting by passing the kernel parameter
console=blah, but it can be called any time before the kernel calls
console_init() (which it does immediately after calling parse_options, in
order to get the console up asap). If you've configured the kernel to run a
serial console, console_init() (which is in drivers/char/tty_io.c) will call
serial_console_init().
 

Hmmm....strange I tried to use console_setup  in the same way that  setup.c called
it in ../arch/mips/sgi/kernel/setup.c and ran into linker problems.  It looks like
setup_console is defined statically (sp?) in printk.c.

Here is how it is called in setup.c:

#if defined(CONFIG_SERIAL_CONSOLE) || defined(CONFIG_PROM_CONSOLE)
extern void console_setup(char *, int *);
#endif
...
....
#ifdef CONFIG_SERIAL_CONSOLE
 /* ARCS console environment variable is set to "g?" for
  * graphics console, it is set to "d" for the first serial
  * line and "d2" for the second serial line.
  */
 ctype = prom_getenv("console");
 if(*ctype == 'd') {
  if(*(ctype+1)=='2')
   console_setup ("ttyS1", NULL);
  else
   console_setup ("ttyS0", NULL);
 }


Here is how it looks in printk.c:

static int __init console_setup(char *str)
{ .....
I guess I am seeing the error that I would expect to see,  i.e.,  the linker gives me an
undefined reference.  Any ideas how this worked in the sgi code?
 
For the SGI/MIPS, (the code you're looking at in
arch/mips/sgi/kernel/setup.c) the choice of serial console can be
determined by querying the prom settings, so rather than forcing this to be
a boot parameter the correct console is set up at runtime. (If I'm not
mistaken, this can still be overriden by passing a kernel parameter, as
this bit of setup is called way before init/main.c calls parse_options()).
However, you don't need to call console_setup() in your platform setup
routine -- it's only done here for convenience.
Unfortunately I am working on an embedded platform, only using this code
as a starting point for our design.  If possible I would like to initialize the
console w/o the use of command line parameters.

Any insight that you can provide would be greatly appreciated.

Thanks,
Jeff
 

-- 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jeff Harrell                    Work:  (801) 619-6104 
Broadband Access group/TI       
jharrell@ti.com
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
<Prev in Thread] Current Thread [Next in Thread>