|
| 1 | +# WARNING: This system remains perpetually vulnerable to Spectre v2 (CVE-2017-5715). |
| 2 | +# Mitigations and microcode updates previously applied are now known to be ineffective |
| 3 | +# due to QSB-107 and related CVEs. If Spectre v2 is a concern in your threat model, |
| 4 | +# consider migrating to a platform with ongoing microcode support. Proper OPSEC for |
| 5 | +# Memory Use MUST be followed: |
| 6 | +# https://www.anarsec.guide/posts/qubes/#appendix-opsec-for-memory-use |
| 7 | +# |
| 8 | +# Configuration for a Dell OptiPlex 9020 SFF running Qubes OS and other |
| 9 | +# Linux-based OSes through kexec. |
| 10 | +# |
| 11 | +# Hardware specifications: |
| 12 | +# - CPU: LGA 1150, Intel Haswell (4th Gen) -- Celeron/Pentium/Core i3/i5/i7, |
| 13 | +# up to Core i7-4790 (4C/8T, 3.6 GHz base / 4.0 GHz boost) |
| 14 | +# - Chipset: Intel Q87 Express (Lynx Point) |
| 15 | +# - RAM: 2x DDR3-1600 UDIMM, up to 16 GB per slot (32 GB max), dual-channel |
| 16 | +# - Storage: 2x SATA 6 Gb/s; NVMe via PCIe adapter in x16 slot |
| 17 | +# - PCIe: 1x PCIe 3.0 x16, 1x PCIe 3.0 x1 (half-height SFF brackets) |
| 18 | +# - Video: 1x VGA + 1x DisplayPort 1.2 (Intel HD Graphics 4600, Haswell GT2) |
| 19 | +# - Ethernet: Intel I217-LM Gigabit |
| 20 | +# - Audio: Realtek ALC3221 HD Audio |
| 21 | +# - TPM: Infineon TPM 1.2 (soldered, supports measured boot) |
| 22 | +# - Form factor: Small Form Factor (SFF) |
| 23 | +# |
| 24 | +# Platform notes (vs. the t440p reference, which is also Haswell + Lynx Point): |
| 25 | +# - Northbridge/southbridge/CPU/ME: identical to t440p |
| 26 | +# - Embedded Controller: SMSC SCH555x (Dell) instead of Lenovo H8/EC |
| 27 | +# - Super I/O handled by the same sch555x driver |
| 28 | +# - SATA port map: 0x33 (ports 0 and 5 active on SFF) |
| 29 | +# - VGA BIOS ID: Haswell GT2 desktop variant |
| 30 | +# - ROM: 12 MB split into an 8 MB bottom chip and a 4 MB top chip |
| 31 | +# |
| 32 | +# Blob strategy (blob-minimized): |
| 33 | +# - MRC blob: none. Uses Native RAM Initialization (CONFIG_USE_NATIVE_RAMINIT). |
| 34 | +# - FSP: none. Haswell does not use Intel Firmware Support Package. |
| 35 | +# - Intel ME: neutralized and soft-disabled via me_cleaner (-S -r -t -d). |
| 36 | +# AltMeDisable bit set in PCHSTRP10. ME shrunk from 6 MB to ~120 KB. |
| 37 | +# Only the bring-up module (FTPR) remains; all AMT/networking/backdoor |
| 38 | +# modules (TDT, FPF, HOSTCOMM, SESSMGR, ...) removed. |
| 39 | +# - IFD/GbE: small configuration blobs (4 KB / 16 KB), not executable firmware. |
| 40 | +# Each user extracts these from their own Dell BIOS backup. |
| 41 | + |
| 42 | +# Coreboot + Linux versions (match the t440p reference for Haswell) |
| 43 | +export CONFIG_COREBOOT=y |
| 44 | +export CONFIG_COREBOOT_VERSION=25.09 |
| 45 | +export CONFIG_LINUX_VERSION=6.1.8 |
| 46 | + |
| 47 | +CONFIG_COREBOOT_CONFIG=config/coreboot-dell-optiplex-9020-sff.config |
| 48 | +CONFIG_LINUX_CONFIG=config/linux-t440p.config |
| 49 | + |
| 50 | +# --- Blob handling ----------------------------------------------------------- |
| 51 | +# The Coreboot build depends on the three blobs extracted from the Dell BIOS |
| 52 | +# backup: ifd.bin (resized descriptor), me.bin (neutralized ME), gbe.bin. |
| 53 | +$(build)/coreboot-$(CONFIG_COREBOOT_VERSION)/$(BOARD)/.build: \ |
| 54 | + $(pwd)/blobs/optiplex_9020/ifd.bin \ |
| 55 | + $(pwd)/blobs/optiplex_9020/me.bin \ |
| 56 | + $(pwd)/blobs/optiplex_9020/gbe.bin |
| 57 | + |
| 58 | +# When the blobs are missing, run the extract script to pull IFD/ME/GbE out |
| 59 | +# of the original Dell BIOS backup and neutralize the ME. |
| 60 | +$(pwd)/blobs/optiplex_9020/ifd.bin $(pwd)/blobs/optiplex_9020/me.bin $(pwd)/blobs/optiplex_9020/gbe.bin: |
| 61 | + COREBOOT_DIR="$(build)/$(coreboot_base_dir)" \ |
| 62 | + $(pwd)/blobs/optiplex_9020/extract "$(pwd)/blobs/optiplex_9020/original_dell_bios.bin" "$(pwd)/blobs/optiplex_9020" |
| 63 | + |
| 64 | +# --- Modules packed into tools.cpio ------------------------------------------ |
| 65 | +CONFIG_CRYPTSETUP2=y |
| 66 | +CONFIG_FLASHPROG=y |
| 67 | +CONFIG_FLASHTOOLS=y |
| 68 | +CONFIG_GPG2=y |
| 69 | +CONFIG_KEXEC=y |
| 70 | +CONFIG_UTIL_LINUX=y |
| 71 | +CONFIG_LVM2=y |
| 72 | +CONFIG_MBEDTLS=y |
| 73 | +CONFIG_PCIUTILS=y |
| 74 | + |
| 75 | +# --- Remote attestation support (TPM 1.2) ------------------------------------ |
| 76 | +export CONFIG_TPM=y |
| 77 | +CONFIG_POPT=y |
| 78 | +CONFIG_QRENCODE=y |
| 79 | +CONFIG_TPMTOTP=y |
| 80 | +# HOTP-based remote attestation for a USB security dongle |
| 81 | +# (Nitrokey Pro 2 / Librem Key). Enable in a -hotp-maximized variant. |
| 82 | +#CONFIG_HOTPKEY=y |
| 83 | + |
| 84 | +# --- Platform locking finalization (PR0) ------------------------------------- |
| 85 | +# Prevents SPI from being writeable outside of Heads. |
| 86 | +CONFIG_IO386=y |
| 87 | +export CONFIG_FINALIZE_PLATFORM_LOCKING=y |
| 88 | + |
| 89 | +# --- GUI Support (FBWhiptail-based, graphical) ------------------------------- |
| 90 | +CONFIG_CAIRO=y |
| 91 | +CONFIG_FBWHIPTAIL=y |
| 92 | + |
| 93 | +# --- Additional hardware support for the Linux payload ----------------------- |
| 94 | +# USB support is mandatory on this board: it has no built-in keyboard. |
| 95 | +# CONFIG_USB_KEYBOARD_REQUIRED forces the xHCI/EHCI/HID drivers to be built |
| 96 | +# into the kernel (=y) rather than as loadable modules (=m), so they are |
| 97 | +# available immediately at boot -- before the initrd runs. Without this, USB |
| 98 | +# keyboards and mice (including wireless dongles) are dead in the Heads menu. |
| 99 | +export CONFIG_USB_KEYBOARD_REQUIRED=y |
| 100 | +CONFIG_LINUX_USB=y |
| 101 | +CONFIG_LINUX_E1000E=y |
| 102 | +CONFIG_MOBILE_TETHERING=y |
| 103 | + |
| 104 | +# --- Additional tools (tools.cpio) ------------------------------------------- |
| 105 | +# SSH server (requires ethernet drivers, e.g. CONFIG_LINUX_E1000E above) |
| 106 | +CONFIG_DROPBEAR=y |
| 107 | + |
| 108 | +# --- Runtime configuration --------------------------------------------------- |
| 109 | +export CONFIG_AUTO_BOOT_TIMEOUT=5 |
| 110 | +export CONFIG_DEBUG_OUTPUT=n |
| 111 | +export CONFIG_ENABLE_FUNCTION_TRACING_OUTPUT=n |
| 112 | +export CONFIG_TPM2_CAPTURE_PCAP=n |
| 113 | +export CONFIG_QUIET_MODE=y |
| 114 | +export CONFIG_BOOTSCRIPT=/bin/gui-init.sh |
| 115 | +export CONFIG_BOOT_REQ_HASH=n |
| 116 | +export CONFIG_BOOT_REQ_ROLLBACK=n |
| 117 | +# Kernel cmdline tweaks for the Heads payload kernel (not the target OS kernel) |
| 118 | +export CONFIG_BOOT_KERNEL_ADD="" |
| 119 | +export CONFIG_BOOT_KERNEL_REMOVE="intel_iommu=on intel_iommu=igfx_off" |
| 120 | +# Default boot device; adjust to the target OS installation. |
| 121 | +export CONFIG_BOOT_DEV="/dev/sda1" |
| 122 | +export CONFIG_BOARD_NAME="Dell OptiPlex 9020 SFF" |
| 123 | +export CONFIG_FLASH_OPTIONS="flashprog --progress --programmer internal" |
| 124 | + |
| 125 | +# --- Board targets ----------------------------------------------------------- |
| 126 | +# The 9020 SFF uses two SPI chips: an 8 MB bottom chip (IFD + ME + part of |
| 127 | +# coreboot) and a 4 MB top chip (rest of coreboot + reset vector). The build |
| 128 | +# produces two files: *-bottom.rom and *-top.rom. |
| 129 | +BOARD_TARGETS += split_8mb4mb |
0 commit comments