Files
takana/docs/mirada-usb-nvidia.md
T
sergioandClaude Opus 4.8 cf2e8bf44d mirada-usb: modo hardware nouveau para GTX 1060 (Pascal/GP106)
- Hornea firmware nvidia/gp106 (ctxsw/acr/sec2) descomprimido a .bin (nouveau da GL 3D).
- init: modo HARDWARE por defecto (WGPU_BACKEND=gl sobre gallium-nouveau, que da float16
  vía unpackHalf2x16; tapa lavapipe). Pascal no tiene NVK ⇒ greeter va por GL, no Vulkan.
- cmdline default = hardware; 'mirada.sw nouveau.modeset=0' = fallback software.
- CHIP/FW_SRC parametrizables para otras GPUs.

Regresión: el fallback software sigue levantando el compositor en la imagen final.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-10 17:05:23 -04:00

3.8 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-generic 7.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ás seatd, libinput, libxkbcommon, datos XKB, PAM permisivo, busybox, loader musl.
  • /sbin/init = lanzador: monta pseudo-fs, arranca seatd, corre mirada-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 exporta WGPU_BACKEND=gl y 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.

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