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

Jean-Christophe PLAGNIOL-VILLARD plagnioj at jcrosoft.com
Wed Mar 4 18:26:26 CET 2009


On 17:16 Wed 04 Mar     , Benoit Monin wrote:
> 
> 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;
> +
NACK
> +		ms = ticks2usec(get_ticks());
ticks2usec only exist on ppc
> +		tlen = sprintf(tbuf, "[%5lu.%06lu] ", (ms / 1000000UL), (ms % 1000000UL));
wont work on arm
please do_div
> +		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++);
please use fputs and serail_puts

Best Regards,
J.


More information about the U-Boot mailing list