mirada-usb: force_gpt en la cmdline + post-mortem del viaje NVIDIA
El firmware del tester reparo el GPT dd-eado en el POST y dejo el header primario invalido (entradas apuntadas a LBA 2016, presentes en LBA 2): Linux sin gpt en cmdline no cae al respaldo, no vio particiones y la telemetria MIRADALOG murio en RAM. Con gpt el kernel usa el respaldo. Documentado: greeter por nouveau GL validado en metal; input muerto queda abierto con el plan de evidencia para el proximo viaje.
Delta semántico
Ninguna definición cambió: el cambio es de texto, documentación o datos.
2 archivos · +32 −1
- docs/mirada-usb-nvidia.md +25 −0
- scripts/mirada-usb.sh +7 −1
diff --git a/docs/mirada-usb-nvidia.md b/docs/mirada-usb-nvidia.md
index 09b8636e..cfee8e0d 100644
--- a/docs/mirada-usb-nvidia.md
+++ b/docs/mirada-usb-nvidia.md
@@ -50,6 +50,31 @@ Pascal **no** usa GSP (eso es Turing+). La imagen hornea el firmware de acelerac
llvmpipe/lavapipe sobre simpledrm: el **compositor** arranca seguro; el **greeter no completa**
(los rasterizadores software no dan float16). Útil si nouveau diera problemas.
+## Post-mortem del primer viaje (GTX 1060, 2026-07-16)
+
+**Qué se vio en el metal:** booteó, el fondo animado del greeter pintó bien (⇒ nouveau GL +
+float16 VALIDADOS end-to-end), pero **sin input** (ni teclado ni mouse) y el pendrive volvió
+**sin telemetría** (partición MIRADALOG vacía).
+
+**Por qué se perdió la telemetría (resuelto):** el GPT de respaldo de la imagen dd-eada queda en el
+*medio* del pendrive (al final de la imagen, no del disco) y el firmware de la máquina lo "reparó" en
+el POST: reconstruyó el respaldo al final del disco (bien) y reescribió el header primario apuntando
+las entradas a LBA 2016 **sin copiarlas ahí** (quedaron en LBA 2) ⇒ CRC inválido. Linux **no** cae al
+GPT de respaldo con el primario roto salvo `gpt` en la cmdline (`block/partitions/efi.c`, `force_gpt`)
+⇒ cero particiones ⇒ `findfs LABEL=MIRADALOG` falló ⇒ logs sólo en RAM. UEFI y Windows sí usan el
+respaldo — por eso el stick booteaba y Windows lo leía, mientras Linux no veía `sdX1/sdX2`.
+**Fix:** la cmdline por defecto ahora lleva `gpt`. Si un stick ya quedó mutilado: el header primario
+se repara apuntando `partition_entry_lba` de vuelta a 2 y recomputando su CRC (o `gdisk` menú
+recovery, opción `c` = load backup partition table + `w`).
+
+**Input muerto (abierto):** nunca se validó — la validación QEMU fue `-display none`. Sospechosos, en
+orden: enumeración libinput sobre `libudev-zero` (¿0 dispositivos?), falta de nodos `/dev/input/event*`
+(el kernel generic trae usbhid/evdev built-in, debería haberlos), foco. El próximo viaje ya trae la
+evidencia: `01-hardware.txt` snapshotea `/proc/bus/input/devices` (lado kernel) y mirada ahora loguea
+cada `DeviceAdded` de libinput con nombre y capacidades (lado userspace, va al `05-mirada.log`) —
+commit en tawasuyu `mirada-compositor/src/drm_backend/input.rs`. Con telemetría persistente funcionando,
+ese par de archivos separa kernel vs udev vs foco.
+
## Pendiente / deuda
- **Confirmar en el metal**: el camino nouveau-GL sólo se puede validar en la 1060 real (QEMU no tiene
diff --git a/scripts/mirada-usb.sh b/scripts/mirada-usb.sh
index b282905c..66083b88 100644
--- a/scripts/mirada-usb.sh
+++ b/scripts/mirada-usb.sh
@@ -389,9 +389,15 @@ if [ "$PACKAGE" = "1" ]; then
# sin esta partición no sobrevive ni un log al apagado — y la GPU a probar está en otra máquina, lejos.
# El init la monta por LABEL=MIRADALOG con -o sync y vuelca ahí todo (ver /sbin/init).
# FAT32 ⇒ el pendrive se lee después desde cualquier SO, sin herramientas.
+ # `gpt` (force_gpt): la imagen dd-eada deja el GPT de respaldo en el MEDIO del disco (fin de la
+ # imagen, no del pendrive) y hay firmwares UEFI que lo "reparan" en el POST — reescriben el header
+ # primario apuntando las entradas a otro LBA sin copiarlas ⇒ primario INVÁLIDO. Linux, sin `gpt`,
+ # NO cae al respaldo con primario roto (block/partitions/efi.c) ⇒ cero particiones ⇒ findfs no ve
+ # MIRADALOG y la telemetría muere en RAM (pasó en el tester NVIDIA, 2026-07-16). Con `gpt` el kernel
+ # usa el respaldo y la telemetría sobrevive incluso con el primario mutilado.
ROOTFS="$RFS" KERNEL="$KGEN" IMG="work/hammer-mirada-usb.img" \
DATA_MB="${DATA_MB:-512}" DATA_LABEL="MIRADALOG" \
- OPTIONS="${CMDLINE:-console=tty0 loglevel=4}" \
+ OPTIONS="${CMDLINE:-console=tty0 loglevel=4 gpt}" \
scripts/metal-usb-sdboot.sh
echo ""
echo "✓ imagen: work/hammer-mirada-usb.img"