[U-Boot] [PATCH] CONFIG_PRINT_TIME: Measuring boot time.

Benoit Monin benoit.monin at laposte.net
Wed Mar 4 17:16:50 CET 2009


This option prefixes every console line with the time in seconds since
power-up. It is inspired by the Linux kernel option PRINTK_TIME and uses
the same output format.

It can be used to measure the time taken by U-Boot to boot the kernel or
application. For example:

[    0.003532] U-Boot 2009.03-rc1-00008-gfa74f69-dirty (mar 04 2009 - 14:18:39)
[    0.011994]
[    0.013694] CPU:   AMCC PowerPC 440EPx Rev. A at 528 MHz (PLB=132, OPB=66, EBC=66 MHz)
[    0.023121]        Security/Kasumi support
[    0.028001]        Bootstrap Option H - Boot ROM Location I2C (Addr 0x52)
[    0.036075]        Internal PCI arbiter enabled, PCI async ext clock used
[    0.044142]        32 kB I-Cache 32 kB D-Cache
[    0.049445] Board: Sequoia - AMCC PPC440EPx Evaluation Board, Rev. F, PCI=66 MHz
...

Signed-off-by: Benoît Monin <bmonin at adeneo.eu>
---
 README           |    5 +++++
 common/console.c |   36 ++++++++++++++++++++++++++++++------
 2 files changed, 35 insertions(+), 6 deletions(-)

diff --git a/README b/README
index d0a636e..848ff29 100644
--- a/README
+++ b/README
@@ -478,6 +478,11 @@ The following options need to be configured:
 		the "silent" environment variable. See
 		doc/README.silent for more information.
 
+		When CONFIG_PRINT_TIME is defined, all console messages
+		are prefixed with the time in second since power-up.
+		This option mimics the Linux kernel option PRINTK_TIME
+		and uses the same output format (ex: [    0.049445] ...).
+
 - Console Baudrate:
 		CONFIG_BAUDRATE - in bps
 		Select one of the baudrates listed in
diff --git a/common/console.c b/common/console.c
index 2add047..75f0f28 100644
--- a/common/console.c
+++ b/common/console.c
@@ -325,6 +325,17 @@ int tstc(void)
 	return serial_tstc();
 }
 
+static void __putc(const char c)
+{
+	if (gd->flags & GD_FLG_DEVINIT) {
+		/* Send to the standard output */
+		fputc (stdout, c);
+	} else {
+		/* Send directly to the handler */
+		serial_putc (c);
+	}
+}
+
 void putc(const char c)
 {
 #ifdef CONFIG_SILENT_CONSOLE
@@ -337,13 +348,20 @@ void putc(const char c)
 		return;
 #endif
 
-	if (gd->flags & GD_FLG_DEVINIT) {
-		/* Send to the standard output */
-		fputc(stdout, c);
-	} else {
-		/* Send directly to the handler */
-		serial_putc(c);
+	__putc(c);
+#ifdef CONFIG_PRINT_TIME
+	if (c == '\n') {
+		unsigned long ms;
+		char tbuf[32];
+		int tlen;
+		int i;
+
+		ms = ticks2usec(get_ticks());
+		tlen = sprintf(tbuf, "[%5lu.%06lu] ", (ms / 1000000UL), (ms % 1000000UL));
+		for (i = 0; i < tlen; i++)
+			__putc(tbuf[i]);
 	}
+#endif
 }
 
 void puts(const char *s)
@@ -358,6 +376,11 @@ void puts(const char *s)
 		return;
 #endif
 
+#ifdef CONFIG_PRINT_TIME
+	while (*s) {
+		putc(*s++);
+	}
+#else
 	if (gd->flags & GD_FLG_DEVINIT) {
 		/* Send to the standard output */
 		fputs(stdout, s);
@@ -365,6 +388,7 @@ void puts(const char *s)
 		/* Send directly to the handler */
 		serial_puts(s);
 	}
+#endif
 }
 
 void printf(const char *fmt, ...)
-- 


 Créez votre adresse électronique prenom.nom at laposte.net 
 1 Go d'espace de stockage, anti-spam et anti-virus intégrés.


More information about the U-Boot mailing list