Build out/bios.bin on QEMU, out/bios.bin.elf on coreboot, and out/Csm16.bin for CSM. This reduces the chance that one accidentally builds for an incorrect target.
Signed-off-by: Kevin O'Connor kevin@koconnor.net --- Makefile | 20 +++++++++++++++++--- README | 6 ++++-- README.CSM | 11 ++++++----- 3 files changed, 27 insertions(+), 10 deletions(-)
diff --git a/Makefile b/Makefile index 01bd8b3..b1b55a3 100644 --- a/Makefile +++ b/Makefile @@ -82,7 +82,10 @@ endif # Default targets -include $(KCONFIG_CONFIG)
-target-y = $(OUT)bios.bin +target-y := +target-$(CONFIG_QEMU) += $(OUT)bios.bin +target-$(CONFIG_CSM) += $(OUT)Csm16.bin +target-$(CONFIG_COREBOOT) += $(OUT)bios.bin.elf target-$(CONFIG_BUILD_VGABIOS) += $(OUT)vgabios.bin
all: $(target-y) @@ -174,12 +177,23 @@ $(OUT)rom.o: $(OUT)rom16.strip.o $(OUT)rom32seg.strip.o $(OUT)code32flat.o $(OUT @echo " Linking $@" $(Q)$(LD) -T $(OUT)romlayout32flat.lds $(OUT)rom16.strip.o $(OUT)rom32seg.strip.o $(OUT)code32flat.o -o $@
-$(OUT)bios.bin.elf $(OUT)bios.bin: $(OUT)rom.o scripts/checkrom.py +$(OUT)bios.bin.prep: $(OUT)rom.o scripts/checkrom.py @echo " Prepping $@" $(Q)$(OBJDUMP) -thr $< > $<.objdump $(Q)$(OBJCOPY) -O binary $< $(OUT)bios.bin.raw $(Q)$(PYTHON) ./scripts/checkrom.py $<.objdump $(CONFIG_ROM_SIZE) \ - $(OUT)bios.bin.raw $(OUT)bios.bin + $(OUT)bios.bin.raw $(OUT)bios.bin.prep + +$(OUT)bios.bin: $(OUT)bios.bin.prep + @echo " Creating $@" + $(Q)cp $< $@ + +$(OUT)Csm16.bin: $(OUT)bios.bin.prep + @echo " Creating $@" + $(Q)cp $< $@ + +$(OUT)bios.bin.elf: $(OUT)rom.o $(OUT)bios.bin.prep + @echo " Creating $@" $(Q)$(STRIP) -R .comment $< -o $(OUT)bios.bin.elf
diff --git a/README b/README index f752451..6844e52 100644 --- a/README +++ b/README @@ -1,8 +1,10 @@ This code implements an X86 legacy bios. It is intended to be compiled using standard gnu tools (eg, gas and gcc).
-To build, one should be able to run "make" in the main directory. The -resulting file "out/bios.bin" contains the processed bios image. +To build for QEMU, one should be able to run "make" in the main +directory. The resulting file "out/bios.bin" contains the processed +bios image. To build for coreboot, please see the coreboot wiki. To +build for CSM, please see README.CSM.
Testing of images: diff --git a/README.CSM b/README.CSM index ea71846..b904e65 100644 --- a/README.CSM +++ b/README.CSM @@ -9,11 +9,12 @@ Windows 2008r2 is known to use INT 10h BIOS calls even when booted via EFI, and the presence of a CSM makes this work as expected too.
Having built SeaBIOS with CONFIG_CSM, you should be able to drop the -result into your OVMF build tree at OvmfPkg/Csm/Csm16/Csm16.bin and -then build OVMF with 'build -D CSM_ENABLE'. The SeaBIOS binary will be -included as a discrete file within the 'Flash Volume' which is -created, and there are tools which will extract it and allow it to be -replaced; satisfying the requirements of the LGPL licence. +result (out/Csm16.bin) into your OVMF build tree at +OvmfPkg/Csm/Csm16/Csm16.bin and then build OVMF with 'build -D +CSM_ENABLE'. The SeaBIOS binary will be included as a discrete file +within the 'Flash Volume' which is created, and there are tools which +will extract it and allow it to be replaced; satisfying the +requirements of the LGPL licence.
A patch to OVMF is required, to prevent it from marking the region from 0xC0000-0xFFFFF as read-only before invoking our Legacy16Boot method. See