diff --git a/scripts/build.sh b/scripts/build.sh index 5a5de31..05760af 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -32,7 +32,6 @@ mkdir -p "${BUILD}" UEFIPAYLOAD="${BUILD}/UEFIPAYLOAD.fd" COREBOOT="${BUILD}/firmware.rom" -USB="${BUILD}/usb.img" EDK2_ARGS=( -D SHELL_TYPE=NONE -D SOURCE_DEBUG_ENABLE=FALSE @@ -91,30 +90,4 @@ then "${BUILD}/ec.rom" fi -if [ "${MODEL}" != "qemu" ] -then - # Rebuild firmware-update - export BASEDIR="system76_${MODEL}_${VERSION}" - pushd apps/firmware-update >/dev/null - make "build/x86_64-unknown-uefi/boot.img" - cp -v "build/x86_64-unknown-uefi/boot.img" "${USB}.partial" - popd >/dev/null - - # Copy firmware to USB image - mmd -i "${USB}.partial@@1M" "::${BASEDIR}/firmware" - mcopy -v -i "${USB}.partial@@1M" "${COREBOOT}" "::${BASEDIR}/firmware/firmware.rom" - if [ -e "${BUILD}/ec.rom" ] - then - mcopy -v -i "${USB}.partial@@1M" "${BUILD}/ec.rom" "::${BASEDIR}/firmware/ec.rom" - elif [ -e "${MODEL_DIR}/ec.rom" ] - then - mcopy -v -i "${USB}.partial@@1M" "${MODEL_DIR}/ec.rom" "::${BASEDIR}/firmware/ec.rom" - fi - if [ -e "${MODEL_DIR}/uecflash.efi" ] - then - mcopy -v -i "${USB}.partial@@1M" "${MODEL_DIR}/uecflash.efi" "::${BASEDIR}/firmware/uecflash.efi" - fi - mv -v "${USB}.partial" "${USB}" -fi - echo "Built '${VERSION}' for '${MODEL}'" diff --git a/scripts/usb.sh b/scripts/usb.sh new file mode 100755 index 0000000..2c0d8b8 --- /dev/null +++ b/scripts/usb.sh @@ -0,0 +1,51 @@ +#!/usr/bin/env bash + +# Create a USB image file that can be written to a USB flash drive to update +# firmware on another computer. + +if [ -z "$1" ]; then + echo "$0 " >&2 + exit 1 +fi +MODEL="$1" + +if [ "${MODEL}" = "qemu" ]; then + echo "can't build USB image for flashing QEMU" >&2 + exit 1 +fi + +if [ ! -d "models/${MODEL}" ]; then + echo "model '${MODEL}' not found" >&2 + exit 1 +fi +MODEL_DIR="$(realpath "models/${MODEL}")" + +DATE="$(git show --format="%cd" --date="format:%Y-%m-%d" --no-patch --no-show-signature)" +REV="$(git describe --always --dirty --abbrev=7)" +VERSION="${DATE}_${REV}" + +BUILD="$(realpath "build/${MODEL}")" +if [ ! -e "${BUILD}/firmware.rom" ]; then + echo "'${BUILD}/firmware.rom' not found" >&2 + exit 1 +fi + +USB="${BUILD}/usb.img" + +# Rebuild firmware-update +export BASEDIR="system76_${MODEL}_${VERSION}" +make -C apps/firmware-update "build/x86_64-unknown-uefi/boot.img" +cp -v "apps/firmware-update/build/x86_64-unknown-uefi/boot.img" "${USB}.partial" + +# Copy firmware to USB image +mmd -i "${USB}.partial@@1M" "::${BASEDIR}/firmware" +mcopy -v -i "${USB}.partial@@1M" "${COREBOOT}" "::${BASEDIR}/firmware/firmware.rom" +if [ -e "${BUILD}/ec.rom" ]; then + mcopy -v -i "${USB}.partial@@1M" "${BUILD}/ec.rom" "::${BASEDIR}/firmware/ec.rom" +elif [ -e "${MODEL_DIR}/ec.rom" ]; then + mcopy -v -i "${USB}.partial@@1M" "${MODEL_DIR}/ec.rom" "::${BASEDIR}/firmware/ec.rom" +fi +if [ -e "${MODEL_DIR}/uecflash.efi" ]; then + mcopy -v -i "${USB}.partial@@1M" "${MODEL_DIR}/uecflash.efi" "::${BASEDIR}/firmware/uecflash.efi" +fi +mv -v "${USB}.partial" "${USB}"