General information on boot logs
================================
To gather good boot logs, you must set the debug level to Spew.

If your board uses CMOS configuration[1], you can do it like this:
nvramtool -w debug_level=Spew

Else you will need to have to set the default log level at compile
time, to do that go in "Console  --->" in make menuconfig, then set
"Default console log level" to SPEW

Reference:
----------
[1] in make menuconfig you should have: [*] Use CMOS for configuration values
    This option is also known as CONFIG_USE_OPTION_TABLE in Kconfig.
Information through SSH
======================
board_status.sh can gather information through ssh with the -r
option.

When using "-r <host>", The script will attempt to log into
root@<host>.
In order for "-r <host>" to work, the script has to be able
to log into the remote host's root account, without having
to provide a password.
That can be achieved with the use of SSH keys and ssh-agent.

board_status.sh expects the remote host to have the following
programs in its path: cbmem, dmesg

Boot log gathering through a serial port
=======================================
When using -s </dev/xxx>, board_status.sh starts by retrieving the
boot log through the serial port.

To produce such logs, power off the board, run board_status.sh
with the right arguments, power on the board.
At that point the logs will be displayed by board_status.sh as they
are produced by the board.

Enter will have to be pressed once the board has booted and is in a
state where the script is able to log into that board.

Publishing
==========
The -u switch will publish the results: It will make a git patch out
of the status information, that will be directly pushed in the
board-status repository.
It expects the user to already have an account in coreboot's gerrit
instance.
