changes
This commit is contained in:
1 parent
0af2d3d547
commit
16152a5718
8 files changed
+418
-39
No files matched your search
Executable
+93
@@ -0,0 +1,93 @@
|
|||||||
|
#!/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."
|
||||||
@@ -54,7 +54,7 @@ boot_path=$(read_path "Drag the boot image: ")
|
|||||||
fastboot flash boot "$boot_path" || { echo "Error flashing boot"; exit 1; }
|
fastboot flash boot "$boot_path" || { echo "Error flashing boot"; exit 1; }
|
||||||
|
|
||||||
system_path=$(read_path "Drag the system image: ")
|
system_path=$(read_path "Drag the system image: ")
|
||||||
fastboot flash rootfs "$system_path" || { echo "Error flashing rootfs"; exit 1; }
|
fastboot flash system "$system_path" || { echo "Error flashing rootfs"; exit 1; }
|
||||||
|
|
||||||
echo "Rebooting to EDL mode..."
|
echo "Rebooting to EDL mode..."
|
||||||
fastboot oem reboot-edl || { echo "Error rebooting to EDL"; exit 1; }
|
fastboot oem reboot-edl || { echo "Error rebooting to EDL"; exit 1; }
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
#!/bin/sh -e
|
||||||
|
# make_gpt_both0.sh — Genera gpt_both0.bin (uso avanzado/recuperación).
|
||||||
|
# ADVERTENCIA: sólo para restaurar GPT cuando está corrupto y sabiendo lo que se hace.
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
FILES_DIR="files"
|
||||||
|
TMPDIR="$(mktemp -d)"
|
||||||
|
mkdir -p "${FILES_DIR}"
|
||||||
|
|
||||||
|
IMG="${TMPDIR}/gpt.img"
|
||||||
|
# Tamaño DEMO; ajustar a la geometría real si se pretende usar.
|
||||||
|
truncate -s 179323904 "${IMG}"
|
||||||
|
|
||||||
|
cat << 'EOF' | sfdisk "${IMG}"
|
||||||
|
label: gpt
|
||||||
|
label-id: DB708ACF-2E04-8DE2-BAFE-30C9B26444C5
|
||||||
|
unit: sectors
|
||||||
|
first-lba: 34
|
||||||
|
last-lba: 350208
|
||||||
|
sector-size: 512
|
||||||
|
|
||||||
|
gpt.img1 : start= 4096, size= 2, type=57B90A16-22C9-E33B-8F5D-0E81686A68CB, name="fsc"
|
||||||
|
gpt.img2 : start= 4098, size= 3072, type=638FF8E2-22C9-E33B-8F5D-0E81686A68CB, name="fsg"
|
||||||
|
gpt.img3 : start= 7170, size= 131072, type=EBD0A0A2-B9E5-4433-87C0-68B6B72699C7, name="modem"
|
||||||
|
gpt.img4 : start= 138242, size= 3072, type=EBBEADAF-22C9-E33B-8F5D-0E81686A68CB, name="modemst1"
|
||||||
|
gpt.img5 : start= 141314, size= 3072, type=0A288B1F-22C9-E33B-8F5D-0E81686A68CB, name="modemst2"
|
||||||
|
gpt.img6 : start= 144386, size= 65536, type=6C95E238-E343-4BA8-B489-8681ED22AD0B, name="persist"
|
||||||
|
gpt.img7 : start= 209922, size= 32, type=303E6AC3-AF15-4C54-9E9B-D9A8FBECF401, name="sec"
|
||||||
|
gpt.img8 : start= 209954, size= 1024, type=E1A6A689-0C8D-4CC6-B4E8-55A4320FBD8A, name="hyp"
|
||||||
|
gpt.img9 : start= 210978, size= 1024, type=098DF793-D712-413D-9D4E-89D711772228, name="rpm"
|
||||||
|
gpt.img10 : start= 212002, size= 1024, type=DEA0BA2C-CBDD-4805-B4F9-F428251C3E98, name="sbl1"
|
||||||
|
gpt.img11 : start= 213026, size= 2048, type=A053AA7F-40B8-4B1C-BA08-2F68AC71A4F4, name="tz"
|
||||||
|
gpt.img12 : start= 215074, size= 2048, type=400FFDCD-22E0-47E7-9A23-F16ED9382388, name="aboot"
|
||||||
|
gpt.img13 : start= 217122, size= 131072, type=20117F86-E985-4357-B9EE-374BC1D8487D, name="boot"
|
||||||
|
gpt.img14 : start= 348194, size= 2015, type=1B81E7E6-F50D-419B-A739-2AEEF8DA3335, name="rootfs"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Empaquetar Primary+Backup GPT en gpt_both0.bin
|
||||||
|
dd if="${IMG}" of="${FILES_DIR}/gpt_both0.bin" bs=512 count=34
|
||||||
|
dd if="${IMG}" bs=512 skip=2 count=32 >> "${FILES_DIR}/gpt_both0.bin"
|
||||||
|
dd if="${IMG}" bs=512 skip=350241 >> "${FILES_DIR}/gpt_both0.bin"
|
||||||
|
|
||||||
|
echo "gpt_both0.bin generado en ${FILES_DIR} (no usar salvo recuperación)."
|
||||||
|
rm -rf "${TMPDIR}"
|
||||||
+126
@@ -0,0 +1,126 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# diag-msm8916.sh - Diagnóstico QRTR/rmtfs/QMI para MSM8916 (OpenWrt/Linux)
|
||||||
|
# Requiere: qmicli, qrtr-lookup (opcional), rmtfs instalado, ip, dmesg
|
||||||
|
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
SECTION() { printf "\n==== %s ====\n" "$*"; }
|
||||||
|
RUN() {
|
||||||
|
printf "\n$ %s\n" "$*"
|
||||||
|
set +e
|
||||||
|
sh -c "$*"
|
||||||
|
rc=$?
|
||||||
|
set -e
|
||||||
|
printf "[exit %s]\n" "$rc"
|
||||||
|
}
|
||||||
|
HAVE() { command -v "$1" >/dev/null 2>&1; }
|
||||||
|
|
||||||
|
QMI_DEV="${QMI_DEV:-}"
|
||||||
|
QRTR_NODE="${QRTR_NODE:-}"
|
||||||
|
NET_HINT="${NET_HINT:-wwan0}"
|
||||||
|
|
||||||
|
SECTION "Sistema"
|
||||||
|
RUN "uname -a"
|
||||||
|
[ -f /etc/openwrt_release ] && RUN "cat /etc/openwrt_release" || true
|
||||||
|
RUN "ip -o link"
|
||||||
|
|
||||||
|
SECTION "Kernel/dmesg (qcom|rmtfs|remoteproc|ipa|rmnet|qrtr|qmi)"
|
||||||
|
RUN "dmesg | tail -n 200"
|
||||||
|
RUN "dmesg | grep -i -E 'qcom|rmtfs|remoteproc|ipa|rmnet|qrtr|qmi' | tail -n 400"
|
||||||
|
|
||||||
|
SECTION "/dev y procesos"
|
||||||
|
RUN "ls -l /dev/qcom_rmtfs_mem* 2>/dev/null || echo 'no /dev/qcom_rmtfs_mem*'"
|
||||||
|
RUN "ps w | grep -E 'rmtfs|qrtr-ns|modemmanager|ofonod' | grep -v grep || true"
|
||||||
|
[ -x /etc/init.d/rmtfs ] && RUN "/etc/init.d/rmtfs status || true" || true
|
||||||
|
[ -x /etc/init.d/qrtr-ns ] && RUN "/etc/init.d/qrtr-ns status || true" || true
|
||||||
|
|
||||||
|
SECTION "QRTR"
|
||||||
|
if HAVE qrtr-lookup; then
|
||||||
|
RUN "qrtr-lookup -v || qrtr-lookup 0 || true"
|
||||||
|
else
|
||||||
|
echo "qrtr-lookup no está instalado"
|
||||||
|
fi
|
||||||
|
|
||||||
|
SECTION "EFS/MCFG en /var/lib/rmtfs"
|
||||||
|
[ -d /var/lib/rmtfs ] && RUN "find /var/lib/rmtfs -maxdepth 2 -type f -name 'modem_fs*' -printf '%p %s bytes\n' | sort -V || true" || echo "/var/lib/rmtfs no existe"
|
||||||
|
[ -d /var/lib/rmtfs ] && RUN "find /var/lib/rmtfs -maxdepth 5 -type f -name 'mcfg_sw.*' -printf '%p %s bytes\n' | sort -V || true" || true
|
||||||
|
[ -d /var/lib/rmtfs ] && RUN "ls -la /var/lib/rmtfs | sed -n '1,200p'" || true
|
||||||
|
|
||||||
|
detect_qmi_dev() {
|
||||||
|
# 1) Usuario forzó
|
||||||
|
if [ -n "$QMI_DEV" ]; then
|
||||||
|
echo "$QMI_DEV"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
# 2) QRTR_NODE forzado
|
||||||
|
if [ -n "$QRTR_NODE" ]; then
|
||||||
|
echo "qrtr://$QRTR_NODE"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
# 3) Probar QRTR nodos 0..7
|
||||||
|
if HAVE qmicli; then
|
||||||
|
i=0
|
||||||
|
while [ $i -le 7 ]; do
|
||||||
|
if qmicli -d "qrtr://$i" --timeout=4 --get-service-version-info >/dev/null 2>&1; then
|
||||||
|
echo "qrtr://$i"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
i=$((i+1))
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
# 4) Probar /dev/cdc-wdm*
|
||||||
|
for dev in /dev/cdc-wdm*; do
|
||||||
|
[ -e "$dev" ] || continue
|
||||||
|
if qmicli -d "$dev" --timeout=4 --get-service-version-info >/dev/null 2>&1; then
|
||||||
|
echo "$dev"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
# 5) Probar /dev/wwan0qmi (pista del usuario)
|
||||||
|
if [ -e /dev/wwan0qmi ]; then
|
||||||
|
echo "/dev/wwan0qmi"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
# 6) Probar map desde interfaz NET_HINT -> cdc-wdm
|
||||||
|
if [ -d "/sys/class/net/$NET_HINT/qmi" ]; then
|
||||||
|
ctl="$(readlink -f "/sys/class/net/$NET_HINT/qmi" 2>/dev/null || true)"
|
||||||
|
wdm="$(printf '%s' "$ctl" | awk -F/ '{ for (i=1;i<=NF;i++) if ($i ~ /cdc-wdm/) print "/dev/"$i }')"
|
||||||
|
if [ -n "$wdm" ] && [ -e "$wdm" ]; then
|
||||||
|
echo "$wdm"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION "Detección QMI"
|
||||||
|
if DEV="$(detect_qmi_dev)"; then
|
||||||
|
QMI_DEV="$DEV"
|
||||||
|
echo "QMI_DEV=$QMI_DEV"
|
||||||
|
else
|
||||||
|
echo "No se pudo detectar dispositivo/URI QMI"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "${QMI_DEV:-}" ]; then
|
||||||
|
SECTION "QMI: versiones de servicio"
|
||||||
|
RUN "qmicli -d \"$QMI_DEV\" --timeout=8 --verbose --get-service-version-info"
|
||||||
|
|
||||||
|
SECTION "QMI: identidad y registro de red"
|
||||||
|
RUN "qmicli -d \"$QMI_DEV\" --timeout=8 --dms-get-ids"
|
||||||
|
RUN "qmicli -d \"$QMI_DEV\" --timeout=8 --nas-get-home-network || true"
|
||||||
|
RUN "qmicli -d \"$QMI_DEV\" --timeout=8 --nas-get-serving-system || true"
|
||||||
|
|
||||||
|
SECTION "QMI: perfiles 3GPP (APN)"
|
||||||
|
RUN "qmicli -d \"$QMI_DEV\" --timeout=12 --wds-get-profile-list=3gpp || true"
|
||||||
|
|
||||||
|
SECTION "QMI: PDC/MCFG (si disponible)"
|
||||||
|
RUN "qmicli -d \"$QMI_DEV\" --timeout=15 --pdc-list-configs || true"
|
||||||
|
RUN "qmicli -d \"$QMI_DEV\" --timeout=8 --help-pdc | sed -n '1,120p' || true"
|
||||||
|
fi
|
||||||
|
|
||||||
|
SECTION "Interfaces de datos (rmnet/wwan)"
|
||||||
|
RUN "ip -d link show | grep -E 'rmnet|wwan|ipa' -n || true"
|
||||||
|
RUN "ip a | sed -n '1,300p'"
|
||||||
|
|
||||||
|
SECTION "Hecho"
|
||||||
|
echo "Fin de diagnóstico. Adjuntar este log completo al reporte."
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# fix-efs-mcfg-apn-busybox.sh - MSM8916: poblar /var/lib/rmtfs y diagnosticar QMI con busybox/ash
|
||||||
|
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
SECTION(){ printf "\n==== %s ====\n" "$*"; }
|
||||||
|
RUN(){ printf "\n$ %s\n" "$*"; set +e; sh -c "$*"; rc=$?; set -e; printf "[exit %s]\n" "$rc"; }
|
||||||
|
HAVE(){ command -v "$1" >/dev/null 2>&1; }
|
||||||
|
|
||||||
|
HASH_CMD=""
|
||||||
|
if HAVE sha256sum; then HASH_CMD="sha256sum";
|
||||||
|
elif HAVE sha1sum; then HASH_CMD="sha1sum";
|
||||||
|
elif HAVE md5sum; then HASH_CMD="md5sum";
|
||||||
|
elif HAVE cksum; then HASH_CMD="cksum";
|
||||||
|
else HASH_CMD=""; fi
|
||||||
|
|
||||||
|
# Layout según tu salida PARTNAME=
|
||||||
|
P_FSC=/dev/mmcblk0p1
|
||||||
|
P_FSG=/dev/mmcblk0p2
|
||||||
|
P_MODEMST1=/dev/mmcblk0p4
|
||||||
|
P_MODEMST2=/dev/mmcblk0p5
|
||||||
|
|
||||||
|
TS="$(date +%Y%m%d-%H%M%S 2>/dev/null || echo now)"
|
||||||
|
BACKUP_DIR="/var/backups/rmtfs.$TS"
|
||||||
|
QMI_DEV="${QMI_DEV:-}"
|
||||||
|
NET_HINT="${NET_HINT:-wwan0}"
|
||||||
|
|
||||||
|
SECTION "Sistema"
|
||||||
|
RUN "uname -a"
|
||||||
|
[ -f /etc/openwrt_release ] && RUN "cat /etc/openwrt_release" || true
|
||||||
|
|
||||||
|
SECTION "Preparar /var/lib/rmtfs y backup (busybox)"
|
||||||
|
mkdir -p /var/lib/rmtfs
|
||||||
|
chmod 700 /var/lib/rmtfs
|
||||||
|
mkdir -p "$BACKUP_DIR"
|
||||||
|
for f in modem_fsg modem_fsc modem_fs1 modem_fs2; do
|
||||||
|
[ -f "/var/lib/rmtfs/$f" ] && cp -a "/var/lib/rmtfs/$f" "$BACKUP_DIR/$f.old" || true
|
||||||
|
done
|
||||||
|
RUN "ls -la /var/lib/rmtfs | sed -n '1,200p'"
|
||||||
|
|
||||||
|
SECTION "Copiar ficheros EFS/FSG desde eMMC"
|
||||||
|
dd if="$P_FSG" of=/var/lib/rmtfs/modem_fsg bs=4096 conv=fsync 2>/dev/null
|
||||||
|
dd if="$P_FSC" of=/var/lib/rmtfs/modem_fsc bs=4096 conv=fsync 2>/dev/null
|
||||||
|
dd if="$P_MODEMST1" of=/var/lib/rmtfs/modem_fs1 bs=4096 conv=fsync 2>/dev/null
|
||||||
|
dd if="$P_MODEMST2" of=/var/lib/rmtfs/modem_fs2 bs=4096 conv=fsync 2>/dev/null
|
||||||
|
chmod 600 /var/lib/rmtfs/modem_fs* /var/lib/rmtfs/modem_fsg /var/lib/rmtfs/modem_fsc
|
||||||
|
RUN "ls -l /var/lib/rmtfs/modem_*"
|
||||||
|
[ -n "$HASH_CMD" ] && RUN "$HASH_CMD /var/lib/rmtfs/modem_*" || echo "hash: ninguna de sha256sum/sha1sum/md5sum/cksum disponible"
|
||||||
|
# Hexdump con od (busybox)
|
||||||
|
HAVE od && RUN "od -Ax -tx1 -N 256 /var/lib/rmtfs/modem_fsg | sed -n '1,16p'" || true
|
||||||
|
HAVE od && RUN "od -Ax -tx1 -N 256 /var/lib/rmtfs/modem_fs1 | sed -n '1,16p'" || true
|
||||||
|
|
||||||
|
SECTION "Reiniciar rmtfs y revisar logs"
|
||||||
|
[ -x /etc/init.d/rmtfs ] && RUN "/etc/init.d/rmtfs restart" || echo "no init rmtfs"
|
||||||
|
sleep 2
|
||||||
|
HAVE logread && RUN "logread -e rmtfs | tail -n 200" || true
|
||||||
|
RUN "ps w | grep -E 'rmtfs|qrtr-ns' | grep -v grep || true"
|
||||||
|
|
||||||
|
SECTION "QRTR: enumeración de servicios"
|
||||||
|
if command -v qrtr-lookup >/dev/null 2>&1; then
|
||||||
|
RUN "qrtr-lookup -v"
|
||||||
|
RUN "qrtr-lookup 14 1 || true"
|
||||||
|
else
|
||||||
|
echo "qrtr-lookup no está instalado"
|
||||||
|
fi
|
||||||
|
|
||||||
|
detect_qmi_dev() {
|
||||||
|
# 1) Forzado por entorno
|
||||||
|
[ -n "$QMI_DEV" ] && { echo "$QMI_DEV"; return 0; }
|
||||||
|
# 2) Probar nodos WWAN QMI nativos
|
||||||
|
for dev in /dev/wwan*qmi*; do
|
||||||
|
[ -e "$dev" ] || continue
|
||||||
|
if qmicli -d "$dev" --timeout=4 --get-service-version-info >/dev/null 2>&1; then
|
||||||
|
echo "$dev"; return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
# 3) Probar qrtr:// nodos 0..7
|
||||||
|
i=0
|
||||||
|
while [ $i -le 7 ]; do
|
||||||
|
if qmicli -d "qrtr://$i" --timeout=4 --get-service-version-info >/dev/null 2>&1; then
|
||||||
|
echo "qrtr://$i"; return 0
|
||||||
|
fi
|
||||||
|
i=$((i+1))
|
||||||
|
done
|
||||||
|
# 4) Mapear desde interfaz NET_HINT si expone control
|
||||||
|
if [ -d "/sys/class/net/$NET_HINT" ]; then
|
||||||
|
for d in /dev/wwan*qmi*; do
|
||||||
|
[ -e "$d" ] && echo "$d" && return 0
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION "Detección QMI"
|
||||||
|
if DEV="$(detect_qmi_dev)"; then
|
||||||
|
QMI_DEV="$DEV"
|
||||||
|
echo "QMI_DEV=$QMI_DEV"
|
||||||
|
else
|
||||||
|
echo "No se pudo detectar dispositivo/URI QMI"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "${QMI_DEV:-}" ]; then
|
||||||
|
SECTION "QMI: versiones de servicio"
|
||||||
|
RUN "qmicli -d \"$QMI_DEV\" --timeout=10 --get-service-version-info"
|
||||||
|
SECTION "QMI: identidad/registro"
|
||||||
|
RUN "qmicli -d \"$QMI_DEV\" --timeout=8 --dms-get-ids"
|
||||||
|
RUN "qmicli -d \"$QMI_DEV\" --timeout=8 --nas-get-home-network || true"
|
||||||
|
RUN "qmicli -d \"$QMI_DEV\" --timeout=8 --nas-get-serving-system || true"
|
||||||
|
SECTION "QMI: perfiles 3GPP (APN)"
|
||||||
|
RUN "qmicli -d \"$QMI_DEV\" --timeout=12 --wds-get-profile-list=3gpp || true"
|
||||||
|
SECTION "QMI: PDC/MCFG (si soportado)"
|
||||||
|
RUN "qmicli -d \"$QMI_DEV\" --timeout=15 --pdc-list-configs || true"
|
||||||
|
fi
|
||||||
|
|
||||||
|
SECTION "Interfaces WWAN/rmnet"
|
||||||
|
RUN "ip -d link show | grep -E 'rmnet|wwan|ipa' -n || true"
|
||||||
|
RUN "ip a | sed -n '1,200p'"
|
||||||
|
|
||||||
|
SECTION "Hecho"
|
||||||
|
echo "Listo. Comparte la salida completa."
|
||||||
@@ -4,7 +4,7 @@ ifeq ($(SUBTARGET),msm8916)
|
|||||||
|
|
||||||
define Device/msm8916
|
define Device/msm8916
|
||||||
SOC := msm8916
|
SOC := msm8916
|
||||||
CMDLINE := "earlycon console=tty0 console=ttyMSM0,115200 root=/dev/mmcblk0p14 rw rootwait"
|
CMDLINE := "earlycon console=tty0 console=ttyMSM0,115200 root=/dev/mmcblk0p23 rw rootwait"
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Device/yiming-uz801v3
|
define Device/yiming-uz801v3
|
||||||
|
|||||||
+30
-32
@@ -1,67 +1,65 @@
|
|||||||
#
|
# Copyright (C) 2025
|
||||||
# Copyright (C) 2020-2021 HandsomeMod Project
|
# SPDX-License-Identifier: BSD-3-Clause
|
||||||
#
|
|
||||||
# This is free software, licensed under the GNU General Public License v2.
|
|
||||||
# See /LICENSE for more information.
|
|
||||||
#
|
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=qrtr
|
PKG_NAME:=qrtr
|
||||||
PKG_VERSION:=1.0
|
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_URL:=https://github.com/andersson/qrtr.git
|
PKG_SOURCE_URL:=https://github.com/linux-msm/qrtr.git
|
||||||
# PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
PKG_SOURCE_VERSION:=5923eea97377f4a3ed9121b358fd919e3659db7b
|
||||||
PKG_SOURCE_VERSION:=9dc7a88548c27983e06465d3fbba2ba27d4bc050
|
|
||||||
# PKG_MIRROR_HASH:=46a01bc27ccbf8aeef3bc545d128d4da581cb3925e646c4eb6b50a6c5d68c5dc
|
|
||||||
|
|
||||||
PKG_LICENSE:=BSD-3-Clause
|
PKG_LICENSE:=BSD-3-Clause
|
||||||
|
PKG_LICENSE_FILES:=LICENSE
|
||||||
|
|
||||||
|
PKG_INSTALL:=1
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
include $(INCLUDE_DIR)/meson.mk
|
||||||
|
|
||||||
|
# Ajustes Meson opcionales (ej.: tipo de build)
|
||||||
|
# MESON_ARGS += --buildtype=release
|
||||||
|
|
||||||
define Package/libqrtr
|
define Package/libqrtr
|
||||||
SECTION:=libs
|
SECTION:=libs
|
||||||
CATEGORY:=Libraries
|
CATEGORY:=Libraries
|
||||||
TITLE:=Userspace reference for net/qrtr in the Linux kernel
|
TITLE:=Userspace library for Linux kernel QRTR
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/qrtr-ns
|
define Package/qrtr-utils
|
||||||
SECTION:=utils
|
SECTION:=utils
|
||||||
CATEGORY:=Utilities
|
CATEGORY:=Utilities
|
||||||
DEPENDS:=+libqrtr
|
DEPENDS:=+libqrtr
|
||||||
TITLE:=qrtr daemon
|
TITLE:=QRTR tools and daemon (qrtr-ns, lookup, etc.)
|
||||||
endef
|
|
||||||
|
|
||||||
define Build/Compile
|
|
||||||
$(call Build/Compile/Default,prefix=/usr all)
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Build/Install
|
|
||||||
$(call Build/Install/Default,prefix=/usr DESTDIR="$(PKG_INSTALL_DIR)" install)
|
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
# Headers y .so para SDK
|
||||||
define Build/InstallDev
|
define Build/InstallDev
|
||||||
$(INSTALL_DIR) $(1)/usr/include
|
$(INSTALL_DIR) $(1)/usr/include
|
||||||
$(CP) $(PKG_INSTALL_DIR)/usr/include/libqrtr.h $(1)/usr/include/
|
$(CP) $(PKG_INSTALL_DIR)/usr/include/*.h $(1)/usr/include/
|
||||||
|
|
||||||
$(INSTALL_DIR) $(1)/usr/lib
|
$(INSTALL_DIR) $(1)/usr/lib
|
||||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/* $(1)/usr/lib/
|
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libqrtr*.so* $(1)/usr/lib/
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
# Biblioteca en su propio paquete
|
||||||
define Package/libqrtr/install
|
define Package/libqrtr/install
|
||||||
$(INSTALL_DIR) $(1)/usr/lib
|
$(INSTALL_DIR) $(1)/usr/lib
|
||||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/* $(1)/usr/lib/
|
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libqrtr*.so* $(1)/usr/lib/
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/qrtr-ns/install
|
# Herramientas y daemon
|
||||||
$(INSTALL_DIR) $(1)/etc/init.d
|
define Package/qrtr-utils/install
|
||||||
$(INSTALL_BIN) ./files/qrtr.init $(1)/etc/init.d/qrtrns
|
|
||||||
|
|
||||||
$(INSTALL_DIR) $(1)/usr/bin
|
$(INSTALL_DIR) $(1)/usr/bin
|
||||||
$(CP) $(PKG_INSTALL_DIR)/usr/bin/qrtr-* $(1)/usr/bin/
|
# Instalar utilidades/daemon construidos por Meson
|
||||||
|
# (p.ej. qrtr-ns, qrtr-lookup, qrtr-cmd si están presentes)
|
||||||
|
-$(CP) $(PKG_INSTALL_DIR)/usr/bin/qrtr* $(1)/usr/bin/
|
||||||
|
|
||||||
|
# Init script opcional (procd); coloque un files/qrtrns.init si se desea
|
||||||
|
# $(INSTALL_DIR) $(1)/etc/init.d
|
||||||
|
# $(INSTALL_BIN) ./files/qrtrns.init $(1)/etc/init.d/qrtrns
|
||||||
endef
|
endef
|
||||||
|
|
||||||
$(eval $(call BuildPackage,libqrtr))
|
$(eval $(call BuildPackage,libqrtr))
|
||||||
$(eval $(call BuildPackage,qrtr-ns))
|
$(eval $(call BuildPackage,qrtr-utils))
|
||||||
@@ -13,10 +13,8 @@ PKG_RELEASE:=1
|
|||||||
|
|
||||||
PKG_BUILD_DIR:=$(BUILD_DIR)/rmtfs-$(PKG_VERSION)
|
PKG_BUILD_DIR:=$(BUILD_DIR)/rmtfs-$(PKG_VERSION)
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_URL:=https://github.com/andersson/rmtfs.git
|
PKG_SOURCE_URL:=https://github.com/linux-msm/rmtfs
|
||||||
# PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
PKG_SOURCE_VERSION:=586372e575f5cc1a7cbb170219ab6df98f394cae
|
||||||
PKG_SOURCE_VERSION:=695d0668ffa6e2a4bf6e676f3c58a444a5d67690
|
|
||||||
# PKG_MIRROR_HASH:=ef6a3eb2e46cd02dd41b5c63e78c61143df398eb3a141fb8f16290a086ee208a
|
|
||||||
|
|
||||||
PKG_LICENSE:=BSD-3-Clause
|
PKG_LICENSE:=BSD-3-Clause
|
||||||
|
|
||||||
@@ -26,7 +24,7 @@ define Package/rmtfs
|
|||||||
SECTION:=utils
|
SECTION:=utils
|
||||||
CATEGORY:=Utilities
|
CATEGORY:=Utilities
|
||||||
TITLE:=Qualcomm Remote Filesystem Service Implementation
|
TITLE:=Qualcomm Remote Filesystem Service Implementation
|
||||||
DEPENDS:=+libudev-zero +libqrtr +qrtr-ns
|
DEPENDS:=+libudev-zero +libqrtr +qrtr-utils
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Build/Compile
|
define Build/Compile
|
||||||
|
|||||||
Reference in new issue
Block a user