Files
msm8916-openwrt/base_partitions/build_and_pack.sh
T
2025-09-25 11:27:36 +02:00

94 lines
3.7 KiB
Bash
Executable File

#!/bin/sh -e
# build_and_pack.sh — UZ801 (MSM8916):
# - Clona qhypstub, lk2nd (lk1st) y qtestsign
# - Descarga DB410c 17.09 (tz/sbl1/rpm)
# - Compila y firma hyp (qhypstub) y aboot (lk1st)
# - NO flashea; deja artefactos en files/
set -eu pipefail
# Requisitos en host: git, wget, unzip, python3, toolchains aarch64-linux-gnu- y arm-none-eabi-
need() { command -v "$1" >/dev/null || { echo "Falta dependencia: $1"; exit 1; }; }
need git; need wget; need unzip; need python3
export CROSS_AARCH64="${CROSS_AARCH64:-aarch64-linux-gnu-}"
export CROSS_ARM="${CROSS_ARM:-arm-none-eabi-}"
ROOT="${PWD}"
PKG="${ROOT}/packages"
FILES="${ROOT}/files"
TMP="${ROOT}/.tmp_dl"
mkdir -p "${PKG}" "${FILES}" "${TMP}"
QHYPSTUB_URL="https://github.com/msm8916-mainline/qhypstub.git"
LK2ND_URL="https://github.com/msm8916-mainline/lk2nd.git"
QTESTSIGN_URL="https://github.com/msm8916-mainline/qtestsign.git"
DB410C_BOOT_ZIP_URL="https://releases.linaro.org/96boards/dragonboard410c/linaro/rescue/17.09/dragonboard410c_bootloader_emmc_android-88.zip"
clone_or_update() {
local url="$1" dir="$2"
if [ -d "$2/.git" ]; then
git -C "$2" fetch --all --tags -q
git -C "$2" pull --ff-only -q
else
git clone --depth=1 "$1" "$2"
fi
}
echo "[*] Clonando repos..."
clone_or_update "$QHYPSTUB_URL" "${PKG}/qhypstub"
clone_or_update "$LK2ND_URL" "${PKG}/lk2nd"
clone_or_update "$QTESTSIGN_URL" "${PKG}/qtestsign"
echo "[*] Descargando DB410c 17.09..."
DBZIP="${TMP}/db410c_17.09.zip"
[ -s "${DBZIP}" ] || wget -O "${DBZIP}" "${DB410C_BOOT_ZIP_URL}"
# Función para extraer por basename desde el zip (independiente de la ruta interna)
extract_by_basename() {
local zip="$1" base="$2" out="$3"
# localizar la ruta interna por basename (case-insensitive)
local path
path="$(unzip -Z1 "${zip}" | awk -v b="$base" 'tolower($0) ~ "/" tolower(b) "$" || tolower($0) ~ "^" tolower(b) "$" {print $0; exit}')"
[ -n "${path}" ] || { echo "No se encontró ${base} en el ZIP"; return 1; }
# extraer al directorio de salida "files/" descartando rutas (-j) y sobrescribiendo (-o)
unzip -j -o "${zip}" "${path}" -d "$(dirname "${out}")" >/dev/null
# ruta real del fichero extraído (mismo basename bajo files/)
local tmp="$(dirname "${out}")/$(basename "${path}")"
# si el nombre ya coincide con el destino, no intentes mover
if [ "$(readlink -f "${tmp}")" != "$(readlink -f "${out}")" ]; then
mv -f "${tmp}" "${out}"
fi
echo "Extraído ${base} -> ${out} (desde ${path})"
}
echo "[*] Extrayendo tz/sbl1/rpm por nombre..."
extract_by_basename "${DBZIP}" "tz.mbn" "${FILES}/tz.mbn"
extract_by_basename "${DBZIP}" "sbl1.mbn" "${FILES}/sbl1.mbn" || true
extract_by_basename "${DBZIP}" "rpm.mbn" "${FILES}/rpm.mbn" || true
echo "[*] Compilando qhypstub..."
make -C "${PKG}/qhypstub" CROSS_COMPILE="${CROSS_AARCH64}"
echo "[*] Ajuste HS200 opcional en lk1st..."
grep -qxF 'DEFINES += USE_TARGET_HS200_CAPS=1' "${PKG}/lk2nd/project/lk1st-msm8916.mk" || \
echo 'DEFINES += USE_TARGET_HS200_CAPS=1' >> "${PKG}/lk2nd/project/lk1st-msm8916.mk"
echo "[*] Compilando lk1st (aboot) para UZ801..."
make -C "${PKG}/lk2nd" \
LK2ND_BUNDLE_DTB="msm8916-512mb-mtp.dtb" \
LK2ND_COMPATIBLE="yiming,uz801-v3" \
TOOLCHAIN_PREFIX="${CROSS_ARM}" \
lk1st-msm8916
echo "[*] Firmando qhypstub y lk1st con qtestsign..."
python3 "${PKG}/qtestsign/qtestsign.py" hyp "${PKG}/qhypstub/qhypstub.elf" \
-o "${FILES}/hyp.mbn"
python3 "${PKG}/qtestsign/qtestsign.py" aboot "${PKG}/lk2nd/build-lk1st-msm8916/emmc_appsboot.mbn" \
-o "${FILES}/aboot.mbn"
echo "[+] Artefactos listos en ${FILES}:"
ls -l "${FILES}"
echo "[i] Generados: hyp.mbn (qhypstub), aboot.mbn (lk1st); extraídos: tz.mbn y sbl1.mbn (DB410c 17.09); rpm.mbn opcional."