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.
5.7 KiB
Imagen USB de prueba de mirada (GPU ajena / NVIDIA)
Genera una USB live que arranca el compositor mirada para probarlo en hardware ajeno
(NVIDIA/AMD/lo-que-sea). Cierra la parte de imagen del HANDOFF-nvidia-mirada.md.
Armar y quemar
scripts/mirada-usb.sh # → work/hammer-mirada-usb.img (~147 MB)
sudo dd if=work/hammer-mirada-usb.img of=/dev/sdX bs=4M oflag=sync status=progress
Bootear con Secure Boot OFF. Aparece el menú de systemd-boot; ENTER arranca. La tecla e
edita la cmdline en vivo (para alternar software/hardware, ver abajo).
Qué contiene
- Kernel
linux-generic7.1.2 (nouveau/i915/radeon built-in + simpledrm fallback). - mirada ya sellado en el store:
mirada-compositor(smithay) +mirada-greeter(wgpu/Vello) +mirada-ctl. - Stack gráfico por software + nouveau (mesa 26.1.1 de Alpine, musl): llvmpipe (GL) + lavapipe
(Vulkan) +
nouveau_dri.so(GL por hardware si nouveau bindea). Másseatd,libinput,libxkbcommon, datos XKB, PAM permisivo, busybox, loader musl. /sbin/init= lanzador: monta pseudo-fs, arrancaseatd, corremirada-compositor --drm --greeter.
La receta nueva es recipes/mesa-swrast.toml (softpipe hammer-nativo, sin LLVM); el stack robusto de la
imagen viene de Alpine (deuda de soberanía: falta recipes/{llvm,mesa-llvmpipe,nvk} desde fuente).
Estado validado (QEMU virtio-gpu, software)
✅ El compositor arranca entero: libseat → /dev/dri/card0 → GBM+EGL+GlesRenderer →
[8/8] → «escritorio en marcha» → acepta clientes Wayland → dibuja la ventana del greeter.
⚠️ El greeter (login) NO termina de pintar por software. Su renderer Vello exige la capacidad
de shaders float16 (SHADER_FLOAT16_IN_FLOAT32, unpack2x16float) que llvmpipe y lavapipe NO
proveen — sólo una GPU real. Por eso el login sólo se pinta con hardware.
Target actual: GTX 1060 (Pascal / GP106)
Pascal no usa GSP (eso es Turing+). La imagen hornea el firmware de aceleración nvidia/gp106/
(ctxsw gr/ + acr/sec2, descomprimido a .bin) que nouveau necesita para dar GL 3D.
NVK (Vulkan) no soporta Pascal ⇒ el greeter va por el backend GL de wgpu sobre gallium-nouveau
(que da unpackHalf2x16 = float16). Reconstruir para otra GPU: CHIP=<gpXXX> FW_SRC=<dir> scripts/mirada-usb.sh.
Los dos modos (cmdline, editable con e en systemd-boot)
- Por defecto (
console=tty0) → HARDWARE nouveau. nouveau maneja la GTX 1060 (firmware ya horneado), el compositor y el greeter pintan por gallium-nouveau GL. El init exportaWGPU_BACKEND=gly tapa lavapipe para que wgpu no caiga a software. - Fallback software → en el menú,
e, agregámirada.sw nouveau.modeset=0. Fuerza 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
nouveau; el proxy virgl requiere
egl-headless, no disponible acá). El software sí está validado. - Soberanía: el stack GL/Vulkan viene de Alpine (mesa 26 + LLVM 22). Falta
recipes/{llvm,mesa-llvmpipe,mesa-nouveau}desde fuente. El firmware nouveau es un blob NVIDIA (no reproducible por naturaleza).
Validar en VM
# compositor por software (virtio-gpu); el greeter no completa (float16) — es lo esperado:
qemu-system-x86_64 -enable-kvm -m 4096 -smp 4 \
-kernel store/*-linux-generic/boot/bzImage -initrd work/metal-sdboot/initramfs.cpio.gz \
-append "console=ttyS0,115200 mirada.sw nouveau.modeset=0 rdinit=/init" \
-device virtio-gpu-pci -display none -serial stdio -no-reboot