mirror of
https://codeberg.org/libreboot/lbmk.git
synced 2026-07-11 14:02:52 +02:00
548872ce8e
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
94 lines
2.8 KiB
Bash
Executable File
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
|