diff options
Diffstat (limited to 'resources/scripts')
-rwxr-xr-x | resources/scripts/blobs/download | 21 | ||||
-rwxr-xr-x | resources/scripts/blobs/extract | 35 | ||||
-rwxr-xr-x | resources/scripts/blobs/inject | 21 |
3 files changed, 45 insertions, 32 deletions
diff --git a/resources/scripts/blobs/download b/resources/scripts/blobs/download index c274e9d1..e8e82448 100755 --- a/resources/scripts/blobs/download +++ b/resources/scripts/blobs/download @@ -14,6 +14,11 @@ else redistributable=false fi +Fail(){ + printf "\nERROR: $@\n" + exit 1 +} + Download_needed(){ for need in ${needs}; do case ${need} in @@ -27,8 +32,7 @@ Download_needed(){ done if [ ! -z ${_failed+x} ]; then - printf "\nERROR: failed to obtain${_failed}\nrun: './blobutil extract ${board} /path/to/romdump.rom' to extract the remaining blobs\n" - exit 1 + Fail "failed to obtain ${_failed}\nYou may try manually extracting blobs with './blobutil extract'" fi } @@ -68,27 +72,28 @@ Extract_me(){ return 1 fi - ( cd blobs && innoextract me.exe ) printf 'extracting and stripping intel management engine\n' + innoextract blobs/me.exe -d blobs || Fail 'could not extract me executable with innoextract' ./me_cleaner/me_cleaner.py -r -t -O ${_me_destination} blobs/app/*ME*.bin \ - || ./resources/blobs/me7_update_parser.py -O ${_me_destination} blobs/app/ME7*.bin + || ./resources/blobs/me7_update_parser.py -O ${_me_destination} blobs/app/ME7*.bin \ + || return 1 printf "Truncated and cleaned me output to ${_me_destination}\n" } Build_deps(){ if [ ! -d me_cleaner ]; then printf "downloading me_cleaner\n" - ./download me_cleaner + ./download me_cleaner || Fail 'could not download me_cleaner' fi if [ ! -d coreboot/default ]; then printf "downloading coreboot\n" - ./download coreboot default + ./download coreboot default || Fail 'could not download coreboot' fi if [ ! -f "coreboot/default/util/ifdtool/ifdtool" ]; then - printf "building ifdtool from coreboot\n" - ( cd coreboot/default/util/ifdtool && make ) + printf "building ifdtool from coreboot\n" + make -C coreboot/default/util/ifdtool || Fail 'could not build ifdtool' fi } diff --git a/resources/scripts/blobs/extract b/resources/scripts/blobs/extract index cdb55cfe..b88741a7 100755 --- a/resources/scripts/blobs/extract +++ b/resources/scripts/blobs/extract @@ -13,10 +13,15 @@ Print_help(){ 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 + ./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" @@ -24,19 +29,16 @@ Build_deps(){ if [ ! -d coreboot/default ]; then printf "downloading coreboot\n" - ./download coreboot default + ./download coreboot default || Fail 'could not download coreboot' 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 + 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 } @@ -48,7 +50,7 @@ Extract_blobs(){ if [ "$CONFIG_HAVE_MRC" = "y" ]; then printf 'haswell board detected, downloading mrc\n' - ./download mrc + ./download mrc || Fail 'could not download mrc, check network connection' fi _me_destination=${CONFIG_ME_BIN_PATH#../../} @@ -56,15 +58,22 @@ Extract_blobs(){ _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 + ./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} || Error_out gbe + mv flashregion*gbe.bin ${_gbe_destination} || Fail 'could not extract 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 ${_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 diff --git a/resources/scripts/blobs/inject b/resources/scripts/blobs/inject index 18d91f2c..e33b94dc 100755 --- a/resources/scripts/blobs/inject +++ b/resources/scripts/blobs/inject @@ -3,9 +3,9 @@ # SPDX-FileCopyrightText: 2022 Caleb La Grange <thonkpeasant@protonmail.com> # SPDX-License-Identifier: GPL-3.0-only -Error_out(){ +Fail(){ if [ ! -z ${@+x} ]; then - printf "ERROR: ${@}\n" + printf "\nERROR: ${@}\n" fi cat <<- EOF @@ -26,12 +26,12 @@ Modify_gbe(){ _gbe_location=${CONFIG_GBE_BIN_PATH#../../} if [ ! -f util/nvmutil/nvm ]; then - ( cd util/nvmutil/ && make ) + make -C /util/nvmutil || Fail 'failed to build nvmutil' fi _gbe_tmp=$(mktemp -t gbeXXXX.bin) cp ${_gbe_location} ${_gbe_tmp} - ./util/nvmutil/nvm ${_gbe_tmp} setmac ${new_mac} || Error_out 'failed to modify mac address\nmake sure the mac address in the correct format' + ./util/nvmutil/nvm ${_gbe_tmp} setmac ${new_mac} || Fail 'failed to modify mac address\nmake sure the mac address in the correct format' ./coreboot/default/util/ifdtool/ifdtool -i GbE:${_gbe_tmp} ${rom} -O ${rom} || exit 1 @@ -110,17 +110,16 @@ do done if [ -z ${rom+x} ]; then - Error_out 'no rom specified' + Fail 'no rom specified' elif [ ! -f "${rom}" ]; then - Error_out "${rom} is not a valid path" + Fail "${rom} is not a valid path" elif [ -z ${board+x} ]; then board=$(Detect_board) || \ - Error_out 'no board specified' + Fail 'no board specified' fi if [ ! -d "resources/coreboot/${board}/" ]; then - printf "board ${board} not found\n" - Error_out + Fail "board ${board} not found" fi if [ ! -d coreboot/default ]; then @@ -130,12 +129,12 @@ fi if [ ! -f "coreboot/default/util/ifdtool/ifdtool" ]; then printf "building ifdtool from coreboot\n" -( cd coreboot/default/util/ifdtool && make ) + make -C coreboot/default/util/ifdtool || Fail 'could not build ifdtool' fi if [ ! -f "coreboot/default/util/cbfstool/cbfstool" ]; then printf "building cbfstool from coreboot\n" -( cd coreboot/default/util/cbfstool && make ) +make -C cd coreboot/default/util/cbfstool || Fail 'could not build ifdtool' fi ./blobutil download ${board} && Patch |