mirror of
https://codeberg.org/libreboot/lbmk.git
synced 2026-03-28 23:19:03 +02:00
osboot is now part of libreboot, and will soon shut down. libreboot now conforms to osboot policy.
90 lines
2.5 KiB
Bash
Executable File
90 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# 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"
|
|
}
|
|
|
|
Build_deps(){
|
|
if [ ! -d me_cleaner ]; then
|
|
printf "downloading me_cleaner\n"
|
|
./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
|
|
else
|
|
printf "coreboot already downloaded. Skipping.\n"
|
|
printf "run ./download coreboot to manually overwrite\n"
|
|
fi
|
|
|
|
printf "building ifdtool from coreboot\n"
|
|
( cd coreboot/default/util/ifdtool && make )
|
|
}
|
|
|
|
Error_out(){
|
|
printf "failed to extract ${1}\nmake sure that your rom dump is valid\n"
|
|
exit 1
|
|
}
|
|
|
|
|
|
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"
|
|
|
|
if [ "$CONFIG_HAVE_MRC" = "y" ]; then
|
|
printf 'haswell board detected, downloading mrc\n'
|
|
./download mrc
|
|
fi
|
|
|
|
_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 || Error_out me
|
|
|
|
printf "extracting gigabit ethernet firmware"
|
|
./coreboot/default/util/ifdtool/ifdtool -x ${vendor_rom}
|
|
mv flashregion*gbe.bin ${_gbe_destination} || Error_out gbe
|
|
|
|
# Cleans up other files extracted with ifdtool
|
|
rm flashregion*.bin 2> /dev/null
|
|
printf "gbe, ifd, and me extracted to ${_me_destination%/*}\n"
|
|
}
|
|
|
|
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
|