Skip to content

Instantly share code, notes, and snippets.

@bluecmd
Last active September 21, 2022 19:27
Show Gist options
  • Save bluecmd/2bc354d2d6cbd3a433d739e57c633fec to your computer and use it in GitHub Desktop.
Save bluecmd/2bc354d2d6cbd3a433d739e57c633fec to your computer and use it in GitHub Desktop.
Loading coreboot payload over USB mass storage

Testing in QEMU

mkdir disk/
cp coreinfo.elf disk/boot.elf

qemu-system-x86_64 \
  -enable-kvm -M q35 -cpu host -m 4096 -serial stdout \
  -device qemu-xhci \
  -drive file=fat:rw:disk/,if=none,id=usbdisk \
  -device usb-storage,drive=usbdisk \
  -bios build/coreboot.rom \
  -device VGA,edid=on,xres=1440,yres=960 \
  -usbdevice tablet

Chaining EDK II

git clone https://github.com/tianocore/edk2.git
cd edk2
git submodule update --init --checkout
source edksetup.sh
make -C BaseTools/Source/C
build -a IA32 -a X64 -p UefiPayloadPkg/UefiPayloadPkg.dsc -b DEBUG -t GCC5 -D BOOTLOADER=COREBOOT  -D BOOTSPLASH_IMAGE=TRUE 
# Alternative with bluecmd's favorite options
build -a IA32 -a X64 -p UefiPayloadPkg/UefiPayloadPkg.dsc -b DEBUG -t GCC5 -D BOOTLOADER=COREBOOT \
  -D BOOTSPLASH_IMAGE=TRUE -D SMM_SUPPORT=TRUE \
  -D DISABLE_SERIAL_TERMINAL=TRUE -D PS2_KEYBOARD_ENABLE=TRUE \
  -D SIO_BUS_ENABLE=TRUE -D BOOT_MANAGER_ESCAPE=TRUE
# Convert FV to ELF
../coreboot/build/cbfstool foo.rom create -m x86 -s 10M
../coreboot/build/cbfstool foo.rom add-payload -n tmp -f Build/UefiPayloadPkgX64/DEBUG_GCC5/FV/UEFIPAYLOAD.fd
../coreboot/build/cbfstool foo.rom extract -m x86 -n tmp -f uefi.elf
CONFIG_CBFS_SIZE=0x00800000
CONFIG_ONBOARD_VGA_IS_PRIMARY=y
CONFIG_BOARD_EMULATION_QEMU_X86_Q35=y
CONFIG_CONSOLE_CBMEM_BUFFER_SIZE=0x20000
CONFIG_PCIEXP_HOTPLUG_BUSES=32
CONFIG_PCIEXP_HOTPLUG_MEM=0x800000
CONFIG_PCIEXP_HOTPLUG_PREFETCH_MEM=0x10000000
CONFIG_COREBOOT_ROMSIZE_KB_8192=y
CONFIG_UART_PCI_ADDR=0x0
CONFIG_GENERIC_LINEAR_FRAMEBUFFER=y
CONFIG_PCIEXP_HOTPLUG_IO=0x2000
CONFIG_SUBSYSTEM_VENDOR_ID=0x0000
CONFIG_SUBSYSTEM_DEVICE_ID=0x0000
CONFIG_I2C_TRANSFER_TIMEOUT_US=500000
CONFIG_DRIVERS_EMULATION_QEMU_BOCHS_XRES=1440
CONFIG_DRIVERS_EMULATION_QEMU_BOCHS_YRES=960
CONFIG_CONSOLE_QEMU_DEBUGCON_PORT=0x402
CONFIG_POST_IO_PORT=0x80
CONFIG_PAYLOAD_FILO=y
CONFIG_FILO_USE_AUTOBOOT=y
CONFIG_FILO_AUTOBOOT_FILE="uda1:boot.elf"
CONFIG_FILO_AUTOBOOT_DELAY=1
CONFIG_COREINFO_SECONDARY_PAYLOAD=y
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment