[U-Boot-Users] silent console, nulldev and CONFIG_AUTOBOOT_KEYED

Dave Ellis dge at sixnetio.com
Thu Jun 30 23:43:08 CEST 2005


Ladislav Michl wrote: 
> On Wed, Jun 29, 2005 at 06:24:40PM -0400, Dave Ellis wrote:
> > The current implementation of CONFIG_SILENT_CONSOLE needs
> > CFG_DEVICE_NULLDEV. I suppose a check could be added to 
> > flag the error at build time if CFG_DEVICE_NULLDEV is not 
> > defined.
> 
> GD_FLG_SILENT flag is checked on every output to console, nulldev
device
> seems redundant to me.

Once devices are set up GD_FLG_SILENT would only block 
output that implies stdout, not output that specifies it. 
I think (I haven't tried it) printf("abc") would be blocked 
by GD_FLG_SILENT but fprintf(stdout, "abc") would not. 
The fprintf() would be blocked because stdout is nulldev. So
I guess it is mostly redundant, but not for the fprintf() case.

> > In abortboot the "silent" operation is suspended by setting
> > the console back to serial so you can use the console to 
[snip] 
> Indeed, console is set back to serial, but it doesn't help you to see
> any output. I would assume you should see at least something like
> "Enter password - autoboot in n seconds"
[snip] 
> Again, why there is nulldev device when GD_FLG_SILENT is checked on
every
> console output? Is CONFIG_AUTOBOOT_PROMPT supposed to be displayed
even
> with "silent" console? Would it break any user setup if I remove
nulldev?

I think I see the problem. CONFIG_AUTOBOOT_PROMPT should be
displayed, but it isn't because printf() is checking GD_FLG_SILENT.
The cleanest solution I see is to check GD_FLG_SILENT only when
sending directly to the handler, not when sending to the device.
That keeps printf(...) and fprintf(stdout, ...) consistent. Below is
a patch to try:

Dave Ellis

--- u-boot.cvs/common/console.c	Thu Mar 31 13:42:16 2005
+++ u-boot.patched/common/console.c	Thu Jun 30 16:21:07 2005
@@ -189,16 +189,17 @@ void putc (const char c)
 {
 	DECLARE_GLOBAL_DATA_PTR;
 
-#ifdef CONFIG_SILENT_CONSOLE
-	if (gd->flags & GD_FLG_SILENT)
-		return;
-#endif
-
 	if (gd->flags & GD_FLG_DEVINIT) {
 		/* Send to the standard output */
 		fputc (stdout, c);
 	} else {
 		/* Send directly to the handler */
+
+#ifdef CONFIG_SILENT_CONSOLE
+		if (gd->flags & GD_FLG_SILENT)
+			return;
+#endif
+
 		serial_putc (c);
 	}
 }
@@ -207,16 +208,16 @@ void puts (const char *s)
 {
 	DECLARE_GLOBAL_DATA_PTR;
 
-#ifdef CONFIG_SILENT_CONSOLE
-	if (gd->flags & GD_FLG_SILENT)
-		return;
-#endif
-
 	if (gd->flags & GD_FLG_DEVINIT) {
 		/* Send to the standard output */
 		fputs (stdout, s);
 	} else {
 		/* Send directly to the handler */
+
+#ifdef CONFIG_SILENT_CONSOLE
+		if (gd->flags & GD_FLG_SILENT)
+			return;
+#endif
 		serial_puts (s);
 	}
 }







More information about the U-Boot mailing list