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 1572Shell 203Rust 109Markdown 993728 Definitions

⎇ 534014c3ec69daea789a1d0523e1d00a69c6ed65 recipes/intel-ucode.toml TOML · 75 lines · 4.2 KB History raw

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

1# intel-ucode 20260812 — el microcódigo de la CPU. Va en el arranque, no en el userland.
2#
3# ══ POR QUÉ NO VIENE EN linux-firmware ═════════════════════════════════════════════════════════
4# El tarball de kernel.org trae `amd-ucode` pero **no el de Intel**: Intel lo publica por su cuenta
5# en `intel/Intel-Linux-Processor-Microcode-Data-Files`, con su propia licencia. Medido sobre
6# `linux-firmware-20260910.tar.xz` el 2026-09-16.
7#
8# ══ QUÉ CPU ═══════════════════════════════════════════════════════════════════════════════════
9# La laptop del usuario, leída de `/proc/cpuinfo`:
10#
11#     11th Gen Intel Core i7-11370H   family 6 · model 140 (0x8c) · stepping 1
12#     ⇒ le toca `intel-ucode/06-8c-01`   (microcódigo corriendo hoy: 0xbe)
13#
14# La receta instala el árbol ENTERO igual, no sólo ese fichero: el cargador elige por signature en
15# boot, y recortarlo ataría el artefacto a esta máquina exacta — que es justo lo que
16# `firmware-tigerlake` hace a propósito y esto no debe hacer. Son 17 MB comprimidos.
17#
18# ══ LOS DOS CAMINOS DE CARGA, Y POR QUÉ HACEN FALTA LOS DOS ════════════════════════════════════
19# · **Tardía** (`/lib/firmware/intel-ucode/<sig>`): el kernel la aplica con el sistema ya arriba.
20#   Sirve, pero llega después de que las mitigaciones de CPU se hayan decidido.
21# · **Temprana** (`kernel/x86/microcode/GenuineIntel.bin` dentro de un cpio SIN comprimir, al
22#   principio del initramfs): el kernel la lee antes de levantar los cores secundarios. Es la que
23#   de verdad importa, y es la que hay que enganchar en el armado de la imagen.
24#
25# Esta receta deja los dos: el árbol plano y el `GenuineIntel.bin` ya concatenado, listo para que
26# el armador de la imagen lo prependa. **No arma el cpio** — eso es trabajo de la imagen, no del
27# artefacto, y meterlo acá obligaría a esta receta a saber cómo se arma el initramfs.
28#
29# ⚠ **PUNTO DE PARTIDA, NO SELLADA.** Escrita desde el laptop, sin lab ni store.
30name    = "intel-ucode"
31version = "20260812"
32license = "LicenseRef-Intel-Software-License"   # license/LICENSE en el árbol; NO es libre
33
34[source]
35tarball = "https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files/archive/refs/tags/microcode-20260812.tar.gz"
36# sha256 del tarball bajado el 2026-09-16.
37sha256  = "7614616d7b2988c278060486f47de716ef44c19317928cb45ac9e288fafd5bd1"
38
39[build]
40compiler = "zig-cc"
41target   = "x86_64-linux-musl"
42link     = "static"
43strip_debug = false
44flags    = []
45
46[build.phases]
47configure = "echo 'intel-ucode: nada que configurar'"
48compile   = "echo 'intel-ucode: nada que compilar'"
49install = '''
50set -e
51[ -d intel-ucode ] || { echo "intel-ucode: no está el dir intel-ucode/ — ¿cambió el layout del release?" >&2; exit 1; }
52
53mkdir -p /out/lib/firmware/intel-ucode
54cp intel-ucode/* /out/lib/firmware/intel-ucode/
55
56# Aserción ruidosa: el árbol tiene ~130 signatures. Si llegan cuatro, algo se cortó.
57n=$(find /out/lib/firmware/intel-ucode -type f | wc -l)
58[ "$n" -gt 50 ] || { echo "intel-ucode: sólo $n signatures — el árbol llegó incompleto" >&2; exit 1; }
59
60# La signature de la laptop del usuario. No se recorta el árbol por ella, pero SÍ se comprueba que
61# está: si un release futuro la dejara caer, el metal quedaría sin microcódigo en silencio.
62[ -f /out/lib/firmware/intel-ucode/06-8c-01 ] || {
63  echo "intel-ucode: falta 06-8c-01 (TigerLake i7-11370H) — el metal del usuario se queda sin ucode" >&2; exit 1; }
64
65# Blob para carga TEMPRANA: todas las signatures concatenadas, que es exactamente el formato que el
66# cargador del kernel espera en kernel/x86/microcode/GenuineIntel.bin.
67mkdir -p /out/usr/share/intel-ucode
68cat intel-ucode/* > /out/usr/share/intel-ucode/GenuineIntel.bin
69[ -s /out/usr/share/intel-ucode/GenuineIntel.bin ] || { echo "intel-ucode: GenuineIntel.bin salió vacío" >&2; exit 1; }
70
71echo "intel-ucode: $n signatures + GenuineIntel.bin ($(wc -c < /out/usr/share/intel-ucode/GenuineIntel.bin) B)"
72'''
73
74[deps]
75build = []