coreboot debug logging is enabled by default at the level of Debug
. This can
be changed using nvramtool
to set the CMOS option debug_level
.
sudo nvramtool -w debug_level=<level>
Available log levels are:
- Emergency
- Alert
- Critical
- Error
- Warning
- Notice
- Info
- Debug
- Spew
Modify ./scripts/_build/edk2.sh
so BUILD_TYPE
is set to DEBUG
instead of
RELEASE
.
#BUILD_TYPE=RELEASE
BUILD_TYPE=DEBUG
The default PCD values are used, so a lot of ouput will be generated. This can have a significant impact on the boot time.
This also unconditionally enables asserts, so any failures will result in edk2 hanging and require a reflash to fix.
Debug logging can be enabled in the Rust UEFI apps (e.g., firmware-setup
) by
selecting the debug
feature in Cargo.toml
.
A couple of methods can be used to get debug logging.
This method requires no soldering of board components.
See Debugging the EC firmware for details on setting up EC debugging over the parallel port.
cbmem output can be passed through the EC by enabling the driver in coreboot.
Uncomment the config in models/<model>/coreboot.config
to enable logging the
cbmem console through the EC.
CONFIG_CONSOLE_SYSTEM76_EC=y
edk2 output can be passed through as well by enabling the driver in edk2.
This causes boot to be very slow, as edk2 generates a lot of output.
Uncomment the config in models/<model>/edk2.config
to enable the driver.
SYSTEM76_EC_LOGGING=TRUE
A qemu
target is provided to allow development and debugging in a VM.
./scripts/build.sh qemu
Install QEMU:
# Arch
sudo pacman -S qemu
# Fedora
sudo dnf install qemu-system-x86
# Ubuntu
sudo apt install qemu-system-x86
And run the image in a VM:
./scripts/qemu.sh