summaryrefslogtreecommitdiffstats
path: root/src/util
diff options
context:
space:
mode:
authorMichael Brown2015-12-06 00:54:10 +0100
committerMichael Brown2015-12-07 14:08:22 +0100
commit7f65a08f3e2606a5102fb68acf6ccf5fc283ecb6 (patch)
tree714de0295e7977592c187e1c94b2172f8d8b3396 /src/util
parent[bitops] Provide BIT_QWORD_PTR() (diff)
downloadipxe-7f65a08f3e2606a5102fb68acf6ccf5fc283ecb6.tar.gz
ipxe-7f65a08f3e2606a5102fb68acf6ccf5fc283ecb6.tar.xz
ipxe-7f65a08f3e2606a5102fb68acf6ccf5fc283ecb6.zip
[efi] Add %.usb target for building EFI-bootable USB (or other) disk images
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/util')
-rwxr-xr-xsrc/util/genefidsk60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/util/genefidsk b/src/util/genefidsk
new file mode 100755
index 00000000..7064f99b
--- /dev/null
+++ b/src/util/genefidsk
@@ -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}