payloads/external: add skiboot (for QEMU/Power9)
Add an option to build skiboot as a payload. This makes QEMU Power9 board simpler to use as skiboot is necessary anyway. Change-Id: I0b49ea7464c97cc2ff0d5030629deed549851372 Signed-off-by: Igor Bagnucki <igor.bagnucki@3mdeb.com> Signed-off-by: Krystian Hebel <krystian.hebel@3mdeb.com> Signed-off-by: Sergii Dmytruk <sergii.dmytruk@3mdeb.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/58656 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Michał Żygowski <michal.zygowski@3mdeb.com>
This commit is contained in:
parent
8d436cfc1a
commit
a816c29882
|
@ -1,7 +1,19 @@
|
||||||
# QEMU PPC64 emulator
|
# QEMU PPC64 emulator
|
||||||
This page describes how to build and run coreboot for QEMU/PPC64.
|
This page describes how to build and run coreboot for QEMU/PPC64.
|
||||||
You can configure ELF payload via `make menuconfig` (make sure "ROM chip size"
|
|
||||||
is large enough).
|
## Building coreboot
|
||||||
|
```bash
|
||||||
|
make defconfig KBUILD_DEFCONFIG=configs/config.emulation_qemu_power9
|
||||||
|
make
|
||||||
|
```
|
||||||
|
|
||||||
|
This builds coreboot with no payload.
|
||||||
|
|
||||||
|
## Payloads
|
||||||
|
You can configure ELF or `skiboot` payload via `make menuconfig`. In either case
|
||||||
|
you might need to adjust "ROM chip size" and make it large enough to accommodate
|
||||||
|
the payload (see how much space it needs in the error you get if it doesn't
|
||||||
|
fit).
|
||||||
|
|
||||||
## Running coreboot in QEMU
|
## Running coreboot in QEMU
|
||||||
```bash
|
```bash
|
||||||
|
@ -15,16 +27,26 @@ qemu-system-ppc64 -M powernv,hb-mode=on \
|
||||||
|
|
||||||
- The default CPU in QEMU for AArch64 is a 604. You specify a suitable
|
- The default CPU in QEMU for AArch64 is a 604. You specify a suitable
|
||||||
PowerPC CPU via `-cpu power9`.
|
PowerPC CPU via `-cpu power9`.
|
||||||
- By default Hostboot mode is off and it needs to be turned on to run coreboot
|
- By default Hostboot mode is off and needs to be turned on to run coreboot
|
||||||
as a firmware rather than like an OS.
|
as a firmware rather than like an OS.
|
||||||
- `-bios` specifies initial program (bootloader should suffice, but whole image
|
- `-bios` specifies initial program (bootloader should suffice, but whole image
|
||||||
works fine too).
|
works fine too).
|
||||||
- `-drive` specifies image for emulated flash device.
|
- `-drive` specifies image for emulated flash device.
|
||||||
|
|
||||||
## Building coreboot
|
## Running with a kernel
|
||||||
|
Loading `skiboot` (built automatically by coreboot or otherwise) allows
|
||||||
|
specifying kernel and root file system to be run.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
make defconfig KBUILD_DEFCONFIG=configs/config.emulation_qemu_power9
|
qemu-system-ppc64 -M powernv,hb-mode=on \
|
||||||
make
|
-cpu power9 \
|
||||||
|
-bios build/coreboot.rom \
|
||||||
|
-drive file=build/coreboot.rom,if=mtd \
|
||||||
|
-serial stdio \
|
||||||
|
-display none \
|
||||||
|
-kernel zImage \
|
||||||
|
-initrd initrd.cpio.xz
|
||||||
```
|
```
|
||||||
|
|
||||||
This builds coreboot with no payload.
|
- Specify path to your kernel via `-kernel`.
|
||||||
|
- Specify path to your rootfs via `-initrd`.
|
||||||
|
|
|
@ -28,6 +28,7 @@ payloads/external/tianocore \
|
||||||
payloads/external/GRUB2 \
|
payloads/external/GRUB2 \
|
||||||
payloads/external/LinuxBoot \
|
payloads/external/LinuxBoot \
|
||||||
payloads/external/Yabits \
|
payloads/external/Yabits \
|
||||||
|
payloads/external/skiboot \
|
||||||
|
|
||||||
force-payload:
|
force-payload:
|
||||||
|
|
||||||
|
|
|
@ -8,3 +8,5 @@ tint/tint/
|
||||||
U-Boot/u-boot/
|
U-Boot/u-boot/
|
||||||
Memtest86Plus/memtest86plus/
|
Memtest86Plus/memtest86plus/
|
||||||
iPXE/ipxe/
|
iPXE/ipxe/
|
||||||
|
skiboot/skiboot
|
||||||
|
skiboot/build
|
||||||
|
|
|
@ -332,3 +332,10 @@ payloads/external/Yabits/uefi/build/uefi.elf yabits:
|
||||||
|
|
||||||
payloads/external/BOOTBOOT/bootboot/dist/bootbootcb.elf:
|
payloads/external/BOOTBOOT/bootboot/dist/bootbootcb.elf:
|
||||||
$(MAKE) -C payloads/external/BOOTBOOT all
|
$(MAKE) -C payloads/external/BOOTBOOT all
|
||||||
|
|
||||||
|
# skiboot
|
||||||
|
|
||||||
|
payloads/external/skiboot/build/skiboot.elf:
|
||||||
|
$(MAKE) -C payloads/external/skiboot all \
|
||||||
|
CONFIG_SKIBOOT_GIT_REPO=$(CONFIG_SKIBOOT_GIT_REPO) \
|
||||||
|
CONFIG_SKIBOOT_REVISION=$(CONFIG_SKIBOOT_REVISION)
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
## SPDX-License-Identifier: GPL-2.0-only
|
||||||
|
|
||||||
|
if PAYLOAD_SKIBOOT
|
||||||
|
|
||||||
|
config PAYLOAD_FILE
|
||||||
|
default "payloads/external/skiboot/build/skiboot.elf"
|
||||||
|
|
||||||
|
config SKIBOOT_GIT_REPO
|
||||||
|
string "Git repository of skiboot payload"
|
||||||
|
default "https://github.com/open-power/skiboot"
|
||||||
|
help
|
||||||
|
Git repository which will be used to clone skiboot.
|
||||||
|
|
||||||
|
config SKIBOOT_REVISION
|
||||||
|
string "Revision of skiboot payload"
|
||||||
|
default "d93ddbd39b4eeac0bc11dacbdadea76df2996c13" if BOARD_EMULATION_QEMU_POWER9
|
||||||
|
help
|
||||||
|
Revision, that skiboot repository will be checked out to, before building
|
||||||
|
an image.
|
||||||
|
|
||||||
|
endif # PAYLOAD_SKIBOOT
|
|
@ -0,0 +1,8 @@
|
||||||
|
## SPDX-License-Identifier: GPL-2.0-only
|
||||||
|
|
||||||
|
config PAYLOAD_SKIBOOT
|
||||||
|
bool "skiboot"
|
||||||
|
depends on ARCH_PPC64
|
||||||
|
help
|
||||||
|
Select this option if you want to build a coreboot image
|
||||||
|
with a skiboot payload.
|
|
@ -0,0 +1,36 @@
|
||||||
|
## SPDX-License-Identifier: GPL-2.0-only
|
||||||
|
|
||||||
|
build_dir=$(CURDIR)/build
|
||||||
|
skiboot_dir=$(CURDIR)/skiboot
|
||||||
|
skiboot_git_repo=$(CONFIG_SKIBOOT_GIT_REPO)
|
||||||
|
skiboot_revision=$(CONFIG_SKIBOOT_REVISION)
|
||||||
|
skiboot_elf=$(build_dir)/skiboot.elf
|
||||||
|
skiboot_cross=$(or $(CROSS),powerpc64-linux-gnu-)
|
||||||
|
|
||||||
|
unexport $(COREBOOT_EXPORTS)
|
||||||
|
|
||||||
|
.PHONY: all clean distclean
|
||||||
|
|
||||||
|
all: $(skiboot_elf)
|
||||||
|
|
||||||
|
$(skiboot_elf): | $(skiboot_dir) $(build_dir)
|
||||||
|
+$(MAKE) -C $(skiboot_dir) CROSS="$(skiboot_cross)"
|
||||||
|
cp $(skiboot_dir)/skiboot.elf $@
|
||||||
|
# skiboot is always built with debug information due to unconditional -ggdb
|
||||||
|
$(skiboot_cross)strip $@
|
||||||
|
|
||||||
|
$(skiboot_dir):
|
||||||
|
git clone $(skiboot_git_repo) $(skiboot_dir)
|
||||||
|
git -C $(skiboot_dir) checkout $(skiboot_revision)
|
||||||
|
|
||||||
|
$(build_dir):
|
||||||
|
mkdir -p $(build_dir)
|
||||||
|
|
||||||
|
distclean: clean
|
||||||
|
rm -rf $(skiboot_dir)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
# Redefine RM because it's used like `$(RM) non-existent-file`
|
||||||
|
# Also ignore useless messages about removing test files
|
||||||
|
[ ! -d $(skiboot_dir) ] || $(MAKE) -C $(skiboot_dir) RM="rm -rf" clean > /dev/null
|
||||||
|
rm -rf $(build_dir)
|
|
@ -8,7 +8,7 @@ if BOARD_EMULATION_QEMU_POWER9
|
||||||
config BOARD_SPECIFIC_OPTIONS
|
config BOARD_SPECIFIC_OPTIONS
|
||||||
def_bool y
|
def_bool y
|
||||||
select CPU_POWER9
|
select CPU_POWER9
|
||||||
select BOARD_ROMSIZE_KB_512
|
select BOARD_ROMSIZE_KB_1024
|
||||||
select ARCH_BOOTBLOCK_PPC64
|
select ARCH_BOOTBLOCK_PPC64
|
||||||
select ARCH_VERSTAGE_PPC64
|
select ARCH_VERSTAGE_PPC64
|
||||||
select ARCH_ROMSTAGE_PPC64
|
select ARCH_ROMSTAGE_PPC64
|
||||||
|
|
Loading…
Reference in New Issue