Files
lbmk/resources/scripts/blobs/extract
T
Leah Rowe 548872ce8e haswell boards: use libre mrc.bin replacement
courtesy of Angel Pons from the coreboot project

this uses the following patch set from gerrit, as yet
unmerged (in coreboot master) on this date:

    https://review.coreboot.org/c/coreboot/+/64198/5

logic for downloading mrc blobs has been deleted from
lbmk, as this is now completely obsolete (for haswell
boards)

if other platforms are added later that need mrc.bin,
then logic will be re-added again for that
2023-03-18 00:55:10 +00:00

94 lines
2.8 KiB
Bash
Executable File

#!/usr/bin/env sh
# script to automate extracting blobs from an existing vendor bios
# SPDX-FileCopyrightText: 2022 Caleb La Grange <thonkpeasant@protonmail.com>
# SPDX-License-Identifier: GPL-3.0-only
board="${1}"
vendor_rom="${2}"
Print_help(){
printf "Usage: ./blobutil extract {boardname} {path/to/vendor_rom}\n"
printf "Example: ./blobutil extract x230 12mb_flash.bin\n"
printf "\nYou need to specify exactly 2 arguments\n"
}
Fail(){
printf "\nERROR: $@\n"
exit 1
}
Build_deps(){
if [ ! -d me_cleaner ]; then
printf "downloading me_cleaner\n"
./download me_cleaner || Fail 'could not download me_cleaner'
else
printf "me_cleaner already downloaded. Skipping.\n"
printf "run ./download me_cleaner to manually overwrite\n"
fi
if [ ! -d coreboot/default ]; then
printf "downloading coreboot\n"
./download coreboot default || Fail 'could not download coreboot'
else
printf "coreboot already downloaded. Skipping.\n"
printf "run ./download coreboot to manually overwrite\n"
fi
if ! [ -f coreboot/default/util/ifdtool/ifdtool ]; then
printf "building ifdtool from coreboot\n"
make -C coreboot/default/util/ifdtool || Fail 'could not build ifdtool'
fi
}
Extract_blobs(){
# TODO: find a better way to know which coreboot config to source
set -- "resources/coreboot/${board}/config/*"
. ${1} 2>/dev/null
. "resources/coreboot/${board}/board.cfg"
_me_destination=${CONFIG_ME_BIN_PATH#../../}
_gbe_destination=${CONFIG_GBE_BIN_PATH#../../}
_ifd_destination=${CONFIG_IFD_BIN_PATH#../../}
printf "extracting clean ime and modified ifd\n"
./me_cleaner/me_cleaner.py -D ${_ifd_destination} -M ${_me_destination} ${vendor_rom} -t -r -S \
|| ./resources/blobs/me7_update_parser.py -O ${_me_destination} ${vendor_rom} \
|| Fail 'me_cleaner failed to extract blobs from rom'
printf "extracting gigabit ethernet firmware"
./coreboot/default/util/ifdtool/ifdtool -x ${vendor_rom}
mv flashregion*gbe.bin ${_gbe_destination} || Fail 'could not extract gbe'
# Cleans up other files extracted with ifdtool
rm flashregion*.bin 2> /dev/null
if [ -f ${_ifd_destination} ]; then
printf "gbe, ifd, and me extracted to ${_me_destination%/*}\n"
else
printf "WARNING: Intel firmware descriptor could not be extracted with modified me\n"
fi
}
if [ ! -f "${vendor_rom}" ] ; then
Print_help
exit 1
fi
if [ ! -d "resources/coreboot/${board}" ]; then
Print_help
printf "build/roms: Target %s does not exist in the %s build system. Skipping build.\n" "${projectname}" "${board}"
exit 1
fi
if [ ! -f "resources/coreboot/${board}/board.cfg" ]; then
Print_help
printf "build/roms: Target %s does not have a board.cfg. Skipping build.\n" "${board}"
exit 1
fi
printf "extracting blobs for ${board} from ${vendor_rom}\n"
Build_deps
Extract_blobs