[efi] Add %.usb target for building EFI-bootable USB (or other) disk images
Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
parent
1fcd4223cc
commit
7f65a08f3e
|
@ -8,6 +8,10 @@ ELF2EFI = $(ELF2EFI32)
|
||||||
#
|
#
|
||||||
CFLAGS += -malign-double
|
CFLAGS += -malign-double
|
||||||
|
|
||||||
|
# Specify EFI boot file
|
||||||
|
#
|
||||||
|
EFI_BOOT_FILE = bootia32.efi
|
||||||
|
|
||||||
# Include generic EFI Makefile
|
# Include generic EFI Makefile
|
||||||
#
|
#
|
||||||
MAKEDEPS += arch/x86/Makefile.efi
|
MAKEDEPS += arch/x86/Makefile.efi
|
||||||
|
|
|
@ -40,3 +40,7 @@ $(BIN)/%.efirom : $(BIN)/%.efidrv $(EFIROM)
|
||||||
$(BIN)/efidrv.cab : $(BIN)/alldrv.efis # $(ALL_drv.efi) is not yet defined
|
$(BIN)/efidrv.cab : $(BIN)/alldrv.efis # $(ALL_drv.efi) is not yet defined
|
||||||
$(QM)$(ECHO) " [CAB] $@"
|
$(QM)$(ECHO) " [CAB] $@"
|
||||||
$(Q)$(LCAB) -n -q $(ALL_drv.efi) $@
|
$(Q)$(LCAB) -n -q $(ALL_drv.efi) $@
|
||||||
|
|
||||||
|
$(BIN)/%.usb : $(BIN)/%.efi
|
||||||
|
$(QM)$(ECHO) " [GENEFIDSK] $@"
|
||||||
|
$(Q)bash util/genefidsk -o $@ -b $(EFI_BOOT_FILE) $<
|
||||||
|
|
|
@ -8,6 +8,10 @@ CFLAGS += -mno-red-zone
|
||||||
#
|
#
|
||||||
ELF2EFI = $(ELF2EFI64)
|
ELF2EFI = $(ELF2EFI64)
|
||||||
|
|
||||||
|
# Specify EFI boot file
|
||||||
|
#
|
||||||
|
EFI_BOOT_FILE = bootx64.efi
|
||||||
|
|
||||||
# Include generic EFI Makefile
|
# Include generic EFI Makefile
|
||||||
#
|
#
|
||||||
MAKEDEPS += arch/x86/Makefile.efi
|
MAKEDEPS += arch/x86/Makefile.efi
|
||||||
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Generate an EFI bootable disk image
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
function help() {
|
||||||
|
echo "Usage: ${0} [OPTIONS] <ipxe.efi>"
|
||||||
|
echo
|
||||||
|
echo "where OPTIONS are:"
|
||||||
|
echo " -h Show this help"
|
||||||
|
echo " -b Specify boot file name (e.g. bootx64.efi)"
|
||||||
|
echo " -o FILE Save disk image to file"
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOT=bootx64.efi
|
||||||
|
|
||||||
|
while getopts "hb:o:" opt; do
|
||||||
|
case ${opt} in
|
||||||
|
h)
|
||||||
|
help
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
b)
|
||||||
|
BOOT="${OPTARG}"
|
||||||
|
;;
|
||||||
|
o)
|
||||||
|
OUT="${OPTARG}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
shift $((OPTIND - 1))
|
||||||
|
IN=$1
|
||||||
|
|
||||||
|
if [ -z "${IN}" ]; then
|
||||||
|
echo "${0}: no input file given" >&2
|
||||||
|
help
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "${OUT}" ]; then
|
||||||
|
echo "${0}: no output file given" >&2
|
||||||
|
help
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create sparse output file
|
||||||
|
rm -f ${OUT}
|
||||||
|
truncate -s 1440K ${OUT}
|
||||||
|
|
||||||
|
# Format disk
|
||||||
|
mformat -i ${OUT} -f 1440 ::
|
||||||
|
|
||||||
|
# Create directory structure
|
||||||
|
mmd -i ${OUT} ::efi
|
||||||
|
mmd -i ${OUT} ::efi/boot
|
||||||
|
|
||||||
|
# Copy bootable image
|
||||||
|
mcopy -i ${OUT} ${IN} ::efi/boot/${BOOT}
|
Reference in New Issue