diff options
Diffstat (limited to 'include/inject.sh')
-rw-r--r-- | include/inject.sh | 159 |
1 files changed, 80 insertions, 79 deletions
diff --git a/include/inject.sh b/include/inject.sh index 476b7eb0..7ec4e42b 100644 --- a/include/inject.sh +++ b/include/inject.sh @@ -34,38 +34,14 @@ eval "`setvars "" has_hashes EC_hash DL_hash DL_url_bkup MRC_refcode_gbe vcfg \ mecleaner kbc1126_ec_dump MRC_refcode_cbtree new_mac _dl SCH5545EC_DL_url \ archive EC_url boarddir rom cbdir DL_url nukemode cbfstoolref FSPFD_hash \ _7ztest ME11bootguard ME11delta ME11version ME11sku ME11pch tmpromdir \ - IFD_platform ifdprefix _me _metmp mfs TBFW_url_bkup TBFW_url \ - TBFW_hash TBFW_size hashfile xromsize xchanged EC_url_bkup need_files \ - vfile cbcfg $cv`" + IFD_platform ifdprefix _me _metmp mfs TBFW_url_bkup TBFW_url TBFW_hash \ + TBFW_size hashfile xromsize xchanged EC_url_bkup vfile cbcfg $cv`" download() { [ $# -gt 0 ] || err "No argument given" export PATH="$PATH:/sbin" - board="$1" && readcfg && readkconfig && bootstrap && getfiles; : -} - -readkconfig() -{ - x_ rm -f "$xbmktmp/cbcfg" - fx_ scankconfig x_ find "$boarddir/config" -type f - - eval "`setcfg "$xbmktmp/cbcfg" 1`" - - for c in $cvchk; do - eval "[ \"\${$c}\" = \"/dev/null\" ] && continue" - eval "[ -z \"\${$c}\" ] && continue" - eval "`setcfg "$vfile"`" - return 0 - done - return 1 -} - -scankconfig() -{ - for cbc in $cv; do - grep "$cbc" "$1" 1>>"$xbmktmp/cbcfg" 2>/dev/null || : - done + board="$1" && readvcfg && readkconfig && bootstrap && getfiles; : } bootstrap() @@ -244,7 +220,6 @@ extract_fsp() inject() { - need_files="n" remkdir "$tmpromdel" set +u +e @@ -261,47 +236,46 @@ inject() setmac) [ $# -gt 2 ] && new_mac="$3" && \ [ -z "$new_mac" ] && err "Empty MAC address specified" ;; - *) err "Unrecognised inject mode: '$2'" + *) + err "Unrecognised inject mode: '$2'" esac [ "$new_mac" = "keep" ] && new_mac="" [ -n "$new_mac" ] && [ "$new_mac" != "restore" ] && \ x_ make -C util/nvmutil clean && x_ make -C util/nvmutil - check_release "$archive" || err "'$archive' is not a release archive" + check_release + readvcfg && patch_release - readcfg && need_files="y" - if [ "$need_files" = "y" ] || [ -n "$new_mac" ]; then - [ "$nukemode" != "nuke" ] && [ "$need_files" = "y" ] && \ - x_ ./mk download "$board" - patch_release_roms - fi + [ "$xchanged" = "y" ] && remktar + + xnot=" NOT" && [ "$xchanged" = "y" ] && xnot="" + printf "\n'%s' was%s modified\n" "$archive" "$xnot" 1>&2 - xtype="patched" && [ "$nukemode" = "nuke" ] && xtype="nuked" - [ "$xchanged" != "y" ] && printf "\n'%s' *NOT* modified.\n" "$archive" - [ "$xchanged" = "y" ] && printf "\n'%s' %s.\n" "$archive" "$xtype"; : + x_ rm -Rf "$tmpromdel" } check_release() { [ -L "$archive" ] && err "'$archive' is a symlink. $dontflash" - e "$archive" f missing && return 1 + e "$archive" f missing && err "'$archive' missing" - archivename="`basename "$archive"`" + archivename="`basename "$archive"`" || err "Can't get '$archive' name" [ -z "$archivename" ] && err "Can't determine archive name. $dontflash" case "$archivename" in *_src.tar.xz) err "'$archive' is a src archive, silly!" ;; grub_*|seagrub_*|custom_*|seauboot_*|seabios_withgrub_*) - return 1 ;; + err "'$archive' is a ROM image (it must be a tarball)" ;; *.tar.xz) _stripped_prefix="${archivename#*_}" board="${_stripped_prefix%.tar.xz}" ;; - *) err "'$archive': could not detect board type - $dontflash" + *) + err "'$archive': could not detect board type - $dontflash" esac; : } -readcfg() +readvcfg() { if [ "$board" = "serprog_rp2040" ] || [ "$board" = "serprog_stm32" ] \ || [ "$board" = "serprog_pico" ]; then @@ -328,8 +302,10 @@ readcfg() [ -n "$IFD_platform" ] && ifdprefix="-p $IFD_platform"; : } -patch_release_roms() +patch_release() { + [ "$nukemode" = "nuke" ] || x_ ./mk download "$board" + has_hashes="n" tmpromdir="$xbmklocal/DO_NOT_FLASH/bin/$board" @@ -337,35 +313,41 @@ patch_release_roms() x_ tar -xf "$archive" -C "${tmpromdir%"/bin/$board"}" for _hashes in $hashfiles; do - [ "$need_files" = "y" ] && e "$tmpromdir/$_hashes" f && \ + e "$tmpromdir/$_hashes" f && \ has_hashes="y" && hashfile="$_hashes" && break; : done - readkconfig || exit 0; [ "$need_files" = "n" ] || \ - fx_ prep x_ find "$tmpromdir" -maxdepth 1 -type f -name "*.rom" + readkconfig || exit 0 + fx_ prep x_ find "$tmpromdir" -maxdepth 1 -type f -name "*.rom" - ( - x_ cd "$tmpromdir" - # NOTE: For compatibility with older rom releases, defer to sha1 - if [ "$has_hashes" = "y" ] && [ "$nukemode" != "nuke" ]; then - sha512sum --status -c "$hashfile" || \ - x_ sha1sum --status -c "$hashfile" - x_ rm -f "$hashfile" - fi - ) || err "'$archive' -> Can't verify vendor hashes. $dontflash" + ( check_vendor_hashes ) || err "Can't verify hashes for '$archive'"; : - [ -z "$new_mac" ] || [ -z "$CONFIG_GBE_BIN_PATH" ] || modify_mac + [ -n "$new_mac" ] && [ -n "$CONFIG_GBE_BIN_PATH" ] && modify_mac; : +} - [ "$xchanged" = "y" ] || rm -Rf "$tmpromdel" || : - [ "$xchanged" = "y" ] || return 0 +readkconfig() +{ + x_ rm -f "$xbmktmp/cbcfg" + fx_ scankconfig x_ find "$boarddir/config" -type f + eval "`setcfg "$xbmktmp/cbcfg" 1`" + setvfile_kconfig && return 1; : +} - ( - x_ cd "${tmpromdir%"/bin/$board"}" - mkrom_tarball "bin/$board" - ) || err "Cannot re-generate '$archive' - $dontflash" +setvfile_kconfig() +{ + for c in $cvchk; do + eval "[ \"\${$c}\" = \"/dev/null\" ] && continue" + eval "[ -z \"\${$c}\" ] && continue" + eval "`setcfg "$vfile"`" + return 1 + done +} - mv "${tmpromdir%"/bin/$board"}/bin/${relname}_${board}.tar.xz" \ - "$archive" || err "'$archive' -> Can't overwrite - $dontflash"; : +scankconfig() +{ + for cbc in $cv; do + grep "$cbc" "$1" 1>>"$xbmktmp/cbcfg" 2>/dev/null || : + done } prep() @@ -392,7 +374,7 @@ prep() [ "$nukemode" = "nuke" ] && mksha512sum "$_xrom" "vendorhashes" - patch_rom "$_xrom" || return 1 # if break return, can still change MAC + add_vfiles "$_xrom" || return 1 # if break return, can still change MAC [ "$nukemode" != "nuke" ] && return 0 # Rename the file, prefixing a warning saying not to flash @@ -400,7 +382,7 @@ prep() x_ rm -f "$_xrom" } -patch_rom() +add_vfiles() { rom="$1" @@ -412,31 +394,31 @@ patch_rom() return 1 fi - [ -n "$CONFIG_HAVE_REFCODE_BLOB" ] && insert "fallback/refcode" \ + [ -n "$CONFIG_HAVE_REFCODE_BLOB" ] && vfile "fallback/refcode" \ "$CONFIG_REFCODE_BLOB_FILE" "stage" - [ "$CONFIG_HAVE_MRC" = "y" ] && insert "mrc.bin" "$CONFIG_MRC_FILE" \ + [ "$CONFIG_HAVE_MRC" = "y" ] && vfile "mrc.bin" "$CONFIG_MRC_FILE" \ "mrc" "0xfffa0000" - [ "$CONFIG_HAVE_ME_BIN" = "y" ] && insert IFD "$CONFIG_ME_BIN_PATH" me - [ "$CONFIG_KBC1126_FIRMWARE" = "y" ] && insert ecfw1.bin \ - "$CONFIG_KBC1126_FW1" raw "$CONFIG_KBC1126_FW1_OFFSET" && insert \ + [ "$CONFIG_HAVE_ME_BIN" = "y" ] && vfile IFD "$CONFIG_ME_BIN_PATH" me + [ "$CONFIG_KBC1126_FIRMWARE" = "y" ] && vfile ecfw1.bin \ + "$CONFIG_KBC1126_FW1" raw "$CONFIG_KBC1126_FW1_OFFSET" && vfile \ ecfw2.bin "$CONFIG_KBC1126_FW2" raw "$CONFIG_KBC1126_FW2_OFFSET" [ -n "$CONFIG_VGA_BIOS_FILE" ] && [ -n "$CONFIG_VGA_BIOS_ID" ] && \ - insert "pci$CONFIG_VGA_BIOS_ID.rom" "$CONFIG_VGA_BIOS_FILE" optionrom + vfile "pci$CONFIG_VGA_BIOS_ID.rom" "$CONFIG_VGA_BIOS_FILE" optionrom [ "$CONFIG_INCLUDE_SMSC_SCH5545_EC_FW" = "y" ] && \ [ -n "$CONFIG_SMSC_SCH5545_EC_FW_FILE" ] && \ - insert sch5545_ecfw.bin "$CONFIG_SMSC_SCH5545_EC_FW_FILE" raw + vfile sch5545_ecfw.bin "$CONFIG_SMSC_SCH5545_EC_FW_FILE" raw [ -z "$CONFIG_FSP_USE_REPO" ] && [ -z "$CONFIG_FSP_FULL_FD" ] && \ [ -n "$CONFIG_FSP_M_FILE" ] && \ - insert "$CONFIG_FSP_M_CBFS" "$CONFIG_FSP_M_FILE" fsp --xip + vfile "$CONFIG_FSP_M_CBFS" "$CONFIG_FSP_M_FILE" fsp --xip [ -z "$CONFIG_FSP_USE_REPO" ] && [ -z "$CONFIG_FSP_FULL_FD" ] && \ [ -n "$CONFIG_FSP_S_FILE" ] && \ - insert "$CONFIG_FSP_S_CBFS" "$CONFIG_FSP_S_FILE" fsp + vfile "$CONFIG_FSP_S_CBFS" "$CONFIG_FSP_S_FILE" fsp printf "ROM image successfully patched: %s\n" "$rom" xchanged="y" } -insert() +vfile() { [ "$2" = "/dev/null" ] && return 0 @@ -449,7 +431,7 @@ insert() if [ "$_t" = "fsp" ] && [ $# -gt 3 ]; then _offset="$4" elif [ $# -gt 3 ] && _offset="-b $4" && [ -z "$4" ]; then - err "insert $*, $rom: offset given but empty (undefined)" + err "vfile $*, $rom: offset given but empty (undefined)" fi [ "$nukemode" = "nuke" ] || x_ e "$_dest" f @@ -473,6 +455,14 @@ insert() xchanged="y"; : } +check_vendor_hashes() +{ + x_ cd "$tmpromdir" + [ "$has_hashes" = "n" ] || [ "$nukemode" = "nuke" ] || sha512sum \ + --status -c "$hashfile" || x_ sha1sum --status -c "$hashfile" + x_ rm -f "$hashfile" +} + modify_mac() { x_ cp "${CONFIG_GBE_BIN_PATH##*../}" "$xbmklocal/gbe" @@ -487,3 +477,14 @@ newmac() e "$1" f && xchanged="y" && x_ \ "$ifdtool" $ifdprefix -i GbE:"$xbmklocal/gbe" "$1" -O "$1"; : } + +remktar() +{ + ( + x_ cd "${tmpromdir%"/bin/$board"}" + mkrom_tarball "bin/$board" + ) || err "Cannot re-generate '$archive' - $dontflash" + + mv "${tmpromdir%"/bin/$board"}/bin/${relname}_${board}.tar.xz" \ + "$archive" || err "'$archive' -> Can't overwrite"; : +} |