david/ipxe
david
/
ipxe
Archived
1
0
Fork 0

[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:
Michael Brown 2015-12-05 23:54:10 +00:00
parent 1fcd4223cc
commit 7f65a08f3e
4 changed files with 72 additions and 0 deletions

View File

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

View File

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

View 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

60
src/util/genefidsk Executable file
View File

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