diff options
Diffstat (limited to 'script/update')
-rwxr-xr-x | script/update/release (renamed from script/update/project/release) | 16 | ||||
-rwxr-xr-x | script/update/trees (renamed from script/update/project/trees) | 79 | ||||
-rwxr-xr-x | script/update/vendor/download | 246 | ||||
-rwxr-xr-x | script/update/vendor/inject | 248 |
4 files changed, 35 insertions, 554 deletions
diff --git a/script/update/project/release b/script/update/release index e7973537..6188d793 100755 --- a/script/update/project/release +++ b/script/update/release @@ -46,7 +46,7 @@ mkvdir() git clone . "${srcdir}" || err "mkdir: !gitclone \"${srcdir}\"" [ -z "${_nogit}" ] || x_ rm -Rf ".git" - rm -Rf "${srcdir}/.git" + rm -Rf "${srcdir}/.git" || err "mkvdir: !rm -Rf ${srcdir}/.git" insert_version_files "${srcdir}" || err "mkvdir ${srcdir}: versionfile" } @@ -87,7 +87,7 @@ build_release() fetch_trees() { for x in ${_f}; do - ./update project trees -f "${x}" || err "${_xm}: fetch ${x}" + ./update trees -f "${x}" || err "${_xm}: fetch ${x}" done for x in config/*/build.list; do [ -f "${x}" ] || continue @@ -101,9 +101,9 @@ fetch_trees() mkrom_images() { - ./build fw coreboot all || err "${_xm}: roms-all" - ./build fw serprog rp2040 || err "${_xm}: rp2040" - ./build fw serprog stm32 || err "${_xm}: stm32" + ./build roms all || err "${_xm}: roms-all" + ./build serprog rp2040 || err "${_xm}: rp2040" + ./build serprog stm32 || err "${_xm}: stm32" for rombuild in bin/*; do [ -d "${rombuild}" ] || continue @@ -161,7 +161,7 @@ nukerom() fi # Hash the images before removing vendor files - # which ./update vendor inject uses for verification + # which "./vendor inject" uses for verification x_ rm -f "${romdir}/vendorhashes" x_ touch "${romdir}/vendorhashes" ( @@ -171,7 +171,7 @@ nukerom() for romfile in "${romdir}"/*.rom; do [ -f "${romfile}" ] || continue - x_ ./update vendor inject -r "${romfile}" -b ${target} -n nuke + x_ ./vendor inject -r "${romfile}" -b ${target} -n nuke done } @@ -201,6 +201,8 @@ insert_copying_files() x_ cp "src/seabios/default/COPYING" "${l}/COPYING.coreboot" x_ cp "src/seabios/default/COPYING.LESSER" "${l}/COPYING.LESSER.seabios" x_ cp -R "src/u-boot/default/Licenses" "${l}/COPYING.u-boot" + x_ printf "Multiple licenses. Check corresponding %s source archive\n" \ + "${projectname}" > "${1}/COPYING" } mkrom_tarball() diff --git a/script/update/project/trees b/script/update/trees index c8643966..a71dbec0 100755 --- a/script/update/project/trees +++ b/script/update/trees @@ -16,12 +16,9 @@ export LOCALVERSION="-${projectname}-${version%%-*}" eval "$(setvars "" arch cfgsdir codedir config config_name crossgcc_ada mode \ elfdir listfile project romtype target target_dir targets tree _f target1)" -tmpclean="$(mktemp -d -t makeclean.XXXXXXXXXX)" - main() { - while getopts f:b:m:u:c:x:s:l:n: option - do + while getopts f:b:m:u:c:x:s:l:n: option; do _f="${1}" case "${1}" in -b) : ;; @@ -37,27 +34,21 @@ main() esac shift; project="${OPTARG#src/}"; shift done - [ -z "${_f}" ] && err "flag not specified (-m, -u, -b, -c, -x, -f, -s, -l or -n)" + [ -z "${_f}" ] && err "missing flag (-m/-u/-b/-c/-x/-f/-s/-l/-n)" [ -z "${project}" ] && err "project name not specified" - if [ ! -f "config/${project}/build.list" ]; then - build_projects $@ - else - build_targets $@ - fi + [ -f "config/${project}/build.list" ] && build_targets $@ && return 0 + build_projects $@ } build_projects() { - [ $# -gt 0 ] && x_ ./update project trees ${_f} ${@} + [ $# -gt 0 ] && x_ ./update trees ${_f} ${@} - if [ "${mode}" = "fetch" ]; then - fetch_project_repo - return 0 - fi + [ "${mode}" = "fetch" ] && fetch_project_repo && return 0 codedir="src/${project}" - [ -d "${codedir}" ] || x_ ./update project trees -f "${project}" + [ -d "${codedir}" ] || x_ ./update trees -f "${project}" if [ "${project}" = "uefitool" ]; then ( @@ -87,7 +78,7 @@ build_targets() [ $# -gt 0 ] && target1="${1}" [ "${target1}" = "utils" ] && [ "${project}" = "coreboot" ] && \ shift 1 - targets=$(listitems "${cfgsdir}") || \ + targets=$(items "${cfgsdir}") || \ err "Cannot get options for ${cfgsdir}" [ $# -gt 0 ] && targets=$@ @@ -103,7 +94,7 @@ handle_targets() printf "Running 'make %s' for project '%s, target '%s''\n" \ "${mode}" "${project}" "${target}" [ "${project}" != "coreboot" ] || [ ! -z ${mode} ] || \ - x_ ./update vendor download ${target} + x_ ./vendor download ${target} x_ handle_defconfig done @@ -140,10 +131,7 @@ handle_src_tree() romtype="normal" target_dir="${cfgsdir}/${target}" - if [ "${mode}" = "fetch" ]; then - fetch_project_trees - return 1 - fi + [ "${mode}" = "fetch" ] && fetch_project_trees && return 1 x_ mkdir -p "${elfdir}/${target}" eval "$(setvars "" arch tree)" @@ -151,10 +139,9 @@ handle_src_tree() . "${target_dir}/target.cfg" || \ err "handle_src_tree ${target_dir}: cannot load target.cfg" - [ -z "${tree}" ] && \ - err "handle_src_tree: ${target_dir}: tree undefined" - [ -z "${arch}" ] && \ - err "handle_src_tree: ${target_dir}: undefined cpu type" + for ix in arch tree; do + eval "[ -z \"\${$ix}\" ] && err \"handle_src: $ix undefined\"" + done codedir="src/${project}/${tree}" @@ -165,23 +152,15 @@ handle_src_tree() "${codedir}" 1>&2 return 1 fi - x_ ./update project trees -f "${project}" "${target}" - elif [ "${mode}" = "distclean" ] || \ - [ "${mode}" = "crossgcc-clean" ]; then - [ -f "${tmpclean}/${tree}" ] && return 1 - touch "${tmpclean}/${tree}" + x_ ./update trees -f "${project}" "${target}" fi [ "${target1}" = "utils" ] && [ "${project}" = "coreboot" ] && return 0 + [ "$project" != "coreboot" ] && [ "$project" != "u-boot" ] && return 0 # u-boot and coreboot are both compiled with coreboot's crossgcc - if [ "${project}" = "coreboot" ] || [ "${project}" = "u-boot" ]; then - [ ! -z ${mode} ] || check_cross_compiler || \ - err "handle_src_tree ${project}/${target}: crossgcc" - cbfstool="cbutils/${tree}/cbfstool" - [ -f "${cbfstool}" ] || \ - x_ ./update project trees -b coreboot utils "${tree}" - fi + [ -z ${mode} ] || return 0 + check_cross_compiler } # set up cross-compiler (coreboot crossgcc) for u-boot and coreboot @@ -190,42 +169,35 @@ check_cross_compiler() { [ "${crossgcc_ada}" = "y" ] || [ "${crossgcc_ada}" = "n" ] || \ crossgcc_ada="y" - [ "${crossgcc_ada}" != "y" ] && \ - export BUILD_LANGUAGES=c + [ "${crossgcc_ada}" = "y" ] || export BUILD_LANGUAGES=c cbdir="src/coreboot/${tree}" - [ "${project}" != "coreboot" ] && \ - cbdir="src/coreboot/default" + [ "${project}" != "coreboot" ] && cbdir="src/coreboot/default" # only true if not building coreboot: ctarget="${cbdir#src/coreboot/}" - [ -d "${cbdir}" ] || \ - x_ ./update project trees -f coreboot ${ctarget} + [ -d "${cbdir}" ] || x_ ./update trees -f coreboot ${ctarget} if [ "${arch}" = "x86_32" ] || [ "${arch}" = "x86_64" ]; then [ -d "${cbdir}/util/crossgcc/xgcc/i386-elf/" ] || \ - make -C "${cbdir}" crossgcc-i386 CPUS=$(nproc) || \ - return 1 + x_ make -C "${cbdir}" crossgcc-i386 CPUS=$(nproc) case "$(uname -m)" in x86*|i*86|amd64) : ;; *) export CROSS_COMPILE=i386-elf- ;; esac elif [ "${arch}" = "ARMv7" ]; then [ -d "${cbdir}/util/crossgcc/xgcc/arm-eabi/" ] || \ - make -C "${cbdir}" crossgcc-arm CPUS=$(nproc) || \ - return 1 + x_ make -C "${cbdir}" crossgcc-arm CPUS=$(nproc) case "$(uname -m)" in arm|arm32|armv6*|armv7*) : ;; *) export CROSS_COMPILE=arm-eabi- ;; esac elif [ "${arch}" = "AArch64" ]; then [ -d "${cbdir}/util/crossgcc/xgcc/aarch64-elf/" ] || \ - make -C "${cbdir}" crossgcc-aarch64 CPUS=$(nproc) || \ - return 1 + x_ make -C "${cbdir}" crossgcc-aarch64 CPUS=$(nproc) # aarch64 also needs armv7 toolchain for arm-trusted-firmware [ -d "${cbdir}/util/crossgcc/xgcc/arm-eabi/" ] || \ - make -C "${cbdir}" crossgcc-arm CPUS=$(nproc) || \ - return 1 + x_ make -C "${cbdir}" crossgcc-arm CPUS=$(nproc) case "$(uname -m)" in arm64|aarch64) : ;; *) export CROSS_COMPILE=aarch64-elf- ;; @@ -233,7 +205,7 @@ check_cross_compiler() fi # we *must* ensure that u-boot's build system uses crossgcc first - export PATH="$(pwd)/${cbdir}/util/crossgcc/xgcc/bin:$PATH" + export PATH="${PWD}/${cbdir}/util/crossgcc/xgcc/bin:$PATH" } check_config() @@ -279,6 +251,7 @@ run_make_command() x_ printf "%s\n" "${version%%-*}" >"${codedir}/.coreboot-version" x_ make ${mode} -j$(nproc) -C "${codedir}" + [ "${mode}" != "clean" ] && return 0 make -C "${codedir}" distclean 2>/dev/null || : } diff --git a/script/update/vendor/download b/script/update/vendor/download deleted file mode 100755 index 87e9d3a5..00000000 --- a/script/update/vendor/download +++ /dev/null @@ -1,246 +0,0 @@ -#!/usr/bin/env sh -# SPDX-License-Identifier: GPL-3.0-only -# SPDX-FileCopyrightText: 2022 Caleb La Grange <thonkpeasant@protonmail.com> -# SPDX-FileCopyrightText: 2022 Ferass El Hafidi <vitali64pmemail@protonmail.com> -# SPDX-FileCopyrightText: 2023 Leah Rowe <leah@libreboot.org> - -. "include/err.sh" -. "include/option.sh" -. "include/mrc.sh" - -export PATH="${PATH}:/sbin" - -_ua="Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Firefox/91.0" -_7ztest="a" - -e6400_unpack="${PWD}/src/bios_extract/dell_inspiron_1100_unpacker.py" -kbc1126_ec_dump="${PWD}/${cbdir}/util/kbc1126/kbc1126_ec_dump" -me7updateparser="${PWD}/util/me7_update_parser/me7_update_parser.py" -mecleaner="${PWD}/${cbdir}/util/me_cleaner/me_cleaner.py" -pfs_extract="${PWD}/src/biosutilities/Dell_PFS_Extract.py" -uefiextract="${PWD}/src/uefitool/uefiextract" - -eval "$(setvars "" _b _dl EC_url EC_url_bkup EC_hash DL_hash DL_url DL_url_bkup \ - E6400_VGA_DL_hash E6400_VGA_DL_url E6400_VGA_DL_url_bkup E6400_VGA_offset \ - E6400_VGA_romname SCH5545EC_DL_url SCH5545EC_DL_url_bkup SCH5545EC_DL_hash)" - -main() -{ - [ $# -gt 0 ] || err "No argument given" - board="${1}" - boarddir="${cbcfgsdir}/${board}" - _b="${board%%_*mb}" # shorthand (avoid duplicating config per rom size) - - check_defconfig "${boarddir}" || exit 0 - detect_firmware && exit 0 - scan_config "${_b}" "config/vendor" "err" - - build_dependencies - download_vendorfiles -} - -detect_firmware() -{ - set -- "${boarddir}/config/"* - . "${1}" 2>/dev/null - - for c in CONFIG_HAVE_MRC CONFIG_HAVE_ME_BIN CONFIG_KBC1126_FIRMWARE \ - CONFIG_VGA_BIOS_FILE CONFIG_INCLUDE_SMSC_SCH5545_EC_FW; do - eval "[ -z \"\${${c}}\" ] || return 1" - done - printf "Vendor files not needed for: %s\n" "${board}" 1>&2 -} - -build_dependencies() -{ - [ -d ${cbdir} ] || \ - x_ ./update project trees -f coreboot ${cbdir##*/} - for d in uefitool biosutilities bios_extract; do - [ -d "src/${d}" ] && continue - x_ ./update project trees -f "${d}" - done - [ -f "${uefiextract}" ] || \ - x_ ./update project trees -b uefitool - [ -f "${kbc1126_ec_dump}" ] || \ - x_ make -C "${cbdir}/util/kbc1126" - if [ ! -f "${cbfstool}" ] || [ ! -f "${ifdtool}" ]; then - x_ ./update project trees -b coreboot utils default - fi -} - -download_vendorfiles() -{ - [ -z "${CONFIG_HAVE_ME_BIN}" ] || \ - fetch "intel_me" "${DL_url}" "${DL_url_bkup}" "${DL_hash}" \ - "${CONFIG_ME_BIN_PATH}" - [ -z "${CONFIG_INCLUDE_SMSC_SCH5545_EC_FW}" ] || \ - fetch "sch5545ec" "${SCH5545EC_DL_url}" \ - "${SCH5545EC_DL_url_bkup}" "${SCH5545EC_DL_hash}" \ - "${CONFIG_SMSC_SCH5545_EC_FW_FILE}" - [ -z "${CONFIG_KBC1126_FIRMWARE}" ] || \ - fetch "kbc1126ec" "${EC_url}" "${EC_url_bkup}" "${EC_hash}" \ - "${CONFIG_KBC1126_FW1}" - [ -z "${CONFIG_VGA_BIOS_FILE}" ] || \ - fetch "e6400vga" "${E6400_VGA_DL_url}" \ - "${E6400_VGA_DL_url_bkup}" "${E6400_VGA_DL_hash}" \ - "${CONFIG_VGA_BIOS_FILE}" - [ -z "${CONFIG_HAVE_MRC}" ] && return 0 - fetch "mrc" "${MRC_url}" "${MRC_url_bkup}" "${MRC_hash}" \ - "${CONFIG_MRC_FILE}" -} - -fetch() -{ - dl_type="${1}" - dl="${2}" - dl_bkup="${3}" - dlsum="${4}" - [ "${5# }" = "${5}" ] || err "fetch: space not allowed in _dest: '${5}'" - [ "${5#/}" = "${5}" ] || err "fetch: absolute path not allowed: '${5}'" - _dest="${5##*../}" - _dl="${vendir}/cache/${dlsum}" - - x_ mkdir -p "${_dl%/*}" - - dl_fail="y" - vendor_checksum "${dlsum}" "${_dl}" && dl_fail="n" - for url in "${dl}" "${dl_bkup}"; do - [ "${dl_fail}" = "n" ] && break - [ -z "${url}" ] && continue - x_ rm -f "${_dl}" - curl --location --retry 3 -A "${_ua}" "${url}" -o "${_dl}" || \ - wget --tries 3 -U "${_ua}" "${url}" -O "${_dl}" || \ - continue - vendor_checksum "${dlsum}" "${_dl}" && dl_fail="n" - done - [ "${dl_fail}" = "y" ] && \ - err "fetch ${dlsum}: matched file unavailable" - - x_ rm -Rf "${_dl}_extracted" - mkdirs "${_dest}" "extract_${dl_type}" || return 0 - eval "extract_${dl_type}" - - [ -f "${_dest}" ] && return 0 - err "extract_${dl_type} (fetch): missing file: '${_dest}'" -} - -vendor_checksum() -{ - [ "$(sha512sum ${2} | awk '{print $1}')" != "${1}" ] || return 0 - printf "Bad checksum for file: %s\n" "${2}" 1>&2 - rm -f "${2}" || : - return 1 -} - -mkdirs() -{ - [ -f "${1}" ] && \ - printf "mkdirs ${1} ${2}: already downloaded\n" 1>&2 && return 1 - x_ mkdir -p "${1%/*}" - x_ rm -Rf "${appdir}" - x_ mkdir -p "${appdir}/" - extract_archive "${_dl}" "${appdir}" || \ - [ "${2}" = "extract_e6400vga" ] || err "mkdirs ${1} ${2}: !extract" -} - -extract_intel_me() -{ - _me="${PWD}/${_dest}" # must always be an absolute path - cdir="${PWD}/${appdir}" # must always be an absolute path - [ $# -gt 0 ] && _me="${1}" - [ $# -gt 0 ] && cdir="${2}" - [ -f "${_me}" ] && return 0 - - sdir="$(mktemp -d)" - mkdir -p "${sdir}" || err "extract_intel_me: !mkdir -p \"${sdir}\"" - ( - cd "${cdir}" || err "extract_intel_me: !cd \"${cdir}\"" - for i in *; do - [ -f "${_me}" ] && break - [ -L "${i}" ] && continue - if [ -f "${i}" ]; then - "${mecleaner}" -r -t -O "${sdir}/vendorfile" \ - -M "${_me}" "${i}" && break - "${mecleaner}" -r -t -O "${_me}" "${i}" && break - "${me7updateparser}" -O "${_me}" "${i}" && break - _7ztest="${_7ztest}a" - extract_archive "${i}" "${_7ztest}" || continue - extract_intel_me "${_me}" "${cdir}/${_7ztest}" - elif [ -d "$i" ]; then - extract_intel_me "${_me}" "${cdir}/${i}" - else - continue - fi - cdir="${1}" - cd "${cdir}" - done - ) - rm -Rf "${sdir}" || err "extract_intel_me: !rm -Rf ${sdir}" -} - -extract_archive() -{ - innoextract "${1}" -d "${2}" || python "${pfs_extract}" "${1}" -e || \ - 7z x "${1}" -o"${2}" || unar "${1}" -o "${2}" || \ - unzip "${1}" -d "${2}" || return 1 -} - -extract_kbc1126ec() -{ - ( - x_ cd "${appdir}/" - mv Rompaq/68*.BIN ec.bin || : - if [ ! -f ec.bin ]; then - unar -D ROM.CAB Rom.bin || unar -D Rom.CAB Rom.bin || \ - x_ unar -D 68*.CAB Rom.bin - x_ mv Rom.bin ec.bin - fi - [ -f ec.bin ] || err "extract_kbc1126_ec ${board}: can't extract" - "${kbc1126_ec_dump}" ec.bin || \ - err "extract_kbc1126_ec ${board}: can't extract ecfw1/2.bin" - ) - ec_ex="y" - for i in 1 2; do - [ -f "${appdir}/ec.bin.fw${i}" ] || ec_ex="n" - done - [ "${ec_ex}" = "y" ] || \ - err "extract_kbc1126_ec ${board}: didn't extract ecfw1/2.bin" - x_ cp "${appdir}/"ec.bin.fw* "${_dest%/*}/" -} - -extract_e6400vga() -{ - [ "${E6400_VGA_offset}" = "" ] && \ - err "extract_e6400vga: E6400 VGA offset not defined" - [ "${E6400_VGA_romname}" = "" ] && \ - err "extract_e6400vga: E6400 VGA ROM name not defined" - tail -c +${E6400_VGA_offset} "${_dl}" | \ - gunzip >"${appdir}/bios.bin" || : - ( - x_ cd "${appdir}" - [ -f "bios.bin" ] || err "extract_e6400vga: can't extract bios.bin" - "${e6400_unpack}" bios.bin || printf "TODO: fix dell extract util\n" - [ -f "${E6400_VGA_romname}" ] || \ - err "extract_e6400vga: can't extract vga rom from bios.bin" - ) - x_ cp "${appdir}/${E6400_VGA_romname}" "${_dest}" -} - -extract_sch5545ec() -{ - # full system ROM (UEFI), to extract with UEFIExtract: - _bios="${_dl}_extracted/Firmware" - _bios="${_bios}/1 ${dlsum} -- 1 System BIOS vA.28.bin" - # this is the SCH5545 firmware, inside of the extracted UEFI ROM: - _sch5545ec_fw="${_bios}.dump/4 7A9354D9-0468-444A-81CE-0BF617D890DF" - _sch5545ec_fw="${_sch5545ec_fw}/54 D386BEB8-4B54-4E69-94F5-06091F67E0D3" - _sch5545ec_fw="${_sch5545ec_fw}/0 Raw section/body.bin" # <-- this! - - # this makes the file defined by _sch5545ec_fw available to copy - "${uefiextract}" "${_bios}" || \ - err "extract_sch5545ec: cannot extract from uefi image" - cp "${_sch5545ec_fw}" "${_dest}" || \ - err "extract_sch5545ec: cannot copy sch5545ec firmware file" -} - -main $@ diff --git a/script/update/vendor/inject b/script/update/vendor/inject deleted file mode 100755 index c4a7f702..00000000 --- a/script/update/vendor/inject +++ /dev/null @@ -1,248 +0,0 @@ -#!/usr/bin/env sh -# SPDX-License-Identifier: GPL-3.0-only -# SPDX-FileCopyrightText: 2022 Caleb La Grange <thonkpeasant@protonmail.com> -# SPDX-FileCopyrightText: 2022 Ferass El Hafidi <vitali64pmemail@protonmail.com> -# SPDX-FileCopyrightText: 2023 Leah Rowe <leah@libreboot.org> - -. "include/err.sh" -. "include/option.sh" - -nvmutil="util/nvmutil/nvm" - -eval "$(setvars "" archive rom modifygbe nukemode release new_mac)" - -main() -{ - [ $# -lt 1 ] && err "No options specified." - [ "${1}" = "listboards" ] && \ - listitems config/coreboot && exit 0 - - archive="${1}" - - while getopts n:r:b:m: option; do - case "${option}" in - n) nukemode="${OPTARG}" ;; - r) rom=${OPTARG} ;; - b) board=${OPTARG} ;; - m) modifygbe=true - new_mac=${OPTARG} ;; - esac - done - - check_board - build_dependencies - inject_vendorfiles - [ "${nukemode}" = "nuke" ] && return 0 - printf "Friendly reminder (this is *not* an error message):\n" - printf "Please always ensure that the files were inserted correctly.\n" -} - -check_board() -{ - if ! check_release "${archive}" ; then - [ -f "${rom}" ] || \ - err "check_board: \"${rom}\" is not a valid path" - [ -z "${rom+x}" ] && \ - err "check_board: no rom specified" - [ ! -z ${board+x} ] || \ - board=$(detect_board "${rom}") - else - release="y" - board=$(detect_board "${archive}") - fi - - boarddir="${cbcfgsdir}/${board}" - [ -d "${boarddir}" ] && return 0 - err "check_board: board ${board} not found" -} - -check_release() -{ - [ -f "${archive}" ] || return 1 - [ "${archive##*.}" = "xz" ] || return 1 - printf "%s\n" "Release archive ${archive} detected" -} - -# This function tries to determine the board from the filename of the rom. -# It will only succeed if the filename is not changed from the build/download -detect_board() -{ - path="${1}" - filename=$(basename ${path}) - case ${filename} in - grub_*) - board=$(echo "${filename}" | cut -d '_' -f2-3) ;; - seabios_withgrub_*) - board=$(echo "${filename}" | cut -d '_' -f3-4) ;; - *.tar.xz) - _stripped_prefix=${filename#*_} - board="${_stripped_prefix%.tar.xz}" ;; - *) - err "detect_board: could not detect board type" - esac - [ -d "${boarddir}/" ] || \ - err "detect_board: dir, ${boarddir}, doesn't exist" - printf "%s\n" "${board}" -} - -build_dependencies() -{ - [ -d "${cbdir}" ] || x_ ./update project trees -f coreboot default - if [ ! -f "${cbfstool}" ] || [ ! -f "${ifdtool}" ]; then - x_ ./update project trees -b coreboot utils default - fi - [ -z "${new_mac}" ] || [ -f "${nvmutil}" ] || x_ make -C util/nvmutil - [ "${nukemode}" = "nuke" ] && return 0 - x_ ./update vendor download ${board} -} - -inject_vendorfiles() -{ - [ "${release}" != "y" ] && x_ patch_rom "${rom}" && return 0 - printf "patching release images\n" - patch_release_roms -} - -patch_release_roms() -{ - _tmpdir="tmp/romdir" - x_ rm -Rf "${_tmpdir}" - x_ mkdir -p "${_tmpdir}" - x_ tar -xf "${archive}" -C "${_tmpdir}" - - for x in "${_tmpdir}"/bin/*/*.rom ; do - printf "patching rom: %s\n" "$x" - x_ patch_rom "${x}" - done - for x in "${_tmpdir}"/bin/*/*_nomicrocode.rom ; do - [ -f "${x}" ] || continue - [ -f "${x%_nomicrocode.rom}.rom" ] || continue - - x_ cp "${x%_nomicrocode.rom}.rom" "${x}" - x_ "${cbfstool}" "${x}" remove -n cpu_microcode_blob.bin - done - - ( - x_ cd "${_tmpdir}/bin/"* - - # NOTE: For compatibility with older rom releases, defer to sha1 - [ "${nukemode}" = "nuke" ] || \ - sha512sum --status -c vendorhashes || \ - sha1sum --status -c vendorhashes || \ - sha512sum --status -c blobhashes || \ - sha1sum --status -c blobhashes || \ - err "patch_release_roms: ROMs did not match expected hashes" - ) - - if [ "${modifygbe}" = "true" ]; then - for x in "${_tmpdir}"/bin/*/*.rom ; do - modify_gbe "${x}" - done - fi - - [ -d bin/release ] || x_ mkdir -p bin/release - x_ mv "${_tmpdir}"/bin/* bin/release/ - - printf "Success! Your ROMs are in bin/release\n" - - x_ rm -Rf "${_tmpdir}" -} - -patch_rom() -{ - rom="${1}" - - # we don't process no-microcode roms; these are - # instead re-created at the end, after re-inserting - # on roms with microcode, by copying and then removing, - # so that the hashes will match (otherwise, cbfstool - # may sometimes insert certain vendor files at the wrong offset) - # (unless nomicrocode is the only config provided) - [ "${rom}" != "${rom%_nomicrocode.rom}.rom" ] && \ - [ -f "${rom%_nomicrocode.rom}.rom" ] && \ - [ "${release}" = "y" ] && return 0 - - x_ check_defconfig "${boarddir}" - - set -- "${boarddir}/config/"* - . "${1}" 2>/dev/null - - [ "$CONFIG_HAVE_MRC" = "y" ] && \ - inject "mrc.bin" "${CONFIG_MRC_FILE}" "mrc" "0xfffa0000" - [ "${CONFIG_HAVE_ME_BIN}" = "y" ] && \ - inject "IFD" "${CONFIG_ME_BIN_PATH}" "me" - [ "${CONFIG_KBC1126_FIRMWARE}" = "y" ] && \ - inject "ecfw1.bin" "$CONFIG_KBC1126_FW1" "raw" \ - "${CONFIG_KBC1126_FW1_OFFSET}" && \ - inject "ecfw2.bin" "$CONFIG_KBC1126_FW2" "raw" \ - "${CONFIG_KBC1126_FW2_OFFSET}" - [ ! -z "${CONFIG_VGA_BIOS_FILE}" ] && \ - [ ! -z "${CONFIG_VGA_BIOS_ID}" ] && \ - inject "pci${CONFIG_VGA_BIOS_ID}.rom" \ - "${CONFIG_VGA_BIOS_FILE}" "optionrom" - [ "${CONFIG_INCLUDE_SMSC_SCH5545_EC_FW}" = "y" ] && \ - [ ! -z "${CONFIG_SMSC_SCH5545_EC_FW_FILE}" ] && \ - inject "sch5545_ecfw.bin" "$CONFIG_SMSC_SCH5545_EC_FW_FILE" raw - [ "${modifygbe}" = "true" ] && ! [ "${release}" = "y" ] && \ - inject "IFD" "${CONFIG_GBE_BIN_PATH}" "GbE" - - printf "ROM image successfully patched: %s\n" "${rom}" -} - -inject() -{ - [ $# -lt 3 ] && \ - err "inject $@, $rom: usage: inject name path type (offset)" - - eval "$(setvars "" cbfsname _dest _t _offset)" - cbfsname="${1}" - _dest="${2##*../}" - _t="${3}" - [ $# -gt 3 ] && _offset="-b ${4}" && [ -z "${4}" ] && \ - err "inject $@, $rom: offset passed, but empty (not defined)" - - [ -z "${_dest}" ] && err "inject $@, ${rom}: empty destination path" - [ ! -f "${_dest}" ] && [ "${nukemode}" != "nuke" ] && \ - err "inject_${dl_type}: file missing, ${_dest}" - - [ "$nukemode" = "nuke" ] || \ - printf "Inserting %s/%s into file: %s\n" \ - "${cbfsname}" "${_t}" "$rom" - - if [ "${_t}" = "GbE" ]; then - x_ mkdir -p tmp - x_ cp "${_dest}" "tmp/gbe.bin" - _dest="tmp/gbe.bin" - x_ "${nvmutil}" "${_dest}" setmac "${new_mac}" - fi - if [ "${cbfsname}" = "IFD" ]; then - if [ "${nukemode}" != "nuke" ]; then - x_ "${ifdtool}" -i ${_t}:${_dest} "${rom}" -O "$rom" - else - x_ "${ifdtool}" --nuke ${_t} "${rom}" -O "${rom}" - fi - else - if [ "${nukemode}" != "nuke" ]; then - x_ "${cbfstool}" "${rom}" add -f "${_dest}" \ - -n "${cbfsname}" -t ${_t} ${_offset} - else - x_ "${cbfstool}" "${rom}" remove -n "${cbfsname}" - fi - - fi -} - -usage() -{ - cat <<- EOF - USAGE: ./update vendor inject -r [rom path] -b [boardname] -m [macaddress] - Example: ./update vendor inject -r x230_12mb.rom -b x230_12mb - - Adding a macadress to the gbe is optional. - If the [-m] parameter is left blank, the gbe will not be touched. - - Type './update vendor inject listboards' to get a list of valid boards - EOF -} - -main $@ |