mirror of
https://codeberg.org/libreboot/lbmk.git
synced 2026-03-26 13:59:02 +02:00
This reverts commit a4ea286731.
The licensing audit has been abandoned. I will not be re-licensing
in bulk to MIT.
I can still use MIT license on new works, e.g. utilities, but there's
really no pressing need to re-license lbmk. It's just shell scripts,
and most of what it interacts with (coreboot, grub, seabios) is GPL
anyway.
So who cares?
Ferass's patch was removed due to refusal to re-license, but the
decision to re-license has been canceled.
I'm now aiming for a quick stable release.
151 lines
3.3 KiB
Bash
Executable File
151 lines
3.3 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-FileCopyrightText: 2023 Leah Rowe <leah@libreboot.org>
|
|
# SPDX-License-Identifier: GPL-3.0-only
|
|
|
|
sname=""
|
|
board=""
|
|
vendor_rom=""
|
|
|
|
cbdir="coreboot/default"
|
|
cbcfgsdir="resources/coreboot"
|
|
ifdtool="${cbdir}/util/ifdtool/ifdtool"
|
|
mecleaner="me_cleaner/me_cleaner.py"
|
|
me7updateparser="resources/blobs/me7_update_parser.py"
|
|
|
|
boarddir=""
|
|
|
|
CONFIG_HAVE_MRC=""
|
|
CONFIG_ME_BIN_PATH=""
|
|
CONFIG_GBE_BIN_PATH=""
|
|
CONFIG_IFD_BIN_PATH=""
|
|
|
|
_me_destination=""
|
|
_gbe_destination=""
|
|
_ifd_destination=""
|
|
|
|
main()
|
|
{
|
|
sname=${0}
|
|
if [ $# -lt 2 ]; then
|
|
fail "Missing arguments (less than two)."
|
|
fi
|
|
|
|
board="${1}"
|
|
vendor_rom="${2}"
|
|
|
|
boarddir="${cbcfgsdir}/${board}"
|
|
|
|
check_board
|
|
build_dependencies
|
|
extract_blobs
|
|
}
|
|
|
|
check_board()
|
|
{
|
|
if [ ! -f "${vendor_rom}" ] ; then
|
|
fail "file does not exist: ${vendor_rom}"
|
|
elif [ ! -d "${boarddir}" ]; then
|
|
fail "build/roms ${board}: target not defined"
|
|
elif [ ! -f "${boarddir}/board.cfg" ]; then
|
|
fail "build/roms ${board}: missing board.cfg"
|
|
fi
|
|
}
|
|
|
|
build_dependencies()
|
|
{
|
|
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 ${cbdir} ]; 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 ${ifdtool} ]; then
|
|
printf "building ifdtool from coreboot\n"
|
|
make -C "${ifdtool%/ifdtool}" \
|
|
|| fail "could not build ifdtool"
|
|
fi
|
|
}
|
|
|
|
extract_blobs()
|
|
{
|
|
printf "extracting blobs for %s from %s\n" ${board} ${vendor_rom}
|
|
|
|
set -- "${boarddir}/config/"*
|
|
. ${1} 2>/dev/null
|
|
. "${boarddir}/board.cfg"
|
|
|
|
if [ "$CONFIG_HAVE_MRC" = "y" ]; then
|
|
printf 'haswell board detected, downloading mrc\n'
|
|
./download mrc || fail "could not download mrc"
|
|
fi
|
|
|
|
_me_destination=${CONFIG_ME_BIN_PATH#../../}
|
|
_gbe_destination=${CONFIG_GBE_BIN_PATH#../../}
|
|
_ifd_destination=${CONFIG_IFD_BIN_PATH#../../}
|
|
|
|
extract_blob_intel_me
|
|
extract_blob_intel_gbe_nvm
|
|
|
|
# Cleans up other files extracted with ifdtool
|
|
rm -f flashregion*.bin 2> /dev/null
|
|
|
|
if [ -f ${_ifd_destination} ]; then
|
|
printf "gbe, ifd, and me extracted to %s\n" \
|
|
${_me_destination%/*}
|
|
else
|
|
printf "WARNING: Intel firmware descriptor could not "
|
|
printf "be extracted with modified me\n"
|
|
fi
|
|
}
|
|
|
|
extract_blob_intel_me()
|
|
{
|
|
printf "extracting clean ime and modified ifd\n"
|
|
|
|
${mecleaner} -D ${_ifd_destination} \
|
|
-M ${_me_destination} ${vendor_rom} -t -r -S \
|
|
|| ${me7updateparser} \
|
|
-O ${_me_destination} ${vendor_rom} \
|
|
|| fail \
|
|
"me_cleaner failed to extract blobs from rom"
|
|
}
|
|
|
|
extract_blob_intel_gbe_nvm()
|
|
{
|
|
printf "extracting gigabit ethernet firmware"
|
|
./${ifdtool} -x ${vendor_rom}
|
|
mv flashregion*gbe.bin ${_gbe_destination} \
|
|
|| fail 'could not extract gbe'
|
|
}
|
|
|
|
fail()
|
|
{
|
|
print_help
|
|
|
|
printf "\n%s: ERROR: %s\n" ${sname} $@
|
|
exit 1
|
|
}
|
|
|
|
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"
|
|
}
|
|
|
|
main $@
|