sandbox: Allow the console to work earlier
With sandbox, errors and problems may be reported before console_init_f() is executed. For example, an argument may not parse correctly or U-Boot may panic(). At present this output is swallowed so there is no indication what is going wrong. Adjust the console to deal with a very early sandbox setup, by detecting that there is no global_data yet, and calling os functions in that case. Signed-off-by: Simon Glass <sjg@chromium.org> Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
88bd0e9d15
commit
91b136c798
|
@ -388,3 +388,14 @@ ssize_t os_get_filesize(const char *fname)
|
||||||
return ret;
|
return ret;
|
||||||
return buf.st_size;
|
return buf.st_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void os_putc(int ch)
|
||||||
|
{
|
||||||
|
putchar(ch);
|
||||||
|
}
|
||||||
|
|
||||||
|
void os_puts(const char *str)
|
||||||
|
{
|
||||||
|
while (*str)
|
||||||
|
os_putc(*str++);
|
||||||
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
|
#include <os.h>
|
||||||
#include <serial.h>
|
#include <serial.h>
|
||||||
#include <stdio_dev.h>
|
#include <stdio_dev.h>
|
||||||
#include <exports.h>
|
#include <exports.h>
|
||||||
|
@ -415,6 +416,12 @@ static inline void print_pre_console_buffer(void) {}
|
||||||
|
|
||||||
void putc(const char c)
|
void putc(const char c)
|
||||||
{
|
{
|
||||||
|
#ifdef CONFIG_SANDBOX
|
||||||
|
if (!gd) {
|
||||||
|
os_putc(c);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#ifdef CONFIG_SILENT_CONSOLE
|
#ifdef CONFIG_SILENT_CONSOLE
|
||||||
if (gd->flags & GD_FLG_SILENT)
|
if (gd->flags & GD_FLG_SILENT)
|
||||||
return;
|
return;
|
||||||
|
@ -439,6 +446,13 @@ void putc(const char c)
|
||||||
|
|
||||||
void puts(const char *s)
|
void puts(const char *s)
|
||||||
{
|
{
|
||||||
|
#ifdef CONFIG_SANDBOX
|
||||||
|
if (!gd) {
|
||||||
|
os_puts(s);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_SILENT_CONSOLE
|
#ifdef CONFIG_SILENT_CONSOLE
|
||||||
if (gd->flags & GD_FLG_SILENT)
|
if (gd->flags & GD_FLG_SILENT)
|
||||||
return;
|
return;
|
||||||
|
@ -467,7 +481,7 @@ int printf(const char *fmt, ...)
|
||||||
uint i;
|
uint i;
|
||||||
char printbuffer[CONFIG_SYS_PBSIZE];
|
char printbuffer[CONFIG_SYS_PBSIZE];
|
||||||
|
|
||||||
#ifndef CONFIG_PRE_CONSOLE_BUFFER
|
#if !defined(CONFIG_SANDBOX) && !defined(CONFIG_PRE_CONSOLE_BUFFER)
|
||||||
if (!gd->have_console)
|
if (!gd->have_console)
|
||||||
return 0;
|
return 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
20
include/os.h
20
include/os.h
|
@ -209,4 +209,24 @@ const char *os_dirent_get_typename(enum os_dirent_t type);
|
||||||
*/
|
*/
|
||||||
ssize_t os_get_filesize(const char *fname);
|
ssize_t os_get_filesize(const char *fname);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write a character to the controlling OS terminal
|
||||||
|
*
|
||||||
|
* This bypasses the U-Boot console support and writes directly to the OS
|
||||||
|
* stdout file descriptor.
|
||||||
|
*
|
||||||
|
* @param ch Character to write
|
||||||
|
*/
|
||||||
|
void os_putc(int ch);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write a string to the controlling OS terminal
|
||||||
|
*
|
||||||
|
* This bypasses the U-Boot console support and writes directly to the OS
|
||||||
|
* stdout file descriptor.
|
||||||
|
*
|
||||||
|
* @param str String to write (note that \n is not appended)
|
||||||
|
*/
|
||||||
|
void os_puts(const char *str);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue