summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/git.sh26
-rw-r--r--include/init.sh127
-rw-r--r--include/inject.sh253
-rw-r--r--include/lib.sh121
-rw-r--r--include/mrc.sh61
-rw-r--r--include/rom.sh21
6 files changed, 300 insertions, 309 deletions
diff --git a/include/git.sh b/include/git.sh
index 9be79527..ded12625 100644
--- a/include/git.sh
+++ b/include/git.sh
@@ -5,7 +5,7 @@
eval "`setvars "" loc url bkup_url subfile subhash subrepo subrepo_bkup \
depend subfile_bkup repofail`"
-tmpgit="$xbmkpwd/tmp/gitclone"
+tmpgit="$xbmklocal/gitclone"
fetch_targets()
{
@@ -63,7 +63,7 @@ git_prep()
[ "$XBMK_RELEASE" = "y" ] && rmgit "$tmpgit"
[ "$_loc" = "${_loc%/*}" ] || x_ mkdir -p "${_loc%/*}"
- mv "$tmpgit" "$_loc" || $err "git_prep: !mv $tmpgit $_loc"
+ mv "$tmpgit" "$_loc" || err "git_prep: !mv $tmpgit $_loc"
}
# return 0 if project is single-tree, otherwise 1
@@ -80,20 +80,20 @@ fetch_submodule()
mcfgdir="$mdir/${1##*/}"; eval \
"`setvars "" subhash subrepo subrepo_bkup subfile subfile_bkup st`"
[ ! -f "$mcfgdir/module.cfg" ] || . "$mcfgdir/module.cfg" || \
- $err "! . $mcfgdir/module.cfg"
+ err "! . $mcfgdir/module.cfg"
for xt in repo file; do
_seval="if [ -n \"\$sub$xt\" ] || [ -n \"\$sub${xt}_bkup\" ]"
eval "$_seval; then st=\"\$st \$xt\"; fi"
done
- st="${st# }" && [ "$st" = "repo file" ] && $err "$mdir: repo+file"
+ st="${st# }" && [ "$st" = "repo file" ] && err "$mdir: repo+file"
[ -z "$st" ] && return 0 # subrepo/subfile not defined
chkvars "sub${st}" "sub${st}_bkup" "subhash"
[ "$st" = "file" ] && xbmkget "$subfile" "$subfile_bkup" \
"$tmpgit/$1" "$subhash" && return 0
- rm -Rf "$tmpgit/$1" || $err "!rm '$mdir' '$1'"
+ rm -Rf "$tmpgit/$1" || err "!rm '$mdir' '$1'"
tmpclone "$subrepo" "$subrepo_bkup" "$tmpgit/$1" "$subhash" \
"$mdir/${1##*/}/patches"
}
@@ -105,25 +105,25 @@ tmpclone()
repofail="n"
- [ $# -lt 6 ] || rm -Rf "$3" || $err "git retry: !rm $3 ($1)"
+ [ $# -lt 6 ] || rm -Rf "$3" || err "git retry: !rm $3 ($1)"
repodir="$XBMK_CACHE/repo/${1##*/}" && [ $# -gt 5 ] && repodir="$3"
- mkdir -p "$XBMK_CACHE/repo" || $err "!rmdir $XBMK_CACHE/repo"
+ mkdir -p "$XBMK_CACHE/repo" || err "!rmdir $XBMK_CACHE/repo"
if [ "$livepull" = "y" ] && [ ! -d "$repodir" ]; then
git clone "$1" "$repodir" || git clone $2 "$repodir" || \
- $err "!clone $1 $2 $repodir $4 $5" #
+ err "!clone $1 $2 $repodir $4 $5" #
elif [ -d "$repodir" ] && [ $# -lt 6 ]; then
git -C "$repodir" pull || sleep 3 || git -C "$repodir" pull \
|| sleep 3 || git -C "$repodir" pull || :
fi
(
- [ $# -gt 5 ] || git clone "$repodir" "$3" || $err "!clone $repodir $3"
- git -C "$3" reset --hard "$4" || $err "!reset $1 $2 $3 $4 $5"
+ [ $# -gt 5 ] || git clone "$repodir" "$3" || err "!clone $repodir $3"
+ git -C "$3" reset --hard "$4" || err "!reset $1 $2 $3 $4 $5"
git_am_patches "$3" "$5"
) || repofail="y"
[ "$repofail" = "y" ] && [ $# -lt 6 ] && tmpclone "$@" retry
- [ "$repofail" = "y" ] && $err "!clone $1 $2 $3 $4 $5"; :
+ [ "$repofail" = "y" ] && err "!clone $1 $2 $3 $4 $5"; :
}
git_am_patches()
@@ -132,7 +132,7 @@ git_am_patches()
[ -L "$p" ] && continue
[ -e "$p" ] || continue
[ -d "$p" ] && git_am_patches "$1" "$p" && continue
- [ ! -f "$p" ] || git -C "$1" am "$p" || $err "$1 $2: !am $p"
+ [ ! -f "$p" ] || git -C "$1" am "$p" || err "$1 $2: !am $p"
done; :
}
@@ -140,6 +140,6 @@ nuke()
{
e "config/${1%/}/nuke.list" f missing || while read -r nukefile; do
rmf="src/${2%/}/$nukefile" && [ -L "$rmf" ] && continue
- e "$rmf" e missing || rm -Rf "$rmf" || $err "!rm $rmf, ${2%/}"
+ e "$rmf" e missing || rm -Rf "$rmf" || err "!rm $rmf, ${2%/}"
done < "config/${1%/}/nuke.list"; :
}
diff --git a/include/init.sh b/include/init.sh
index 1b8432ce..8f5ab059 100644
--- a/include/init.sh
+++ b/include/init.sh
@@ -14,44 +14,24 @@ projectsite="https://libreboot.org/"
export PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
xbmkpath="$PATH"
-err="err_"
-
-setvars()
-{
- _setvars=""
- if [ $# -lt 2 ]; then
- printf "\$err \"setvars: too few args\\n\""
- return 0
- fi
- val="$1"
- shift 1
- for var in "$@"; do
- _setvars="$var=\"$val\"; $_setvars"
- done
- printf "%s\n" "${_setvars% }"
-}
-
-err_()
-{
- printf "ERROR %s: %s\n" "$0" "$1" 1>&2
- exit 1
-}
+xbmk_err="err_"
eval "`setvars "" _nogit board reinstall versiondate aur_notice configdir \
- datadir version xbmkpwd relname xbmkpwd xbmktmp python pyver`"
+ datadir version xbmkpwd relname xbmkpwd xbmktmp python pyver xbmklocal \
+ xbmklock`"
xbmk_init()
{
- xbmkpwd="`pwd`" || $err "Cannot generate PWD"
+ xbmkpwd="`pwd`" || err "Cannot generate PWD"
+ xbmklocal="$xbmkpwd/tmp"
+ xbmklock="$xbmkpwd/lock"
+
export PWD="$xbmkpwd"
- if [ $# -gt 0 ] && [ "$1" = "dependencies" ]; then
- install_packages "$@" || exit 1
- exit 0
- fi
+ [ $# -gt 0 ] && [ "$1" = "dependencies" ] && x_ xbmkpkg "$@" && exit 0
- id -u 1>/dev/null 2>/dev/null || $err "suid check failed (id -u)"
- [ "$(id -u)" != "0" ] || $err "this command as root is not permitted"
+ id -u 1>/dev/null 2>/dev/null || err "suid check failed (id -u)"
+ [ "$(id -u)" != "0" ] || err "this command as root is not permitted"
for init_cmd in set_pyver set_env set_version git_init create_tmpdir \
lock create_pathdirs child_exec; do
@@ -59,36 +39,20 @@ xbmk_init()
done
}
-install_packages()
+xbmkpkg()
{
- [ $# -lt 2 ] && $err "fewer than two arguments"
+ [ $# -lt 2 ] && err "fewer than two arguments"
[ $# -gt 2 ] && reinstall="$3"
eval "`setcfg "config/dependencies/$2"`"
chkvars pkg_add pkglist
- $pkg_add $pkglist || $err "Cannot install packages"
+ $pkg_add $pkglist || err "Cannot install packages"
[ -n "$aur_notice" ] && \
printf "You need AUR packages: %s\n" "$aur_notice" 1>&2; :
}
-setcfg()
-{
- [ $# -gt 1 ] && printf "e \"%s\" f missing && return %s;\n" "$1" "$2"
- [ $# -gt 1 ] || \
- printf "e \"%s\" f not && %s \"Missing config\";\n" "$1" "$err"
- printf ". \"%s\" || %s \"Could not read config\";\n" "$1" "$err"
-}
-
-chkvars()
-{
- for var in "$@"; do
- eval "[ -n \"\${$var+x}\" ] || \$err \"$var unset\""
- eval "[ -n \"\$$var\" ] || \$err \"$var unset\""
- done; :
-}
-
xbmk_set_pyver()
{
pyv="import sys; print(sys.version_info[:])"
@@ -97,13 +61,11 @@ xbmk_set_pyver()
pyver="2" && [ "$python" = "python3" ] && pyver="3"
pybin "$python" 1>/dev/null || pyver=""
[ -z "$pyver" ] || "`pybin "$python"`" -c "$pyv" 1>/dev/null \
- 2>/dev/null || $err "Cannot detect host Python version."
- if [ -n "$pyver" ]; then
- pyver="$("$(pybin "$python")" -c "$pyv" | awk '{print $1}')"
- pyver="${pyver#(}"
- pyver="${pyver%,}"
- fi
- [ "${pyver%%.*}" = "3" ] || $err "Bad python version (must by 3.x)"; :
+ 2>/dev/null || err "Cannot detect host Python version."
+ [ -n "$pyver" ] && \
+ pyver="$("$(pybin "$python")" -c "$pyv" | awk '{print $1}')" && \
+ pyver="${pyver#(}" && pyver="${pyver%,}"
+ [ "${pyver%%.*}" = "3" ] || err "Bad python version (must by 3.x)"; :
}
# Use direct path, to prevent a hang if Python is using a virtual environment,
@@ -132,8 +94,7 @@ pybin()
[ -e "$pypath/$1" ] && [ ! -d "$pypath/$1" ] && \
[ -x "$pypath/$1" ] && printf "%s/%s\n" "$pypath" "$1" && \
return 0
- done
- [ $venv -gt 0 ] && return 1
+ done && return 1
# Defer to normal command -v if not a venv
command -v "$1" 2>/dev/null || return 1
@@ -145,9 +106,9 @@ xbmk_set_env()
[ -z "${XBMK_CACHE+x}" ] && export XBMK_CACHE="$xbmkpwd/cache"
[ -z "$XBMK_CACHE" ] && export XBMK_CACHE="$xbmkpwd/cache"
[ -L "$XBMK_CACHE" ] && [ "$XBMK_CACHE" = "$xbmkpwd/cache" ] && \
- $err "cachedir '$xbmkpwd/cache' is a symlink"
+ err "cachedir '$xbmkpwd/cache' is a symlink"
[ -L "$XBMK_CACHE" ] && export XBMK_CACHE="$xbmkpwd/cache"
- [ -f "$XBMK_CACHE" ] && $err "cachedir '$XBMK_CACHE' is a file"; :
+ [ -f "$XBMK_CACHE" ] && err "cachedir '$XBMK_CACHE' is a file"; :
# if "y": a coreboot target won't be built if target.cfg says release="n"
# (this is used to exclude certain build targets from releases)
@@ -165,9 +126,9 @@ xbmk_set_version()
[ ! -f ".versiondate" ] || read -r versiondate < ".versiondate" || :; :
[ -e ".git" ] || [ -f ".version" ] || printf "unknown\n" > ".version" \
- || $err "Cannot generate unknown .version file"
+ || err "Cannot generate unknown .version file"
[ -e ".git" ] || [ -f ".versiondate" ] || printf "1716415872\n" > \
- ".versiondate" || $err "Can't generate unknown versiondate file"; :
+ ".versiondate" || err "Can't generate unknown versiondate file"; :
version_="$version"
[ ! -e ".git" ] || version="$(git describe --tags HEAD 2>&1)" || \
@@ -177,8 +138,8 @@ xbmk_set_version()
--pretty='%ct' HEAD)" || versiondate="$versiondate_"
chkvars version versiondate
- printf "%s\n" "$version" > ".version" || $err "can't save version"
- printf "%s\n" "$versiondate" > ".versiondate" || $err "can't save date"
+ printf "%s\n" "$version" > ".version" || err "can't save version"
+ printf "%s\n" "$versiondate" > ".versiondate" || err "can't save date"
relname="$projectname-$version"
export LOCALVERSION="-$projectname-${version%%-*}"
@@ -186,6 +147,11 @@ xbmk_set_version()
xbmk_git_init()
{
+ for gitarg in "--global user.name" "--global user.email"; do
+ gitcmd="git config $gitarg"; $gitcmd 1>/dev/null 2>/dev/null \
+ || err "Run this first: $gitcmd \"your ${gitcmd##*.}\""
+ done
+
[ -L ".git" ] && return 1
[ -e ".git" ] && return 0
eval "`setvars "$(date -Rud @$versiondate)" cdate _nogit`"
@@ -195,16 +161,13 @@ xbmk_git_init()
x_ git commit -m "$projectname $version" --date "$cdate" \
--author="xbmk <xbmk@example.com>" 1>/dev/null 2>/dev/null
x_ git tag -a "$version" -m "$projectname $version" 1>/dev/null \
- 2>/dev/null
-
- for gitarg in "--global user.name" "--global user.email"; do
- gitcmd="git config $gitarg"; $gitcmd || $err \
- "Please run this first: $gitcmd \"your ${gitcmd##*.}\""
- done
+ 2>/dev/null; :
}
xbmk_create_tmpdir()
{
+ x_ mkdir -p "$xbmklocal"
+
# unify all temporary files/directories in a single TMPDIR
[ -z "${TMPDIR+x}" ] || [ "${TMPDIR%_*}" = "/tmp/xbmk" ] || \
unset TMPDIR
@@ -215,39 +178,37 @@ xbmk_create_tmpdir()
export TMPDIR="/tmp"
export TMPDIR="$(mktemp -d -t xbmk_XXXXXXXX)"
xbmktmp="$TMPDIR"
+
+ # /tmp might be a tmpfs, so for large files we use ./tmp,
+ # not to be confused with xbmktmp (xbmktmp points to /tmp)
+ remkdir "$xbmktmp" "$xbmklocal"
}
xbmk_lock()
{
- [ -f "lock" ] && $err "$xbmkpwd/lock exists. Is a build running?"
- touch lock || $err "cannot create 'lock' file"; :
+ [ -f "$xbmklock" ] && err "'$xbmklock' exists. Is a build running?"
+ touch "$xbmklock" || err "cannot create '$xbmklock'"; :
}
xbmk_create_pathdirs()
{
- x_ rm -Rf "$XBMK_CACHE/xbmkpath" "$XBMK_CACHE/gnupath"
- x_ mkdir -p "$XBMK_CACHE/gnupath" "$XBMK_CACHE/xbmkpath"
+ remkdir "$XBMK_CACHE/gnupath" "$XBMK_CACHE/xbmkpath"
export PATH="$XBMK_CACHE/xbmkpath:$XBMK_CACHE/gnupath:$PATH"
(
# set up python v3.x in PATH, in case it's not set up correctly.
# see code above that detected the correct python3 command.
- cd "$XBMK_CACHE/xbmkpath" || $err "can't cd $XBMK_CACHE/xbmkpath"
+ cd "$XBMK_CACHE/xbmkpath" || err "can't cd $XBMK_CACHE/xbmkpath"
x_ ln -s "`pybin "$python"`" python
- ) || $err "Can't set up python symlink in $XBMK_CACHE/xbmkpath"; :
+ ) || err "Can't set up python symlink in $XBMK_CACHE/xbmkpath"; :
}
xbmk_child_exec()
{
xbmk_rval=0
( x_ ./mk "$@" ) || xbmk_rval=1
- rm -Rf "$xbmktmp" || xbmk_rval=1
- rm -f lock || xbmk_rval=1
+ ( x_ rm -Rf "$xbmklocal" "$xbmktmp" ) || xbmk_rval=1
+ ( x_ rm -f "$xbmklock" ) || xbmk_rval=1
exit $xbmk_rval
}
-x_()
-{
- [ $# -lt 1 ] || "$@" || $err "Unhandled error for: $(echo "$@")"; :
-}
-
xbmk_init "$@"
diff --git a/include/inject.sh b/include/inject.sh
index 6b316729..f1ecb0d5 100644
--- a/include/inject.sh
+++ b/include/inject.sh
@@ -1,4 +1,4 @@
-# SPDX-License-Identifier: GPL-3.0-only
+# SPD-License-Identifier: GPL-3.0-only
# Copyright (c) 2022 Caleb La Grange <thonkpeasant@protonmail.com>
# Copyright (c) 2022 Ferass El Hafidi <vitali64pmemail@protonmail.com>
# Copyright (c) 2023-2025 Leah Rowe <leah@libreboot.org>
@@ -14,7 +14,7 @@ hashfiles="vendorhashes blobhashes" # blobhashes for backwards compatibility
dontflash="!!! AN ERROR OCCURED! Please DO NOT flash if injection failed. !!!"
vfix="DO_NOT_FLASH_YET._FIRST,_INJECT_FILES_VIA_INSTRUCTIONS_ON_LIBREBOOT.ORG_"
vguide="https://libreboot.org/docs/install/ivy_has_common.html"
-tmpromdel="$xbmkpwd/tmp/DO_NOT_FLASH"
+tmpromdel="$xbmklocal/DO_NOT_FLASH"
nvm="util/nvmutil/nvm"
ifdtool="elf/ifdtool/default/ifdtool"
@@ -41,7 +41,7 @@ eval "`setvars "" has_hashes EC_hash DL_hash DL_url_bkup MRC_refcode_gbe vcfg \
download()
{
- [ $# -gt 0 ] || $err "No argument given"
+ [ $# -gt 0 ] || err "No argument given"
export PATH="$PATH:/sbin"
board="$1" && readcfg && readkconfig && bootstrap && getfiles; :
}
@@ -86,16 +86,13 @@ getfiles()
"$E6400_VGA_DL_url_bkup" "$E6400_VGA_DL_hash" "$CONFIG_VGA_BIOS_FILE"
[ -z "$CONFIG_HAVE_MRC" ] || fetch "mrc" "$MRC_url" "$MRC_url_bkup" \
"$MRC_hash" "$CONFIG_MRC_FILE"
+ [ -n "$CONFIG_REFCODE_BLOB_FILE" ] && fetch "refcode" "$MRC_url" \
+ "$MRC_url_bkup" "$MRC_hash" "$CONFIG_REFCODE_BLOB_FILE"
[ -z "$CONFIG_LENOVO_TBFW_BIN" ] || fetch "tbfw" "$TBFW_url" \
"$TBFW_url_bkup" "$TBFW_hash" "$CONFIG_LENOVO_TBFW_BIN"
- #
- # in the future, we might have libre fsp-s and then fsp-m.
- # therefore, handle them separately, in case one of them is libre; if
- # one of them was, the path wouldn't be set.
- #
- [ -z "$CONFIG_FSP_M_FILE" ] || fetch "fspm" "$CONFIG_FSP_FD_PATH" \
+ [ -z "$CONFIG_FSP_M_FILE" ] || fetch "fsp" "$CONFIG_FSP_FD_PATH" \
"$CONFIG_FSP_FD_PATH" "$FSPFD_hash" "$CONFIG_FSP_M_FILE" copy
- [ -z "$CONFIG_FSP_S_FILE" ] || fetch "fsps" "$CONFIG_FSP_FD_PATH" \
+ [ -z "$CONFIG_FSP_S_FILE" ] || fetch "fsp" "$CONFIG_FSP_FD_PATH" \
"$CONFIG_FSP_FD_PATH" "$FSPFD_hash" "$CONFIG_FSP_S_FILE" copy; :
}
@@ -109,51 +106,50 @@ fetch()
[ "$5" = "/dev/null" ] && return 0
_dl="$XBMK_CACHE/file/$dlsum"
- if [ "$dl_type" = "fspm" ] || [ "$dl_type" = "fsps" ]; then
- # HACK: if grabbing fsp from coreboot, fix the path for lbmk
- for _cdl in dl dl_bkup; do
- eval "$_cdl=\"\${$_cdl##*../}\"; _cdp=\"\$$_cdl\""
- [ -f "$_cdp" ] || _cdp="$cbdir/$_cdp"
- [ -f "$_cdp" ] && eval "$_cdl=\"$_cdp\""
- done
- fi
+ # HACK: if grabbing fsp from coreboot, fix the path for lbmk
+ [ "$dl_type" = "fsp" ] && for _cdl in dl dl_bkup; do
+ eval "$_cdl=\"\${$_cdl##*../}\"; _cdp=\"\$$_cdl\""
+ [ -f "$_cdp" ] || _cdp="$cbdir/$_cdp"
+ [ -f "$_cdp" ] && eval "$_cdl=\"$_cdp\""
+ done; :
dlop="curl" && [ $# -gt 5 ] && dlop="$6"
xbmkget "$dl" "$dl_bkup" "$_dl" "$dlsum" "$dlop"
- rm -Rf "${_dl}_extracted" || $err "!rm ${_ul}_extracted. $dontflash"
+ rm -Rf "${_dl}_extracted" || err "!rm ${_ul}_extracted. $dontflash"
e "$_dest" f && return 0
x_ mkdir -p "${_dest%/*}"
remkdir "$appdir"
- extract_archive "$_dl" "$appdir" "$dl_type" || \
- [ "$dl_type" = "e6400vga" ] || $err "$_dest $dl_type: !extract"
+ [ "$dl_type" = "fsp" ] || extract_archive "$_dl" "$appdir" || \
+ [ "$dl_type" = "e6400vga" ] || err "$_dest $dl_type: !extract"
- eval "extract_$dl_type"
+ x_ extract_$dl_type "$_dl" "$appdir"
set -u -e
- e "$_dest" f missing && $err "!extract_$dl_type. $dontflash"; :
+ e "$_dest" f missing && err "!extract_$dl_type. $dontflash"; :
}
extract_intel_me()
{
- e "$mecleaner" f not && $err "$cbdir: me_cleaner missing. $dontflash"
+ e "$mecleaner" f not && err "$cbdir: me_cleaner missing. $dontflash"
cdir="$xbmkpwd/$appdir"
_me="$xbmkpwd/$_dest"
- _metmp="$xbmkpwd/tmp/me.bin"
+ _metmp="$xbmklocal/me.bin"
mfs="" && [ "$ME11bootguard" = "y" ] && mfs="--whitelist MFS" && \
chkvars ME11delta ME11version ME11sku ME11pch
[ "$ME11bootguard" = "y" ] && x_ ./mk -f deguard
- x_ mkdir -p tmp
-
extract_intel_me_bruteforce
- if [ "$ME11bootguard" = "y" ]; then
- apply_me11_deguard_mod
- else
- mv "$_metmp" "$_me" || $err "!mv $_metmp $_me - $dontflash"
- fi
+ [ "$ME11bootguard" != "y" ] && x_ mv "$_metmp" "$_me" && return 0
+
+ (
+ x_ cd src/deguard/
+ x_ ./finalimage.py --delta "data/delta/$ME11delta" --version \
+ "$ME11version" --pch "$ME11pch" --sku "$ME11sku" \
+ --fake-fpfs data/fpfs/zero --input "$_metmp" --output "$_me"
+ ) || err "Error running deguard for $_me - $dontflash"; :
}
extract_intel_me_bruteforce()
@@ -167,11 +163,13 @@ extract_intel_me_bruteforce()
set +u +e
(
[ "${cdir#/a}" != "$cdir" ] && cdir="${cdir#/}"
- cd "$cdir" || $err "extract_intel_me: !cd \"$cdir\" - $dontflash"
+ cd "$cdir" || err "extract_intel_me: !cd \"$cdir\" - $dontflash"
for i in *; do
- e "$_metmp" f && break
+ c=0 && e "$_metmp" f && break
[ -L "$i" ] && continue
- if [ -f "$i" ]; then
+ [ -e "$i" ] || continue
+ [ -d "$i" ] && extract_intel_me_bruteforce "$cdir/$i" && c=1
+ if [ $c -eq 0 ] && [ -f "$i" ]; then
_r="-r" && [ -n "$mfs" ] && _r=""
"$mecleaner" $mfs $_r -t -O "$sdir/vendorfile" \
-M "$_metmp" "$i" && break
@@ -180,52 +178,20 @@ extract_intel_me_bruteforce()
_7ztest="${_7ztest}a"
extract_archive "$i" "$_7ztest" || continue
extract_intel_me_bruteforce "$cdir/$_7ztest"
- elif [ -d "$i" ]; then
- extract_intel_me_bruteforce "$cdir/$i"
- else
- continue
fi
cdir="$1"; [ "${cdir#/a}" != "$cdir" ] && cdir="${cdir#/}"
cd "$cdir" || :
done
) || :
- rm -Rf "$sdir" || $err "extract_intel_me: !rm -Rf $sdir - $dontflash"
-}
-
-apply_me11_deguard_mod()
-{
- (
- x_ cd src/deguard/
- x_ ./finalimage.py --delta "data/delta/$ME11delta" \
- --version "$ME11version" \
- --pch "$ME11pch" --sku "$ME11sku" --fake-fpfs data/fpfs/zero \
- --input "$_metmp" --output "$_me"
- ) || $err "Error running deguard for $_me - $dontflash"
+ rm -Rf "$sdir" || err "extract_intel_me: !rm -Rf $sdir - $dontflash"
}
extract_archive()
{
- if [ $# -gt 2 ]; then
- if [ "$3" = "fspm" ] || [ "$3" = "fsps" ]; then
- decat_fspfd "$1" "$2"
- return 0
- fi
- fi
-
innoextract "$1" -d "$2" || python "$pfs_extract" "$1" -e || 7z x \
"$1" -o"$2" || unar "$1" -o "$2" || unzip "$1" -d "$2" || return 1
- [ ! -d "${_dl}_extracted" ] || cp -R "${_dl}_extracted" "$2" || \
- $err "!mv '${_dl}_extracted' '$2' - $dontflash"; :
-}
-
-decat_fspfd()
-{
- _fspfd="$1"
- _fspdir="$2"
- _fspsplit="$cbdir/3rdparty/fsp/Tools/SplitFspBin.py"
-
- x_ $python "$_fspsplit" split -f "$_fspfd" -o "$_fspdir" -n "Fsp.fd"
+ [ ! -d "${_dl}_extracted" ] || x_ cp -R "${_dl}_extracted" "$2"; :
}
extract_kbc1126ec()
@@ -236,16 +202,14 @@ extract_kbc1126ec()
mv Rompaq/68*.BIN ec.bin || :
if [ ! -f "ec.bin" ]; then
unar -D ROM.CAB Rom.bin || unar -D Rom.CAB Rom.bin || \
- unar -D 68*.CAB Rom.bin || $err "kbc1126 unar failed"
+ unar -D 68*.CAB Rom.bin || err "kbc1126 unar failed"
x_ mv Rom.bin ec.bin
fi
x_ e ec.bin f && x_ "$kbc1126_ec_dump" ec.bin
- ) || $err "$board: can't extract kbc1126 ec firmware - $dontflash"
+ ) || err "$board: can't extract kbc1126 ec firmware - $dontflash"
x_ e "$appdir/ec.bin.fw1" f && x_ e "$appdir/ec.bin.fw2" f
-
- cp "$appdir/"ec.bin.fw* "${_dest%/*}/" || \
- $err "!cp 1126ec $_dest - $dontflash"; :
+ x_ cp "$appdir/"ec.bin.fw* "${_dest%/*}/"
}
extract_e6400vga()
@@ -257,7 +221,7 @@ extract_e6400vga()
x_ cd "$appdir"
x_ e "bios.bin" f
"$e6400_unpack" bios.bin || printf "TODO: fix dell extract util\n"
- ) || $err "can't extract e6400 vga rom - $dontflosh"
+ ) || err "can't extract e6400 vga rom - $dontflosh"
x_ cp "$appdir/$E6400_VGA_romname" "$_dest"
}
@@ -270,7 +234,7 @@ extract_sch5545ec()
_sch5545ec_fw="$_sch5545ec_fw/54 D386BEB8-4B54-4E69-94F5-06091F67E0D3"
_sch5545ec_fw="$_sch5545ec_fw/0 Raw section/body.bin" # <-- this!
- "$uefiextract" "$_bios" || $err "sch5545 !extract - $dontflash"
+ "$uefiextract" "$_bios" || err "sch5545 !extract - $dontflash"
x_ cp "$_sch5545ec_fw" "$_dest"
}
@@ -278,35 +242,19 @@ extract_sch5545ec()
# https://pcsupport.lenovo.com/us/en/products/laptops-and-netbooks/thinkpad-t-series-laptops/thinkpad-t480-type-20l5-20l6/20l5/solutions/ht508988
extract_tbfw()
{
- chkvars TBFW_size # size in bytes, matching TBFW's flash IC
- x_ mkdir -p tmp
- x_ rm -f tmp/tb.bin
- find "$appdir" -type f -name "TBT.bin" > "tmp/tb.txt" || \
- $err "extract_tbfw $_dest: Can't extract TBT.bin - $dontflash"
- while read -r f; do
- [ -f "$f" ] || continue
- [ -L "$f" ] && continue
- x_ cp "$f" "tmp/tb.bin"
- break
- done < "tmp/tb.txt"
- x_ dd if=/dev/null of=tmp/tb.bin bs=1 seek=$TBFW_size
- x_ cp "tmp/tb.bin" "$_dest"
-}
-
-extract_fspm()
-{
- copy_fsp M; :
+ chkvars TBFW_size && fe_ copy_tbfw "$appdir" -type f -name "TBT.bin"
}
-extract_fsps()
+copy_tbfw()
{
- copy_fsp S; :
+ [ -f "$1" ] && [ ! -L "$1" ] && x_ dd if=/dev/null of="$1" bs=1 \
+ seek=$TBFW_size && x_ mv "$1" "$_dest" && return 1; :
}
-# this copies the fsp s/m; re-base is handled by ./mk inject
-copy_fsp()
+extract_fsp()
{
- x_ cp "$appdir/Fsp_$1.fd" "$_dest"
+ x_ python "$cbdir/3rdparty/fsp/Tools/SplitFspBin.py" split -f "$1" \
+ -o "$2" -n "Fsp.fd" && x_ cp "$appdir/"Fsp_*.fd "${_dest%/*}"
}
fail_inject()
@@ -322,15 +270,15 @@ fail_inject()
inject()
{
need_files="n"
- err="fail_inject"
+ xbmk_err="fail_inject"
remkdir "$tmpromdel"
set +u +e
- [ $# -lt 1 ] && $err "No options specified. - $dontflash"
+ [ $# -lt 1 ] && err "No options specified. - $dontflash"
eval "`setvars "" nukemode new_mac xchanged`"
archive="$1";
- new_mac="??:??:??:??:??:??"
+ new_mac="xx:xx:xx:xx:xx:xx"
[ $# -gt 1 ] && case "$2" in
nuke)
@@ -338,12 +286,15 @@ inject()
nukemode="nuke" ;;
setmac)
[ $# -gt 2 ] && new_mac="$3" && \
- [ -z "$new_mac" ] && $err "Empty MAC address specified" ;;
- *) $err "Unrecognised inject mode: '$2'"
+ [ -z "$new_mac" ] && err "Empty MAC address specified" ;;
+ *) err "Unrecognised inject mode: '$2'"
esac
[ "$new_mac" = "keep" ] && new_mac=""
- check_release "$archive" || $err "'$archive' is not a release archive"
+ [ -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"
readcfg && need_files="y"
if [ "$need_files" = "y" ] || [ -n "$new_mac" ]; then
@@ -359,20 +310,20 @@ inject()
check_release()
{
- [ -L "$archive" ] && $err "'$archive' is a symlink. $dontflash"
+ [ -L "$archive" ] && err "'$archive' is a symlink. $dontflash"
e "$archive" f missing && return 1
archivename="`basename "$archive"`"
- [ -z "$archivename" ] && $err "Can't determine archive name. $dontflash"
+ [ -z "$archivename" ] && err "Can't determine archive name. $dontflash"
case "$archivename" in
*_src.tar.xz)
- $err "'$archive' is a src archive, silly!" ;;
+ err "'$archive' is a src archive, silly!" ;;
grub_*|seagrub_*|custom_*|seauboot_*|seabios_withgrub_*)
return 1 ;;
*.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; :
}
@@ -390,8 +341,8 @@ readcfg()
[ -z "$vcfg" ] && return 1
vfile="config/vendor/$vcfg/pkg.cfg"
- [ -L "$vfile" ] && $err "'$archive', '$board': $vfile is a symlink"
- [ -f "$vfile" ] || $err "'$archive', '$board': $vfile doesn't exist"
+ [ -L "$vfile" ] && err "'$archive', '$board': $vfile is a symlink"
+ [ -f "$vfile" ] || err "'$archive', '$board': $vfile doesn't exist"
cbdir="src/coreboot/$tree"
cbfstool="elf/cbfstool/$tree/cbfstool"
@@ -406,7 +357,7 @@ readcfg()
patch_release_roms()
{
has_hashes="n"
- tmpromdir="tmp/DO_NOT_FLASH/bin/$board"
+ tmpromdir="$xbmklocal/DO_NOT_FLASH/bin/$board"
remkdir "${tmpromdir%"/bin/$board"}"
x_ tar -xf "$archive" -C "${tmpromdir%"/bin/$board"}"
@@ -417,16 +368,8 @@ patch_release_roms()
hashfile="$_hashes" && break; :
done
- x_ mkdir -p "tmp" && [ -L "tmp/rom.list" ] && \
- $err "'$archive' -> tmp/rom.list is a symlink - $dontflash"
-
- find "$tmpromdir" -maxdepth 1 -type f -name "*.rom" > "tmp/rom.list" \
- || $err "'$archive' -> Can't make tmp/rom.list - $dontflash"
-
if readkconfig; then
- while read -r _xrom ; do
- process_release_rom "$_xrom" || break
- done < "tmp/rom.list"
+ fe_ prep_rom "$tmpromdir" -maxdepth 1 -type f -name "*.rom"
[ "$nukemode" != "nuke" ] || \
printf "Make sure you inserted vendor files: %s\n" \
"$vguide" > "$tmpromdir/README.md" || :
@@ -437,14 +380,14 @@ patch_release_roms()
(
[ "$need_files" = "y" ] || exit 0
- cd "$tmpromdir" || $err "patch '$archive': can't cd $tmpromdir"
+ cd "$tmpromdir" || err "patch '$archive': can't 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"
+ ) || err "'$archive' -> Can't verify vendor hashes. $dontflash"
[ -z "$new_mac" ] || modify_mac || printf "\nGbE not defined\n" 1>&2
@@ -454,13 +397,13 @@ patch_release_roms()
(
x_ cd "${tmpromdir%"/bin/$board"}"
mkrom_tarball "bin/$board"
- ) || $err "Cannot re-generate '$archive' - $dontflash"
+ ) || err "Cannot re-generate '$archive' - $dontflash"
mv "${tmpromdir%"/bin/$board"}/bin/${relname}_${board}.tar.xz" \
- "$archive" || $err "'$archive' -> Can't overwrite - $dontflash"; :
+ "$archive" || err "'$archive' -> Can't overwrite - $dontflash"; :
}
-process_release_rom()
+prep_rom()
{
_xrom="$1"
_xromname="${1##*/}"
@@ -468,16 +411,16 @@ process_release_rom()
[ "$nukemode" = "nuke" ] && _xromnew="${_xrom%/*}/$vfix${_xrom##*/}"
e "$_xrom" f missing && return 0
- [ -z "${_xromname#"$vfix"}" ] && $err "$_xromname / $vfix: name match"
+ [ -z "${_xromname#"$vfix"}" ] && err "$_xromname / $vfix: name match"
# Remove the prefix and 1-byte pad
if [ "$nukemode" != "nuke" ] && \
[ "${_xromname#"$vfix"}" != "$_xromname" ]; then
- xromsize="$(expr $(stat -c '%s' "$_xrom") - 1)" || $err "!int"
- [ $xromsize -lt 524288 ] && $err "too small, $xromsize: $_xrom"
+ xromsize="$(expr $(stat -c '%s' "$_xrom") - 1)" || err "!int"
+ [ $xromsize -lt 524288 ] && err "too small, $xromsize: $_xrom"
x_ dd if="$_xrom" of="$_xromnew" bs=$xromsize count=1
- rm -f "$_xrom" || $err "Can't rm $_xrom - $dontflash"
+ rm -f "$_xrom" || err "Can't rm $_xrom - $dontflash"
_xrom="$_xromnew"
fi
@@ -488,7 +431,7 @@ process_release_rom()
[ "$nukemode" != "nuke" ] && return 0
# Rename the file, prefixing a warning saying not to flash
- cat "$_xrom" config/data/coreboot/0 > "$_xromnew" || $err "!pad $_xrom"
+ cat "$_xrom" config/data/coreboot/0 > "$_xromnew" || err "!pad $_xrom"
x_ rm -f "$_xrom"
}
@@ -538,11 +481,10 @@ insert()
_offset=""
- if [ "$_t" = "fsp" ]; then
- [ $# -gt 3 ] && _offset="$4"
- else
- [ $# -gt 3 ] && _offset="-b $4" && [ -z "$4" ] && \
- $err "insert $*, $rom: offset given but empty (undefined)"
+ 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)"
fi
[ "$nukemode" = "nuke" ] || x_ e "$_dest" f
@@ -550,20 +492,19 @@ insert()
if [ "$cbfsname" = "IFD" ]; then
[ "$nukemode" = "nuke" ] || "$ifdtool" $ifdprefix -i \
$_t:$_dest "$rom" -O "$rom" || \
- $err "failed: insert '$_t' '$_dest' on '$rom'"
+ err "failed: insert '$_t' '$_dest' on '$rom'"
[ "$nukemode" != "nuke" ] || "$ifdtool" $ifdprefix --nuke $_t \
- "$rom" -O "$rom" || $err "$rom: !nuke IFD/$_t"
+ "$rom" -O "$rom" || err "$rom: !nuke IFD/$_t"
elif [ "$nukemode" = "nuke" ]; then
x_ "$cbfstool" "$rom" remove -n "$cbfsname"
elif [ "$_t" = "stage" ]; then # the only stage we handle is refcode
- x_ mkdir -p tmp
- x_ rm -f "tmp/refcode"
- "$rmodtool" -i "$_dest" -o "tmp/refcode" || "!reloc refcode"
- "$cbfstool" "$rom" add-stage -f "tmp/refcode" -n "$cbfsname" \
- -t stage || $err "$rom: !add ref"
+ x_ rm -f "$xbmklocal/refcode"
+ "$rmodtool" -i "$_dest" -o "$xbmklocal/refcode" || "!reloc ref"
+ "$cbfstool" "$rom" add-stage -f "$xbmklocal/refcode" \
+ -n "$cbfsname" -t stage || err "$rom: !add ref"
else
"$cbfstool" "$rom" add -f "$_dest" -n "$cbfsname" \
- -t $_t $_offset || $err "$rom !add $_t ($_dest)"
+ -t $_t $_offset || err "$rom !add $_t ($_dest)"
fi
xchanged="y"; :
}
@@ -572,22 +513,18 @@ modify_mac()
{
[ -n "$CONFIG_GBE_BIN_PATH" ] || return 1
- x_ mkdir -p tmp && x_ cp "${CONFIG_GBE_BIN_PATH##*../}" tmp/gbe
- [ "$new_mac" != "restore" ] && x_ make -C util/nvmutil && \
- x_ "$nvm" tmp/gbe setmac "$new_mac"
+ x_ cp "${CONFIG_GBE_BIN_PATH##*../}" "$xbmklocal/gbe"
+ [ -n "$new_mac" ] && [ "$new_mac" != "restore" ] && \
+ x_ "$nvm" "$xbmklocal/gbe" setmac "$new_mac"
- find "$tmpromdir" -maxdepth 1 -type f -name "*.rom" > "tmp/rom.list" \
- || $err "'$archive' -> Can't make tmp/rom.list - $dontflash"
-
- while read -r _xrom; do
- e "$_xrom" f && xchanged="y" && x_ \
- "$ifdtool" $ifdprefix -i GbE:tmp/gbe "$_xrom" -O "$_xrom"
- done < "tmp/rom.list"
+ fe_ newmac "$tmpromdir" -maxdepth 1 -type f -name "*.rom"
printf "\nGbE NVM written to '%s':\n" "$archive"
- x_ "$nvm" tmp/gbe dump | grep -v "bytes read from file" || :
+ x_ "$nvm" "$xbmklocal/gbe" dump | grep -v "bytes read from file" || :
+}
- [ "$new_mac" = "restore" ] && \
- printf "\nDefault GbE file '%s' written, unmodified.\n" \
- "${CONFIG_GBE_BIN_PATH##*../}"; :
+newmac()
+{
+ e "$1" f && xchanged="y" && x_ \
+ "$ifdtool" $ifdprefix -i GbE:"$xbmklocal/gbe" "$1" -O "$1"; :
}
diff --git a/include/lib.sh b/include/lib.sh
index 7a5f2621..43b1a318 100644
--- a/include/lib.sh
+++ b/include/lib.sh
@@ -9,14 +9,14 @@ rmodtool="elf/cbfstool/default/rmodtool"
remkdir()
{
- rm -Rf "$1" || $err "remkdir: !rm -Rf \"$1\""
- mkdir -p "$1" || $err "remkdir: !mkdir -p \"$1\""
+ x_ rm -Rf "$@"
+ x_ mkdir -p "$@"
}
mkrom_tarball()
{
- printf "%s\n" "$version" > "$1/.version" || $err "$1 !version"
- printf "%s\n" "$versiondate" > "$1/.versiondate" || $err "$1 !vdate"
+ printf "%s\n" "$version" > "$1/.version" || err "$1 !version"
+ printf "%s\n" "$versiondate" > "$1/.versiondate" || err "$1 !vdate"
mktarball "$1" "${1%/*}/${relname}_${1##*/}.tar.xz"
x_ rm -Rf "$1"
@@ -26,24 +26,21 @@ mktarball()
{
printf "Creating tar archive '%s' from directory '%s'\n" "$2" "$1"
[ "${2%/*}" = "$2" ] || x_ mkdir -p "${2%/*}"
- x_ tar -c "$1" | xz -T$XBMK_THREADS -9e > "$2" || $err "mktarball2, $1"
+ x_ tar -c "$1" | xz -T$XBMK_THREADS -9e > "$2" || err "mktarball2, $1"
}
mksha512sum()
{
(
[ "${1%/*}" != "$1" ] && x_ cd "${1%/*}"
- sha512sum ./"${1##*/}" >> "$2" || $err "!sha512sum \"$1\" > \"$2\""
- ) || $err "failed to create tarball checksum"
+ sha512sum ./"${1##*/}" >> "$2" || err "!sha512sum \"$1\" > \"$2\""
+ ) || err "failed to create tarball checksum"
}
rmgit()
{
- (
- cd "$1" || $err "!cd gitrepo $1"
- find . -name ".git" -exec rm -Rf {} + || $err "!rm .git $1"
- find . -name ".gitmodules" -exec rm -Rf {} + || $err "!rm .gitmod $1"
- ) || $err "Cannot remove .git/.gitmodules in $1"
+ x_ find "$1" -name ".git" -exec rm -Rf {} +
+ x_ find "$1" -name ".gitmodules" -exec rm -Rf {} +
}
# can grab from the internet, or copy locally.
@@ -61,7 +58,7 @@ xbmkget()
for url in "$1" "$2"; do
[ "$dl_fail" = "n" ] && break
[ -z "$url" ] && continue
- rm -f "$cached" || $err "!rm -f '$cached'"
+ rm -f "$cached" || err "!rm -f '$cached'"
if [ "$_dlop" = "curl" ]; then
curl --location --retry 3 -A "$_ua" "$url" \
-o "$cached" || wget --tries 3 -U "$_ua" "$url" \
@@ -75,11 +72,11 @@ xbmkget()
"$1" "$2" "$3" "$4" "$url" 1>&2 && continue
cp "$url" "$cached" || continue
else
- $err "$1 $2 $3 $4: Unsupported dlop type: '$_dlop'"
+ err "$1 $2 $3 $4: Unsupported dlop type: '$_dlop'"
fi
bad_checksum "$4" "$cached" || dl_fail="n"
done
- [ "$dl_fail" = "y" ] && $err "$1 $2 $3 $4: not downloaded"
+ [ "$dl_fail" = "y" ] && err "$1 $2 $3 $4: not downloaded"
[ "$cached" = "$3" ] || x_ cp "$cached" "$3"; :
}
@@ -102,7 +99,7 @@ e()
mk()
{
- mk_flag="$1" || $err "No argument given"
+ mk_flag="$1" || err "No argument given"
shift 1 && for mk_arg in "$@"; do
x_ ./mk $mk_flag $mk_arg
done; :
@@ -110,8 +107,98 @@ mk()
check_defconfig()
{
- [ -d "$1" ] || $err "Target '$1' not defined."
+ [ -d "$1" ] || err "Target '$1' not defined."
for x in "$1"/config/*; do
[ -f "$x" ] && printf "%s\n" "$x" && return 1
done; :
}
+
+setvars()
+{
+ _setvars=""
+ if [ $# -lt 2 ]; then
+ printf "err \"setvars: too few args\\n\""
+ return 0
+ fi
+ val="$1"
+ shift 1
+ for var in "$@"; do
+ _setvars="$var=\"$val\"; $_setvars"
+ done
+ printf "%s\n" "${_setvars% }"
+}
+
+setcfg()
+{
+ [ $# -gt 1 ] && printf "e \"%s\" f missing && return %s;\n" "$1" "$2"
+ [ $# -gt 1 ] || \
+ printf "e \"%s\" f not && err \"Missing config\";\n" "$1"
+ printf ". \"%s\" || err \"Could not read config\";\n" "$1"
+}
+
+chkvars()
+{
+ for var in "$@"; do
+ eval "[ -n \"\${$var+x}\" ] || err \"$var unset\""
+ eval "[ -n \"\$$var\" ] || err \"$var unset\""
+ done; :
+}
+
+fe_()
+{
+ find_ex "x_" "$@"
+}
+
+fx_()
+{
+ find_ex "" "$@"
+}
+
+find_ex()
+{
+ xmsg="$1" && shift 1
+ fd="`mktemp`" && x_ rm -f "$fd" && x_ touch "$fd"
+ xx="$1" && shift 1
+ $xmsg find "$@" 2>/dev/null | sort > "$fd" || \
+ err "!find $(echo "$@") > \"$fd\""
+ while read -r fx; do
+ $xx "$fx" || break; :
+ done < "$fd"
+ x_ rm -f "$fd"
+}
+
+x_()
+{
+ [ $# -lt 1 ] && printf "WARNING: x_ called without arguments\n" 1>&2
+ [ $# -lt 1 ] || [ -n "$1" ] || err "Empty first arg: x_ $(echo "$@")"
+ [ $# -lt 1 ] || "$@" || err "Unhandled error for: $(echo "$@")"; :
+}
+
+err()
+{
+ set -u -e
+
+ xbmk_err_val=0
+ real_err="" && [ -n "${xbmk_err+x}" ] && real_err="$xbmk_err"
+
+ if [ -z "$real_err" ]; then
+ printf "WARNING: err not set. Defaulting to 'err_'\n" 1>&2
+ real_err="err_"
+ fi
+
+ (
+ $real_err "$@" || err_ "Error function '$real_err' *returned* 1"
+ err_ "Error function '$real_err' didn't exit"
+ exit 1 # just in case!
+ ) || xbmk_err_val=1 # otherwise, it wrongly did exit 0, not exit 1
+
+ [ $xbmk_err_val -eq 0 ] && err_ "Error function '$real_err' did exit 0"
+ exit 1 # just in case!
+}
+
+err_()
+{
+ [ $# -lt 1 ] && printf "ERROR (but no error message provided)\n" 1>&2
+ [ $# -lt 1 ] || printf "ERROR %s: %s\n" "$0" "$1" 1>&2 || :
+ exit 1
+}
diff --git a/include/mrc.sh b/include/mrc.sh
index 6e00292b..a1dcb140 100644
--- a/include/mrc.sh
+++ b/include/mrc.sh
@@ -8,35 +8,12 @@ eval "`setvars "" MRC_url MRC_url_bkup MRC_hash MRC_board SHELLBALL`"
extract_mrc()
{
- chkvars "MRC_board" "CONFIG_MRC_FILE"
- SHELLBALL="chromeos-firmwareupdate-$MRC_board"
-
- (
- x_ cd "$appdir"
- extract_partition "${MRC_url##*/}"
- extract_archive "$SHELLBALL" .
- ) || $err "mrc download/extract failure"
+ extract_shellball
"$cbfstool" "$appdir/"bios.bin extract -n mrc.bin \
- -f "$_dest" -r RO_SECTION || $err "extract_mrc: !$cbfstool $_dest"
+ -f "$_dest" -r RO_SECTION || err "extract_mrc: !$cbfstool $_dest"
- [ -n "$CONFIG_REFCODE_BLOB_FILE" ] && extract_refcode; :
-}
-
-extract_partition()
-{
- printf "Extracting ROOT-A partition\n"
- ROOTP=$( printf "unit\nB\nprint\nquit\n" | \
- parted "${1%.zip}" 2>/dev/null | grep "ROOT-A" )
-
- START=$(( $( echo $ROOTP | cut -f2 -d\ | tr -d "B" ) ))
- SIZE=$(( $( echo $ROOTP | cut -f4 -d\ | tr -d "B" ) ))
-
- dd if="${1%.zip}" of="root-a.ext2" bs=1024 skip=$(( $START / 1024 )) \
- count=$(( $SIZE / 1024 )) || $err "ex dd ${1%.zip}, root-a.ext2"
-
- printf "cd /usr/sbin\ndump chromeos-firmwareupdate %s\nquit" \
- "$SHELLBALL" | debugfs "root-a.ext2" || $err "!extract shellball"
+ [ -n "$CONFIG_REFCODE_BLOB_FILE" ] && extract_refcode extra; :
}
extract_refcode()
@@ -44,11 +21,13 @@ extract_refcode()
_refdest="${CONFIG_REFCODE_BLOB_FILE##*../}"
e "$_refdest" f && return 0
+ [ $# -lt 1 ] && extract_shellball
+
# cbfstool changed the attributes scheme for stage files,
# incompatible with older versions before coreboot 4.14,
# so we need coreboot 4.13 cbfstool for certain refcode files
chkvars cbfstoolref
- mkdir -p "${_refdest%/*}" || $err "ref: !mkdir -p ${_refdest%/*}"
+ mkdir -p "${_refdest%/*}" || err "ref: !mkdir -p ${_refdest%/*}"
x_ "$cbfstoolref" "$appdir/bios.bin" extract \
-m x86 -n fallback/refcode -f "$_refdest" -r RO_SECTION
@@ -57,3 +36,31 @@ extract_refcode()
[ -z "$MRC_refcode_gbe" ] || x_ dd if="config/ifd/hp820g2/1.bin" \
of="$_refdest" bs=1 seek=$MRC_refcode_gbe count=1 conv=notrunc; :
}
+
+extract_shellball()
+{
+ chkvars "MRC_board" "CONFIG_MRC_FILE"
+ SHELLBALL="chromeos-firmwareupdate-$MRC_board"
+
+ (
+ x_ cd "$appdir"
+ extract_partition "${MRC_url##*/}"
+ extract_archive "$SHELLBALL" .
+ ) || err "mrc download/extract failure"; :
+}
+
+extract_partition()
+{
+ printf "Extracting ROOT-A partition\n"
+ ROOTP=$( printf "unit\nB\nprint\nquit\n" | \
+ parted "${1%.zip}" 2>/dev/null | grep "ROOT-A" )
+
+ START=$(( $( echo $ROOTP | cut -f2 -d\ | tr -d "B" ) ))
+ SIZE=$(( $( echo $ROOTP | cut -f4 -d\ | tr -d "B" ) ))
+
+ dd if="${1%.zip}" of="root-a.ext2" bs=1024 skip=$(( $START / 1024 )) \
+ count=$(( $SIZE / 1024 )) || err "ex dd ${1%.zip}, root-a.ext2"
+
+ printf "cd /usr/sbin\ndump chromeos-firmwareupdate %s\nquit" \
+ "$SHELLBALL" | debugfs "root-a.ext2" || err "!extract shellball"
+}
diff --git a/include/rom.sh b/include/rom.sh
index f74912af..af739d92 100644
--- a/include/rom.sh
+++ b/include/rom.sh
@@ -11,7 +11,7 @@ mkserprog()
{
[ "$_f" = "-d" ] && return 0 # dry run
basename -as .h "$serdir/"*.h > "$xbmktmp/ser" || \
- $err "!mk $1 $xbmktmp"
+ err "!mk $1 $xbmktmp"
while read -r sertarget; do
[ "$1" = "pico" ] && x_ cmake -DPICO_BOARD="$sertarget" \
@@ -29,13 +29,12 @@ mkserprog()
copyps1bios()
{
- x_ rm -Rf bin/playstation
- x_ mkdir -p bin/playstation
+ remkdir "bin/playstation"
x_ cp src/pcsx-redux/src/mips/openbios/openbios.bin bin/playstation
printf "MIT License\n\nCopyright (c) 2019-2024 PCSX-Redux authors\n\n" \
- > bin/playstation/COPYING.txt || $err "!pcsx-redux copyright"
- cat config/snippet/mit >>bin/playstation/COPYING.txt || $err "!pcsx MIT"
+ > bin/playstation/COPYING.txt || err "!pcsx-redux copyright"
+ cat config/snippet/mit >>bin/playstation/COPYING.txt || err "!pcsx MIT"
}
mkpayload_grub()
@@ -56,7 +55,7 @@ mkvendorfiles()
[ -z "$mode" ] && $dry cook_coreboot_config
check_coreboot_utils "$tree"
printf "%s\n" "${version%%-*}" > "$srcdir/.coreboot-version" || \
- $err "!mk $srcdir .coreboot-version"
+ err "!mk $srcdir .coreboot-version"
[ -z "$mode" ] && [ "$target" != "$tree" ] && \
x_ ./mk download "$target"; :
}
@@ -65,8 +64,8 @@ cook_coreboot_config()
{
[ -f "$srcdir/.config" ] || return 0
printf "CONFIG_CCACHE=y\n" >> "$srcdir/.config" || \
- $err "$srcdir/.config: Could not enable ccache"
- make -C "$srcdir" oldconfig || $err "Could not cook $srcdir/.config"; :
+ err "$srcdir/.config: Could not enable ccache"
+ make -C "$srcdir" oldconfig || err "Could not cook $srcdir/.config"; :
}
check_coreboot_utils()
@@ -106,7 +105,7 @@ mkcorebootbin()
[ "$payload_uboot_i386" = "y" ] && \
[ "$payload_uboot_amd64" = "y" ] && \
- $err "'$target' enables 32- and 64-bit x86 U-Boot"
+ err "'$target' enables 32- and 64-bit x86 U-Boot"
if [ "$payload_uboot_i386" = "y" ] || \
[ "$payload_uboot_amd64" = "y" ]; then
@@ -119,7 +118,7 @@ mkcorebootbin()
[ "$payload_uboot" = "y" ] || payload_seabios="y"
[ "$payload_grub" = "y" ] && payload_seabios="y"
[ "$payload_seabios" = "y" ] && [ "$payload_uboot" = "y" ] && \
- $dry $err "$target: U-Boot(arm64) and SeaBIOS/GRUB both enabled."
+ $dry err "$target: U-Boot(arm64) and SeaBIOS/GRUB both enabled."
[ -z "$grub_scan_disk" ] && grub_scan_disk="nvme ahci ata"
@@ -181,7 +180,7 @@ add_grub()
_grubname="fallback/payload"
cbfs "$tmprom" "$grubelf" "$_grubname"
printf "set grub_scan_disk=\"%s\"\n" "$grub_scan_disk" \
- > "$xbmktmp/tmpcfg" || $err "$target: !insert scandisk"
+ > "$xbmktmp/tmpcfg" || err "$target: !insert scandisk"
cbfs "$tmprom" "$xbmktmp/tmpcfg" scan.cfg raw
[ "$initmode" != "normal" ] && [ "$displaymode" != "txtmode" ] && \
cbfs "$tmprom" "$grubdata/background/background1280x800.png" \