Files
hammer/HANDOFF-nvidia-mirada.md
T
sergioandClaude Opus 4.8 e263b66ec1 mirada/USB: telemetría persistente en el pendrive + bump a mirada de hoy (fix musl en tawasuyu)
TELEMETRÍA (el pedido): el rootfs de la imagen es un initramfs = RAM pura y los logs iban a /run (tmpfs)
⇒ al apagar la máquina ajena no sobrevivía NADA. Ahora la imagen lleva 2da partición FAT32 MIRADALOG
(512M), montada por findfs+LABEL con -o sync (un cuelgue de GPU o corte de luz no se lleva los logs).
Cada arranque vuelca run-NNNN/ con: resumen (modo/GPU/driver), hardware (PCI vía sysfs, módulos, DRM,
input, firmware), pantallas (status/modes por conector), dmesg ANTES y DESPUÉS de mirada, seatd, y el log
del compositor+greeter con RUST_LOG=wgpu_core=debug + EGL_LOG_LEVEL=debug + LIBGL_DEBUG=verbose (para ver
por qué wgpu eligió el backend y si hay float16). Shell de rescate + . FAT32 a propósito: el
pendrive se lee después desde cualquier SO.

metal-usb-sdboot.sh gana DATA_MB/DATA_LABEL genéricos (partición de datos opcional en la GPT).

GOTCHAs verificados antes de confiar: el kernel linux-generic SÍ trae VFAT_FS=y + NLS + USB_STORAGE=y
(sin eso no montaba); el busybox de Alpine NO trae el applet 00:00.0 Host bridge: Intel Corporation Tiger Lake-UP3/H35 4 cores Host Bridge/DRAM Registers (rev 01)
00:02.0 VGA compatible controller: Intel Corporation TigerLake-LP GT2 [Iris Xe Graphics] (rev 01)
00:04.0 Signal processing controller: Intel Corporation TigerLake-LP Dynamic Tuning Processor Participant (rev 01)
00:07.0 PCI bridge: Intel Corporation Tiger Lake-LP Thunderbolt 4 PCI Express Root Port #0 (rev 01)
00:08.0 System peripheral: Intel Corporation GNA Scoring Accelerator module (rev 01)
00:0a.0 Signal processing controller: Intel Corporation Tigerlake Telemetry Aggregator Driver (rev 01)
00:0d.0 USB controller: Intel Corporation Tiger Lake-LP Thunderbolt 4 USB Controller (rev 01)
00:0d.2 USB controller: Intel Corporation Tiger Lake-LP Thunderbolt 4 NHI #0 (rev 01)
00:12.0 Serial controller: Intel Corporation 500 Series Chipset Family On-Package Integrated Sensor Hub (rev 20)
00:14.0 USB controller: Intel Corporation 500 Series Chipset Family On-Package USB 3.2 Gen 2x1 (10 Gbs) xHCI Host Controller (rev 20)
00:14.2 RAM memory: Intel Corporation 500 Series Chipset Family On-Package Shared SRAM (rev 20)
00:14.3 Network controller: Intel Corporation Wi-Fi 6 AX201 (rev 20)
00:15.0 Serial bus controller: Intel Corporation 500 Series Chipset Family On-Package I2C Controller #0 (rev 20)
00:15.1 Serial bus controller: Intel Corporation 500 Series Chipset Family On-Package I2C Controller #1 (rev 20)
00:16.0 Communication controller: Intel Corporation 500 Series Chipset Family On-Package CSME HECI #1 (rev 20)
00:1c.0 PCI bridge: Intel Corporation 500 Series Chipset Family On-Package PCI Express Root Port #5 (rev 20)
00:1d.0 PCI bridge: Intel Corporation 500 Series Chipset Family On-Package PCI Express Root Port #9 (rev 20)
00:1f.0 ISA bridge: Intel Corporation 500 Series Chipset Family On-Package eSPI Controller (rev 20)
00:1f.3 Multimedia audio controller: Intel Corporation 500 Series Chipset Family On-Package High Definition Audio (HD Audio) (rev 20)
00:1f.4 SMBus: Intel Corporation 500 Series Chipset Family On-Package System Management Bus (SMBus) (rev 20)
00:1f.5 Serial bus controller: Intel Corporation 500 Series Chipset Family On-Package SPI (flash) Controller (rev 20)
39:00.0 Non-Volatile memory controller: Kingston Technology Company, Inc. NV2 NVMe SSD [SM2267XT] (DRAM-less) (rev 03)
3a:00.0 Non-Volatile memory controller: ADATA Technology Co., Ltd. IM2P33F3 NVMe SSD (DRAM-less) (rev 03) (sí findfs/blkid) ⇒ el dump de PCI
lee /sys/bus/pci/devices/*/ directo; sintaxis del init validada con busybox ash (no bash).

BUMP mirada: el pin era 9967b02c (18-jun) — 439 commits viejo. Ahora 9a17fefc, que incluye el fix de
portabilidad a musl que hice en tawasuyu (ioctl: glibc usa c_ulong, musl c_int ⇒ las constantes DRM
casteaban mal y mirada-compositor NO compilaba para musl). mirada-compositor ya selló (87ced528);
greeter/ctl en curso.

+ scripts/kde/{metal-desktop-image,plasma-start-metal}.sh del hilo KDE (imagen de escritorio en metal).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 16:20:55 -04:00

5.2 KiB

Handoff → agente tawasuyu (mesa/mirada/USB): correr mirada en el tester NVIDIA

De: agente hammer (frente Go/kernel). Fecha: 2026-06-29. Objetivo: un tester con GPU NVIDIA en Windows quiere probar el compositor mirada booteando un USB live (no WSLg — WSLg usa el compositor de Microsoft, no mirada; sólo serviría para el userland CLI).

Lo que YA entregué (kernel) — listo para usar

  • recipes/linux-generic.toml (Linux 7.1.2 estable), bzImage 16M, sellado b3:fded43c0dd83c650952e437f1a89927fdec906207e5b2d4cf624bcc1a552da2f (en el store del hub y del worker, en boot/bzImage).
  • Genérico (no clavado al TigerLake como linux-metal): i915 + radeon + nouveau built-in + simpledrm fallback, squashfs+overlay (live USB), storage/USB/input/EFI/VFAT/ISO9660 amplios, monolítico (sin módulos).
  • Da /dev/dri/cardN con KMS por nouveau → es lo que mirada necesita del kernel.
  • amdgpu (AMD moderno) excluido en v1 (ICE de gcc en 7.1; ver memoria etapa-metal-usb). radeon (AMD viejo) sí. Si algún tester futuro tiene AMD reciente → v2.

🔧 Tareas para vos (el kernel es necesario pero NO suficiente para NVIDIA)

  1. MESA con nouveau/NVK (lo bloqueante). La recipes/mesa.toml actual es iris-only (-Dgallium-drivers=iris, sin LLVM). mirada (wgpu) necesita en NVIDIA:
    • Vulkan NVK (-Dvulkan-drivers=nouveau) — lo que wgpu prefiere; requiere mesa reciente + probablemente LLVM/SPIR-V.
    • y/o gallium nouveau (-Dgallium-drivers=nouveau) para GL (o zink sobre NVK).
    • Hacé una variante recipes/mesa-nouveau.toml (no toques la iris-only, que es del escritorio TigerLake). Ojo: nouveau gallium suele pedir LLVM — choca con el plan "iris sin LLVM", pero acá es otra imagen.
  2. FIRMWARE nouveau en el rootfs /lib/firmware/:
    • Turing+ / RTX (20xx en adelante): GSP-RM en nvidia/<chip>/gsp/*.binimprescindible, sin él nouveau no hace modeset.
    • Pre-Turing: blobs ctxsw en nouveau/.
    • Pedile al tester el modelo exacto de GPU para elegir el <chip> correcto (y confirmar que nouveau lo soporta).
  3. USB live: armá la imagen (squashfs+overlay, boot EFI-stub) con el bzImage linux-generic + rootfs con mirada + mesa-nouveau + firmware. Base: scripts/metal-iso.sh / scripts/metal-usb-sdboot.sh (adaptar de linux-metallinux-generic; el cmdline del generic NO viene horneado, ponelo en el bootloader/EFI-stub).
  4. Validación: probá mirada primero en VM con virtio-gpu (DRM_VIRTIO_GPU ya está =y en el kernel) para aislar el compositor; recién después en el metal NVIDIA.

Cómo sacar el bzImage del store

hammer --store ./store hydrate b3:fded43c0… <destino> (o copialo de store/fded43c0…-linux-generic/boot/bzImage). Reconstruible: hammer build recipes/linux-generic.toml (deps flex/bison/m4/openssl/elfutils + zig-0.13, ya en el worker).

Dudas del kernel (drivers a agregar, cmdline, otra config) → pedímelas y reviso linux-generic.toml.

📥 Telemetría persistente en el propio pendrive (2026-07-14)

El problema: el rootfs de esta imagen es un initramfs = RAM pura. Los logs iban a /run (tmpfs): al apagar la máquina ajena no sobrevivía nada. Y la GPU a probar está lejos — un viaje sin datos es un viaje perdido.

La solución: la imagen ahora trae una 2da partición FAT32 MIRADALOG (512M, DATA_MB en scripts/metal-usb-sdboot.sh, que ganó soporte genérico de partición de datos). FAT32 a propósito: el pendrive se lee después desde cualquier SO (Windows/Mac/Linux) sin herramientas.

/sbin/init la monta por findfs LABEL=MIRADALOG con -o sync (cada escritura va al medio: un cuelgue duro de la GPU o un corte de luz no se lleva los logs) y vuelca todo en run-NNNN/ (numerada: cada arranque/reintento tiene su carpeta):

fichero qué trae
00-resumen.txt modo (hw/sw), cmdline, GPU+driver, DRM, si la telemetría persiste
01-hardware.txt uname, cpu, RAM, PCI vía sysfs (vendor/device/class/driver), módulos, /dev/dri, nouveau sysfs, input, firmware nvidia presente
02-pantallas.txt por conector: status/modes/enabled
03-dmesg-early.txt dmesg antes de mirada → si nouveau bindeó y si el firmware gp106 cargó
04-seatd.log seatd (DRM master / sesión)
05-mirada.log compositor + greeter, con RUST_LOG=wgpu_core=debug,wgpu_hal=debug + EGL_LOG_LEVEL=debug + LIBGL_DEBUG=verbosepor qué wgpu eligió el backend y si hay float16
06-dmesg-final.txt dmesg después + exit code → cuelgues/oops/reset de nouveau
07-estado-final.txt procesos, RAM, /dev/dri al final

GOTCHA: el busybox de Alpine no trae el applet lspci (sí findfs/blkid). El dump de PCI se hace leyendo /sys/bus/pci/devices/*/{vendor,device,class} + readlink driver — más soberano igual. vendor 0x10de = NVIDIA; class 0x0300* = VGA.

En la máquina ajena: arranca solo. Si el compositor termina/falla, cae a un shell de rescate con la telemetría ya sincronizada; relanzar reintenta y crea un run-NNNN nuevo. Se puede apagar sin ceremonia.

Al volver: montar la partición MIRADALOG y leer run-NNNN/.