[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
|
||||
|
||||
# Specify EFI boot file
|
||||
#
|
||||
EFI_BOOT_FILE = bootia32.efi
|
||||
|
||||
# Include generic EFI Makefile
|
||||
#
|
||||
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
|
||||
$(QM)$(ECHO) " [CAB] $@"
|
||||
$(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)
|
||||
|
||||
# Specify EFI boot file
|
||||
#
|
||||
EFI_BOOT_FILE = bootx64.efi
|
||||
|
||||
# Include generic EFI Makefile
|
||||
#
|
||||
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