Tercera tanda curada, agrupada por la URL DE FUENTE de cada receta (que es la evidencia que el nombre no da): los once módulos Qt sin prefijo, freedesktop (dbus, libinput, libevdev, libdisplay-info, poppler, pulseaudio, upower, NetworkManager, ModemManager, polkit), kernel.org (los tres kernels, linux-headers, git, iproute2, libuuid) y PyPI. Los kernels llevan `GPL-2.0-only WITH Linux-syscall-note` explícita. No es adorno: sin esa excepción, todo binario de espacio de usuario que hace un syscall sería obra derivada del kernel. Es exactamente el tipo de dato que un campo de licencia existe para no perder. Quedan 147 sin declarar: 69 de GitHub donde la propia API dice NOASSERTION (hay que abrir el fuente), 20 de tawasuyu —que son nuestras o del otro agente, así que la licencia la decide el usuario, no yo— y el resto repartido en GNOME, gitlab.freedesktop y sueltos. Más 71 con SPDX ambiguo pendientes de desambiguar (`licencias.sh --revisar`). Hashes verificados otra vez sobre 20 recetas tocadas: 20 idénticos, 0 cambiados. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
150 lines
10 KiB
TOML
150 lines
10 KiB
TOML
# Linux kernel 6.16.12 — VARIANTE "METAL": booteable en hardware real (no sólo QEMU).
|
|
#
|
|
# Hermana de recipes/linux.toml (el kernel QEMU-tuned del selfhost-verify, INTOCADO: su of_tree es
|
|
# load-bearing para la reproducibilidad bit-a-bit). Esta variante NO recorta el hardware; al revés, lo
|
|
# habilita built-in (=y) porque el producto hammer es monolítico (arje-zero PID1, sin udev/modprobe en
|
|
# el camino de boot ⇒ todo lo que haga falta para arrancar/ver/teclear/conectar debe ser =y, no =m).
|
|
#
|
|
# SUSTRATO kikin/harkaq (PLAN-KIKIN §4.bis + HANDOFF-KIKIN-DESDE-HAMMER, 2026-07-16): SECURITY_LANDLOCK
|
|
# +AUDIT (la jaula del anfitrión kikin J4b / harkaq), IO_URING (kikin J4 se diseña sobre él) y
|
|
# BPF_SYSCALL (horizonte observabilidad) van EXPLÍCITOS: «al azar del defconfig» no es un contrato.
|
|
#
|
|
# AUDIO: ALSA ENCENDIDO (2026-07-29, decisión del usuario tras elegir PipeWire como servidor).
|
|
# Estaba `-d SOUND -d SND` — apagado a propósito cuando el escritorio no existía todavía. El precio
|
|
# se cobró al cerrar wireplumber: `wpctl status` daba `Devices:` VACÍO con un único sink `auto_null`,
|
|
# y **no era un fallo del stack de audio sino la ausencia de /dev/snd**. Se comprobó dándole a QEMU
|
|
# una `ich9-intel-hda` emulada: con tarjeta y sin ALSA en el kernel, el resultado no cambiaba.
|
|
#
|
|
# Todo =y y no =m, por la razón de siempre en esta receta: el producto es monolítico, sin
|
|
# udev/modprobe en el camino. Tres frentes, y ninguno es opcional para el target real:
|
|
# · HDA legacy (SND_HDA_INTEL + codecs Realtek/HDMI/generic) — es lo que emula QEMU
|
|
# (`ich9-intel-hda`) y lo que usan las máquinas pre-SOF. Con esto solo, la VM ya tiene qué
|
|
# enumerar.
|
|
# · SOF para TigerLake (SND_SOC_SOF_TIGERLAKE + HDA_AUDIO_CODEC/HDA_LINK) — el laptop del target
|
|
# concreto NO suena por la ruta legacy: Intel movió el audio de TGL al DSP, y sin el firmware SOF
|
|
# cargado no hay salida. Es el mismo patrón que i915 con su DMC/GuC.
|
|
# · SND_USB_AUDIO — auriculares y micrófonos USB, que es como la mayoría de la gente escucha.
|
|
# `SND_DYNAMIC_MINORS` porque con varias tarjetas (HDA + HDMI + USB) los minors fijos se agotan.
|
|
#
|
|
# El FIRMWARE de SOF ya lo inyecta `metal-firmware.sh` (2026-07-30): `sof-tgl.ri` + `sof-tgl-h.ri`
|
|
# (los dos, porque el driver elige por SKU) + `sof-tgl.ldc` (el diccionario de logs: sin él el DSP
|
|
# arranca sin traza) + 47 topologías `sof-hda-generic-*`/`sof-tgl-*`, ~3 MB. Mismo patrón que i915 con
|
|
# su DMC/GuC: driver de fuente, firmware pineado por contenido. En QEMU no se ejerce — ahí manda la
|
|
# ruta HDA legacy— así que el camino SOF **queda sin validar hasta el próximo viaje al metal**.
|
|
#
|
|
# PERFIL ESCRITORIO/JUEGO (plan-jaula-juegos T1 + joyas-reusables #1/#4, 2026-07-16):
|
|
# - NTSYNC: primitivas de sincronización NT en kernel (wine/proton moderno, reemplaza esync/fsync).
|
|
# Sin deps de Kconfig (verificado drivers/misc/Kconfig del tag); tristate ⇒ =y con MODULES=off.
|
|
# - PREEMPT full + HZ_1000: latencia de escritorio. El defconfig ya trae HZ_1000 pero VOLUNTARY de
|
|
# preempt; ambos van explícitos — mismo argumento kikin, el perfil es contrato, no azar.
|
|
# - LRU_GEN(+ENABLED): MGLRU, responsividad bajo presión de memoria (probado ChromeOS/Android).
|
|
# - ZRAM+ZSMALLOC: swap comprimido; el perfil de arje lo activa en runtime, el kernel sólo lo trae.
|
|
# - EROFS_FS+FS_VERITY: sustrato composefs (joyas #1 / cierre §5) — hidratación montada con verity.
|
|
# - CMDLINE += split_lock_detect=off: juegos con locks mal alineados sufren el castigo del detector.
|
|
# sched-ext queda DIFERIDO: en 6.16.12 SCHED_CLASS_EXT depende de DEBUG_INFO_BTF (verificado en
|
|
# kernel/Kconfig.preempt del tag), que esta receta apaga a propósito, y BTF exigiría pahole/dwarves
|
|
# en las deps ⇒ tarea propia con su propio análisis de repro, no viaja de polizón en este re-sellado.
|
|
#
|
|
# Target concreto: laptop TigerLake-LP (Intel Iris Xe + Wi-Fi 6 AX201 [8086:a0f0]), boot EFI.
|
|
# - Pantalla: DRM_I915 (driver Intel real — el panel TigerLake se APAGA tras ExitBootServices sin él;
|
|
# efifb/simpledrm escriben a un fb muerto → pantalla negra en metal, validado 2026-06-23)
|
|
# + DRM_FBDEV_EMULATION (fbcon sobre i915) + DRM_SIMPLEDRM/FB_EFI (puente hasta que i915
|
|
# toma el control). Firmware i915 (DMC/GuC/HuC tgl_*) lo inyecta metal-firmware.sh.
|
|
# amdgpu/nouveau/radeon quedan OFF.
|
|
# - Teclado: USB_HID + HID_GENERIC + i8042/atkbd (teclado integrado del portátil suele ser PS/2).
|
|
# - Discos: AHCI/ATA + NVMe + USB_STORAGE + SCSI/sd (NVMe es lo más probable en TigerLake).
|
|
# - WiFi: cfg80211 + mac80211 + iwlwifi + iwlmvm (AX201 usa el path mvm). El firmware
|
|
# (iwlwifi-QuZ-a0-hr-b0-*.ucode, cc-a0-*) + regulatory.db NO van acá — son blobs no
|
|
# compilables; se inyectan en /lib/firmware del rootfs (ver scripts/metal-firmware.sh).
|
|
# - Red extra: e1000e/r8169/igb/igc/tg3 (Ethernet común) + USB-CDC/RNDIS (tether del celu) — baratos.
|
|
# - Boot: EFI_STUB + EFI_PARTITION + VFAT (ESP) + ISO9660/Joliet (leer el medio live).
|
|
# CMDLINE EMBEBIDO (CONFIG_CMDLINE_BOOL, sin FORCE): el bzImage se arranca por EFI-STUB
|
|
# DIRECTO como \EFI\BOOT\BOOTX64.EFI (la firmware lo lanza sin GRUB — esquiva el bug de
|
|
# GRUB 2.14 que cuelga la rama UEFI). Sin bootloader no hay LoadOptions, así que el cmdline
|
|
# va horneado: console=tty0 (pantalla) + initrd=/initramfs.cpio.gz (el EFI-stub lo carga de
|
|
# la ESP; file.c convierte '/'→'\'). En boot BIOS, GRUB provee su propio cmdline (se
|
|
# antepone el embebido, inocuo) y su propio initrd ⇒ ambas ramas conviven.
|
|
# - Cero-parpadeo (ADR 0010 paso 4): FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER=y (fbcon NO toca el
|
|
# framebuffer hasta el primer output ⇒ pantalla negra desde la firmware hasta que mirada
|
|
# abre el DRM master) + cmdline `quiet loglevel=3 vt.global_cursor_default=0` (sin texto de
|
|
# boot ni cursor). Se quitó el `earlyprintk=efi,keep ignore_loglevel` de bringup (forzaba
|
|
# salida sobre el FB gráfico, rompía el deferred-takeover). CONFIG_LOGO ya estaba off.
|
|
# ORDEN DE CONSOLA: ttyS0 va ÚLTIMO ⇒ /dev/console = serie ⇒ la shell/getty de arje-zero
|
|
# sale por el serial, NO por tty0 (pantalla) — si tty0 fuera /dev/console, arje pintaría el
|
|
# prompt sobre el FB gráfico y rompería el cero-parpadeo. tty0 queda registrado pero mudo.
|
|
# Diagnosticado por captura de framebuffer en OVMF-GOP (2026-07-10).
|
|
#
|
|
# Conserva TODO lo que hammer necesita (de linux.toml): E1000/OVERLAY_FS(+subfeatures)/USER_NS/
|
|
# NAMESPACES/FANOTIFY/VIRTIO* ⇒ esta misma imagen sigue booteando en QEMU (para poder testear el boot
|
|
# antes de quemar el USB). MODULES=off ⇒ monolítico puro (sin .ko que nadie cargaría).
|
|
#
|
|
# Compilador: CC=gcc/HOSTCC=gcc — MISMA decisión del gueto-GCC que linux.toml (zig cc choca con el
|
|
# kbuild x86). Build ~45min (config ancha). Build-deps idénticos (flex/bison/m4/openssl/elfutils +
|
|
# bootstrap-libs apk del bootstrap-devfs.sh).
|
|
|
|
name = "linux-metal"
|
|
version = "6.16.12"
|
|
license = "GPL-2.0-only WITH Linux-syscall-note"
|
|
|
|
[source]
|
|
tarball = "https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-6.16.12.tar.gz"
|
|
sha256 = "ffc6af80b014ddebd55e116aa29a9f7a5256c87a29a8a9dd97270b6d49625109"
|
|
|
|
[build]
|
|
compiler = "zig-cc"
|
|
target = "x86_64-linux-musl"
|
|
link = "dynamic"
|
|
|
|
[deps]
|
|
build = ["flex", "bison", "m4", "openssl", "elfutils", "make"]
|
|
|
|
[build.phases]
|
|
configure = """
|
|
make ARCH=x86_64 defconfig && \
|
|
scripts/config -d MODULE_SIG -d MODULE_SIG_ALL -d DEBUG_INFO_BTF -d DEBUG_INFO -d MODULES \
|
|
-d UNWINDER_ORC -e UNWINDER_FRAME_POINTER \
|
|
-e BLK_DEV_INITRD -e DEVTMPFS -e DEVTMPFS_MOUNT -e TMPFS \
|
|
-e OVERLAY_FS -e USER_NS -e NAMESPACES \
|
|
-e FANOTIFY -e FANOTIFY_ACCESS_PERMISSIONS \
|
|
-e OVERLAY_FS_REDIRECT_DIR -e OVERLAY_FS_INDEX -e OVERLAY_FS_XINO_AUTO -e OVERLAY_FS_METACOPY \
|
|
-e SECURITY -e SECURITY_LANDLOCK -e AUDIT -e IO_URING -e BPF_SYSCALL \
|
|
-e NTSYNC -d PREEMPT_VOLUNTARY -e PREEMPT -e HZ_1000 -e LRU_GEN -e LRU_GEN_ENABLED \
|
|
-e ZRAM -e ZSMALLOC -e EROFS_FS -e FS_VERITY \
|
|
-e VIRTIO -e VIRTIO_PCI -e VIRTIO_BLK -e VIRTIO_NET -e EXT4_FS \
|
|
-e PCI -e PCIEPORTBUS -e ACPI \
|
|
-e SATA_AHCI -e ATA -e ATA_PIIX -e SCSI -e BLK_DEV_SD -e BLK_DEV_LOOP \
|
|
-e NVME_CORE -e BLK_DEV_NVME \
|
|
-e USB_SUPPORT -e USB -e USB_PCI -e USB_XHCI_HCD -e USB_XHCI_PCI \
|
|
-e USB_EHCI_HCD -e USB_EHCI_PCI -e USB_OHCI_HCD -e USB_UHCI_HCD -e USB_STORAGE \
|
|
-e HID -e HID_GENERIC -e USB_HID -e INPUT_EVDEV \
|
|
-e INPUT_KEYBOARD -e KEYBOARD_ATKBD -e INPUT_MOUSE -e MOUSE_PS2 \
|
|
-e SERIO -e SERIO_I8042 -e VT -e VT_CONSOLE \
|
|
-e DRM -e DRM_SIMPLEDRM -e SYSFB_SIMPLEFB -e FB -e FB_EFI \
|
|
-e DRM_I915 -e DRM_FBDEV_EMULATION \
|
|
-e FRAMEBUFFER_CONSOLE -e FRAMEBUFFER_CONSOLE_DETECT_PRIMARY \
|
|
-e FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER \
|
|
-e EFI -e EFI_STUB -e EFI_PARTITION -e EFIVAR_FS -e CMDLINE_BOOL \
|
|
-e VFAT_FS -e FAT_FS -e MSDOS_FS -e NLS_CODEPAGE_437 -e NLS_ISO8859_1 -e NLS_UTF8 \
|
|
-e ISO9660_FS -e JOLIET \
|
|
-e WLAN -e WIRELESS -e CFG80211 -e MAC80211 -e RFKILL \
|
|
-e WLAN_VENDOR_INTEL -e IWLWIFI -e IWLMVM \
|
|
-e ETHERNET -e NET_VENDOR_INTEL -e E1000 -e E1000E -e IGB -e IGC \
|
|
-e NET_VENDOR_REALTEK -e R8169 -e NET_VENDOR_BROADCOM -e TG3 \
|
|
-e USB_NET_DRIVERS -e USB_USBNET -e USB_NET_CDCETHER -e USB_NET_CDC_NCM -e USB_NET_RNDIS_HOST \
|
|
-d DRM_AMDGPU -d DRM_NOUVEAU -d DRM_RADEON -d AGP \
|
|
-e SOUND -e SND -e SND_PCM -e SND_TIMER -e SND_HRTIMER -e SND_DYNAMIC_MINORS \
|
|
-e SND_PCI -e SND_HDA -e SND_HDA_INTEL -e SND_HDA_GENERIC -e SND_HDA_PATCH_LOADER \
|
|
-e SND_HDA_CODEC_REALTEK -e SND_HDA_CODEC_HDMI -e SND_HDA_CODEC_GENERIC \
|
|
-e SND_INTEL_DSP_CONFIG -e SND_SOC -e SND_SOC_INTEL_SOF_PCI_DEV \
|
|
-e SND_SOC_SOF_TOPLEVEL -e SND_SOC_SOF_PCI -e SND_SOC_SOF_INTEL_TOPLEVEL \
|
|
-e SND_SOC_SOF_TIGERLAKE -e SND_SOC_SOF_HDA_AUDIO_CODEC -e SND_SOC_SOF_HDA_LINK \
|
|
-e SND_USB -e SND_USB_AUDIO \
|
|
-d MEDIA_SUPPORT -d INFINIBAND -d BT -d NFC -d CAN \
|
|
-d WATCHDOG -d THUNDERBOLT -d FIREWIRE -d DEBUG_WX \
|
|
-d XFS_FS -d BTRFS_FS -d F2FS_FS -d JFS_FS -d REISERFS_FS -d GFS2_FS -d NTFS3_FS && \
|
|
scripts/config --set-str CMDLINE "console=tty0 console=ttyS0,115200 quiet loglevel=3 vt.global_cursor_default=0 efi=novamap split_lock_detect=off initrd=/initramfs.cpio.gz rdinit=/init" && \
|
|
make ARCH=x86_64 olddefconfig
|
|
"""
|
|
compile = "make ARCH=x86_64 CC=gcc HOSTCC=gcc -j\"$(nproc)\" bzImage"
|
|
install = "mkdir -p /out/boot && cp arch/x86/boot/bzImage /out/boot/bzImage && cp .config /out/boot/config-6.16.12-metal"
|