Build different final files for QEMU, coreboot, and CSM.

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>
This commit is contained in:
Kevin O'Connor 2013-10-14 21:52:28 -04:00
parent 7c80bb83d9
commit 8744e1512b
3 changed files with 28 additions and 10 deletions

View File

@ -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,24 @@ $(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)rm -f $(OUT)bios.bin $(OUT)Csm16.bin $(OUT)bios.bin.elf
$(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

6
README
View File

@ -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:

View File

@ -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