- Modify ec, coreboot, and edk submodules to point to personal forks using relative URL path - Add image and script to build firmware in docker container - Move firmware update build steps from flash.sh to build.sh so it can be built inside docker container
95 lines
2.1 KiB
Bash
Executable File
95 lines
2.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -e
|
|
|
|
if [ -z "$1" ]
|
|
then
|
|
echo "$0 <model>" >&2
|
|
exit 1
|
|
fi
|
|
MODEL="$1"
|
|
|
|
if [ ! -d "models/${MODEL}" ]
|
|
then
|
|
echo "model '${MODEL}' not found" >&2
|
|
exit 1
|
|
fi
|
|
|
|
DMI_MODEL="$(cat /sys/class/dmi/id/product_version)"
|
|
if [ "${DMI_MODEL}" != "${MODEL}" ]
|
|
then
|
|
echo "Refusing to flash model '${MODEL}' to model '${DMI_MODEL}'" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Define base directory for firmware-update
|
|
export BASEDIR="system76-firmware-update"
|
|
BUILD="$(realpath "build/${MODEL}")"
|
|
|
|
# Copy firmware
|
|
mkdir -p "${BUILD}/${BASEDIR}/firmware"
|
|
if [ -f "${BUILD}/firmware.rom" ]
|
|
then
|
|
cp -v "${BUILD}/firmware.rom" "${BUILD}/${BASEDIR}/firmware"
|
|
fi
|
|
if [ -f "${BUILD}/ec.rom" ]
|
|
then
|
|
cp -v "${BUILD}/ec.rom" "${BUILD}/${BASEDIR}/firmware"
|
|
fi
|
|
|
|
# Locate EFI partition mount path
|
|
EFI_PATH="$(bootctl --print-esp-path)"
|
|
if [ -z "${EFI_PATH}" ] || [ ! -d "${EFI_PATH}" ]
|
|
then
|
|
echo "EFI system partition '${EFI_PATH}' not found" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Locate EFI partition
|
|
EFI_PART_NAME="$(awk '$2 == "'"${EFI_PATH}"'"' /proc/mounts | awk '{print $1}' | awk -F/ '{print $3}')"
|
|
if [ -z "${EFI_PART_NAME}" ]
|
|
then
|
|
echo "EFI system partition name not found" >&2
|
|
exit 1
|
|
fi
|
|
EFI_PART="$(cat "/sys/class/block/${EFI_PART_NAME}/partition")"
|
|
|
|
# Locate EFI disk
|
|
EFI_DISK=""
|
|
for block in /sys/block/*; do
|
|
if test -e "${block}/${EFI_PART_NAME}"
|
|
then
|
|
EFI_DISK="/dev/$(basename "${block}")"
|
|
break
|
|
fi
|
|
done
|
|
if [ -z "${EFI_DISK}" ]
|
|
then
|
|
echo "EFI system partition disk device not found" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Install to EFI_PATH
|
|
sudo rsync -rv --delete "${BUILD}/${BASEDIR}/" "${EFI_PATH}/${BASEDIR}/"
|
|
|
|
# Ensure boot num is deleted
|
|
if [ -f /sys/firmware/efi/efivars/Boot1776-8be4df61-93ca-11d2-aa0d-00e098032b8c ]
|
|
then
|
|
sudo efibootmgr --quiet --bootnum 1776 --delete-bootnum
|
|
fi
|
|
|
|
# Add entry to EFI boot variables
|
|
sudo efibootmgr \
|
|
--quiet \
|
|
--create \
|
|
--bootnum 1776 \
|
|
--disk "${EFI_DISK}" \
|
|
--part "${EFI_PART}" \
|
|
--loader "\\${BASEDIR}\\boot.efi" \
|
|
--label "${BASEDIR}"
|
|
|
|
# Set entry as next boot item
|
|
sudo efibootmgr --quiet --bootnext 1776
|
|
|
|
echo "Reboot to flash firmware"
|