645 líneas. Los ADR entran porque en este repo SON documentos vivos, no registros inmutables: el 0013 tiene 5 commits, el 0009 dos. Eso se comprobó antes de decidir, no se asumió por convención general. EXCLUIDOS por ser REGISTRO o generado: docs/evidencia/ (6), el HANDOFF de la noche de KDE (1) y docs/state/ (24, se regenera solo). Reescribir un comando dentro de una evidencia la falsifica. Y el ADR 0016 se excluye de todo barrido, con un aviso adentro para el próximo que barra: habla SOBRE el renombre, así que necesita seguir diciendo 'hammer'. El barrido se lo llevó puesto y lo dejó titulado 'Renombre del sistema: takana → takana'; revertido. Congelados, verificados uno por uno con controles: /opt/hammer, /var/lib/hammer, /usr/bin/hammer, /mnt/vvv/hammer, la URL de gitea, hammer-farm.service, hammer-live-install.sh, BRIEFING-hammer.md, hammerd, hammer-recover y HAMMER_LIVE.
95 lines
5.7 KiB
Markdown
95 lines
5.7 KiB
Markdown
# 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
|
|
|
|
```sh
|
|
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 takana-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.
|
|
|
|
## 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
|
|
|
|
```sh
|
|
# 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
|
|
```
|