# ── RECETA DE MEDICIÓN, NO DE CATÁLOGO ──────────────────────────────────────────────────────── # Copia de `recipes/linux-generic.toml` cuyo ÚNICO propósito es ponerle número a SDD 25 §7-H7: qué # cuesta en bytes de bzImage encender `DEBUG_INFO_BTF`. Vive en `work/` —fuera de `recipes/`— para # no entrar al grafo compartido como deuda, y el catálogo se le presta por symlinks en el mismo # directorio (`hammer build` no tiene `--base-dir`; sólo el fallback al catálogo padre). # # POR QUÉ SOBRE linux-generic Y NO SOBRE linux (que es más barato de construir): BTF tiene # `depends on BPF_SYSCALL`, y el `.config` sellado de `linux` lo trae APAGADO. Medir ahí obligaría a # encender BPF_SYSCALL a la vez, y el delta mezclaría dos cosas. `linux-generic` ya lo trae ⇒ la # única diferencia con el artefacto sellado son las líneas de DWARF/BTF, y el delta es limpio. # # BASELINE contra el que se compara: el bzImage del `linux-generic` VIGENTE, 16 937 984 bytes # (store/23f1cc43…-linux-generic/boot/bzImage), que es el mismo número que cita §7-H1. # # `-j2` en vez de `$(nproc)`: con `-g` cada gcc pesa más y momento tiene ~4 G disponibles. El # paralelismo NO cambia los bytes del bzImage, que es lo único que se mide acá; capar `-j` en una # receta de catálogo sería otra cosa (re-hashea), pero esta receta no es de catálogo. name = "linux-generic-btf" version = "7.1.2" license = "GPL-2.0-only WITH Linux-syscall-note" [source] tarball = "https://mirrors.edge.kernel.org/pub/linux/kernel/v7.x/linux-7.1.2.tar.gz" sha256 = "b43e0a2db2a89fc5a88f54417ea13a3f05fbb17fdaf53015ce16525750a2db83" [build] compiler = "zig-cc" target = "x86_64-linux-musl" link = "dynamic" [deps] # `python3`: DESCUBIERTO construyendo (2026-08-31). Encender BTF hace que kbuild descienda a # `tools/bpf/resolve_btfids`, que compila un libbpf VENDORIZADO, y su Makefile genera # `bpf_helper_defs.h` con un script de Python ⇒ `env: 'python3': No such file or directory`, # Error 127. No sale en ninguna documentación de BTF: sale construyendo. build = ["flex", "bison", "m4", "openssl", "elfutils", "make", "dwarves", "python3"] # SDD 25 §7-H1: `-e MEMCG -e PSI`. Sin MEMCG el fichero `memory.max` NO EXISTE y # `arje-incarnate::cgroup` sólo emite un `warn!` ⇒ la Card corre SIN tope de memoria. Va en la # fase configure porque el .config ES la identidad del artefacto (SDD 22 §1): esto re-hashea el # kernel a propósito. Comprobable con `hammer kernel contract` sobre el config YA PRODUCIDO. [build.phases] configure = """ make ARCH=x86_64 defconfig && \ scripts/config -d MODULE_SIG -d MODULE_SIG_ALL -d MODULES \ -e DEBUG_KERNEL -e DEBUG_INFO_DWARF5 -d DEBUG_INFO_REDUCED -d DEBUG_INFO_SPLIT \ -e DEBUG_INFO_BTF \ -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 MEMCG -e PSI -d PSI_DEFAULT_DISABLED \ -e VIRTIO -e VIRTIO_PCI -e VIRTIO_BLK -e VIRTIO_NET -e DRM_VIRTIO_GPU \ -e PCI -e PCIEPORTBUS -e ACPI -e FW_LOADER \ -e EXT4_FS -e SQUASHFS -e SQUASHFS_XZ -e SQUASHFS_ZSTD -e SQUASHFS_LZ4 \ -e SATA_AHCI -e ATA -e ATA_PIIX -e SCSI -e BLK_DEV_SD -e BLK_DEV_SR -e BLK_DEV_LOOP \ -e NVME_CORE -e BLK_DEV_NVME \ -e MMC -e MMC_BLOCK -e MMC_SDHCI -e MMC_SDHCI_PCI -e MMC_SDHCI_ACPI \ -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 HID_MULTITOUCH -e INPUT_EVDEV \ -e INPUT_KEYBOARD -e KEYBOARD_ATKBD -e INPUT_MOUSE -e MOUSE_PS2 -e INPUT_TOUCHPAD \ -e SERIO -e SERIO_I8042 -e VT -e VT_CONSOLE \ -e DRM -e DRM_SIMPLEDRM -e SYSFB_SIMPLEFB -e FB -e FB_EFI -e FB_VESA \ -e DRM_I915 -e DRM_RADEON -e DRM_NOUVEAU -d DRM_AMDGPU -d DRM_AMD_DC -d HSA_AMD \ -e DRM_FBDEV_EMULATION -e FRAMEBUFFER_CONSOLE -e FRAMEBUFFER_CONSOLE_DETECT_PRIMARY \ -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 DEVTMPFS \ -e WLAN -e WIRELESS -e CFG80211 -e MAC80211 -e RFKILL \ -e WLAN_VENDOR_INTEL -e IWLWIFI -e IWLMVM -e IWLDVM \ -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 SOUND -d SND -d MEDIA_SUPPORT -d INFINIBAND -d BT -d NFC -d CAN \ -d WATCHDOG -d USB4 -d FIREWIRE -d DEBUG_WX \ -d XFS_FS -d BTRFS_FS -d F2FS_FS -d JFS_FS -d GFS2_FS -d NTFS3_FS && \ scripts/config --set-str CMDLINE "console=tty0 console=ttyS0,115200 ignore_loglevel" && \ make ARCH=x86_64 olddefconfig && \ pahole --version && \ { grep -q '^CONFIG_DEBUG_INFO_BTF=y' .config || { echo "FATAL: DEBUG_INFO_BTF no quedo en el .config PRODUCIDO — pahole ausente durante configure?"; grep -E 'BTF|PAHOLE|DEBUG_INFO' .config; exit 1; }; } && \ echo "OK: CONFIG_DEBUG_INFO_BTF=y en el .config producido" """ # amdgpu (AMD moderno) NO compila en 7.1 con el gcc del gueto (ICE sin mensaje en amdgpu_userq_fence.c) # y syncconfig lo re-activaba pese a -d en kconfig (default-y de DRM_AMD_DC + un select que no aparece). # SLEDGEHAMMER GARANTIZADO: borro las líneas `obj-$(CONFIG_DRM_AMDGPU)+= amd/...` del Makefile del drm # ⇒ amd/{amdgpu,amdxcp,display} nunca se descienden, sin importar kconfig. amdgpu es self-contained # (nada del core lo referencia) ⇒ excluirlo es seguro. radeon (AMD viejo) + i915 + nouveau quedan. compile = "sed -i '/CONFIG_DRM_AMDGPU)+= amd/d' drivers/gpu/drm/Makefile && make ARCH=x86_64 CC=gcc HOSTCC=gcc -j2 bzImage" install = """ mkdir -p /out/boot /out/medicion && \ cp arch/x86/boot/bzImage /out/boot/bzImage && \ cp .config /out/boot/config-7.1.2-generic-btf && \ stat -c 'vmlinux %s bytes' vmlinux > /out/medicion/tamanos.txt && \ stat -c 'bzImage %s bytes' arch/x86/boot/bzImage >> /out/medicion/tamanos.txt && \ { readelf -SW vmlinux | grep -E 'BTF|debug_info' >> /out/medicion/tamanos.txt || echo '(readelf no disponible)' >> /out/medicion/tamanos.txt; } && \ { objcopy --dump-section .BTF=/out/medicion/vmlinux.BTF vmlinux && stat -c '.BTF %s bytes' /out/medicion/vmlinux.BTF >> /out/medicion/tamanos.txt; } || echo '(objcopy fallo)' >> /out/medicion/tamanos.txt """