gioser

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 1411Shell 141Markdown 85Rust 842928 Sutichaykuna

⎇ 3786b4de9f64ef894661d9dde2ebca6d9dc4a299 recipes/sof-firmware.toml TOML · 97 siq'ikuna · 5.3 KB Ñawpa willay ch'uya

busybox sale de las 24 build-deps: ya no viaja en NINGUNA imagen b53d91edf · Sergio ·

1# sof-firmware 2025.12.2 — el DSP de audio de Intel. NO viene en linux-firmware, y eso se midió.
2#
3# ══ POR QUÉ ES UNA RECETA APARTE ═══════════════════════════════════════════════════════════════
4# Al escribir `firmware-tigerlake` se anotó como duda si `intel/sof*` venía dentro de
5# `linux-firmware`. Se midió sobre el tarball real (`linux-firmware-20260910.tar.xz`, 2026-09-16):
6#
7#     entradas del tarball ......... 5323
8#     coincidencias con intel/sof ..    0
9#     i915/tgl ..................... 15   ✓
10#     iwlwifi ...................... 201  ✓
11#
12# ⇒ **no viene.** Intel publica el SOF por su cuenta, en `thesofproject/sof-bin`. Sin esta receta
13# una imagen de takana en el metal del usuario arranca muda: `snd_sof_pci_intel_tgl` carga, pide
14# `intel/sof/sof-tgl.ri`, no lo encuentra y el DSP no levanta. Es un fallo que no se ve en QEMU,
15# donde el audio es virtio — por eso no apareció en ninguno de los tres escritorios ya cerrados.
16#
17# ══ TIGERLAKE VA POR IPC3, NO POR IPC4 — Y LA INTUICIÓN ES LA CONTRARIA ════════════════════════
18# IPC4 es el camino nuevo y el default en las plataformas recientes, así que lo esperable sería
19# tomar la serie más alta (`v2.14.x`). Medido sobre el tarball de sof-bin: **`sof-ipc4-v2.14.1` no
20# contiene NINGÚN fichero `tgl`**. El firmware de TigerLake sólo existe en la rama IPC3, y el más
21# nuevo que lo trae es `v2.2.x/sof-v2.2/sof-tgl.ri`. Las topologías van con él: `sof-tplg-v2.2`.
22#
23#     tar -tzf sof-bin.tar.gz | grep "sof-ipc4-v2.14.1" | grep -i tgl     ⇒ vacío
24#     tar -tzf sof-bin.tar.gz | grep -E "/sof-v[0-9.]+/sof-tgl\.ri$"      ⇒ v2.1.1, v2.2
25#
26# Si algún día se sube de serie, esto se re-mide: tomar «la más alta» es exactamente el error que
27# esta nota existe para evitar.
28#
29# ══ intel-signed VS community ══════════════════════════════════════════════════════════════════
30# El árbol trae las dos firmas del mismo binario. Se instala **intel-signed**, que es el que la
31# Artix del usuario tiene enlazado hoy (`sof-tgl.ri → intel-signed/sof-tgl.ri`) y el único que el
32# DSP acepta con secure boot del audio activo. `community` es para DSP desbloqueados.
33#
34# ⚠ **PUNTO DE PARTIDA, NO SELLADA.** Escrita desde el laptop, sin lab ni store. Primer build en el
35# worker.
36name    = "sof-firmware"
37version = "2025.12.2"
38license = "BSD-3-Clause"       # LICENCE.Intel en la raíz del árbol
39
40[source]
41tarball = "https://github.com/thesofproject/sof-bin/archive/refs/tags/v2025.12.2.tar.gz"
42# sha256 del tarball bajado el 2026-09-16.
43sha256  = "a5fb05464273a2963a35950be72e094c0ed89318a44b3c62cb0c93393436ae3c"
44
45[build]
46compiler = "zig-cc"
47target   = "x86_64-linux-musl"
48link     = "static"
49strip_debug = false            # blobs firmados: tocarlos invalida la firma
50flags    = []
51
52[build.phases]
53configure = "echo 'sof-firmware: nada que configurar — son blobs firmados'"
54compile   = "echo 'sof-firmware: nada que compilar — son blobs firmados'"
55# NO se usa el `install.sh` del árbol: hace rsync a `/lib/firmware` del sistema vivo y decide la
56# serie por variables de entorno. Acá la serie es una DECISIÓN de la receta y entra en el hash.
57install = '''
58set -e
59FW=v2.2.x/sof-v2.2
60TPLG=v2.2.x/sof-tplg-v2.2
61DST=/out/lib/firmware/intel
62
63[ -d "$FW" ]   || { echo "sof-firmware: no está $FW — ¿cambió el layout de sof-bin?" >&2; exit 1; }
64[ -d "$TPLG" ] || { echo "sof-firmware: no está $TPLG" >&2; exit 1; }
65
66mkdir -p "$DST/sof/intel-signed" "$DST/sof-tplg"
67
68# ── firmware del DSP ─────────────────────────────────────────────────────────────────────────
69# Sólo las variantes de TigerLake: `sof-tgl.ri` (LP, que es esta laptop) y `sof-tgl-h.ri` (H).
70# El árbol entero son ~80 MB de plataformas que este metal no tiene.
71n=0
72for v in sof-tgl.ri sof-tgl-h.ri; do
73  if [ -f "$FW/intel-signed/$v" ]; then
74    cp "$FW/intel-signed/$v" "$DST/sof/intel-signed/$v"
75    # El driver pide `intel/sof/sof-tgl.ri` a secas; el symlink es el que usa la distro de origen.
76    ln -sf "intel-signed/$v" "$DST/sof/$v"
77    n=$((n+1))
78  fi
79done
80[ "$n" -gt 0 ] || { echo "sof-firmware: 0 blobs de tgl en $FW/intel-signed" >&2; exit 1; }
81
82# ── topologías ───────────────────────────────────────────────────────────────────────────────
83# `sof-hda-generic-*.tplg` es lo que monta el HD Audio on-package del 500 Series. Cuál de las
84# variantes (1ch/2ch/4ch, con o sin kwd) elige el driver depende del códec detectado en boot, así
85# que van todas las genéricas: son unos pocos KB cada una y elegir a mano sería adivinar.
86t=0
87for f in "$TPLG"/sof-hda-generic*.tplg; do
88  [ -f "$f" ] || continue
89  cp "$f" "$DST/sof-tplg/" && t=$((t+1))
90done
91[ "$t" -gt 0 ] || { echo "sof-firmware: 0 topologías hda-generic en $TPLG" >&2; exit 1; }
92
93echo "sof-firmware: $n firmware + $t topologías (serie IPC3 v2.2, TigerLake)"
94'''
95
96[deps]
97build = []