coreboot 26.09 版本发布:强化输入验证并转向 C23 标准
coreboot 项目很高兴宣布 26.09 版本正式发布。自 26.06 版本发布以来的三个月内,120 位作者(包括 29 位首次提交补丁的贡献者)合并了超过 1300 次提交。我们感谢所有在代码编写、补丁审查、硬件测试及缺陷报告方面做出贡献的人员。
近期版本主要聚焦于新芯片支持的扩展,而本周期则将重心放在强化和完善现有代码库上,同时推进了若干重要功能开发,例如共享的 CFR 设置菜单、面向非 ChromeOS 操作系统的 Intel MIPI 摄像头 ACPI 生成,以及持续的 AMD Turin 平台适配工作。大量工作投入于教导编译器验证 LPC 解码窗口、用结构化替代方案替换不透明的音频动词表、将 coreboot 固件构建迁移至 C23 标准,以及对外部数据格式解析器进行详尽的审计。
这些基础改进未必会直接体现在启动日志中,但正是它们保障了长期维护项目的健康与可靠性。下一个 coreboot 版本 26.12 计划于 12 月中旬发布。
重大或有趣变更
全树范围:输入验证与通用强化
本周期对 coreboot 解析的多种外部供应格式进行了审计。EDID 解析器已更新,以拒绝短小的 EDID 缓冲区(0c2df4db29),并防止读取超出缓冲区末尾的扩展块(e2f1db04e9)。现在它还会在 parse_cea 中检查扩展块长度(d5644158dc),并忽略失败的扩展块(b1bc8c6e71)。在 commonlib 的设备树解析中,我们验证了 FDT 头的自一致性(190e6467c8)以及头块对齐(61d99ab994)。解析器现在将拒绝 FDT 版本 16 及以下(44138ac188),以及无根节点的非扁平化树(8eedb4334e)。
图像渲染与存储功能也得到优化。BMP 渲染器现在会校验 BMP 尺寸和 ImageOffset 边界(8589952afa),并在渲染前验证帧缓冲几何边界(6ef8ad909f)。在存储方面,CBFS 遍历器会拒绝数据偏移过小的文件头(e95bdb7eee),FMAP 代码则在 fmap_locate_area() 中校验区域偏移和大小(00d88bed4e)。在 SMM 方面,总线遍历递归逻辑已修改以防止循环递归(034f4edca5),MP 初始化代码现在会在 SMM 初始化失败时中止启动(297a51a071)。其他加固措施包括在 TPM2 响应中校验负载大小(d7a3dfc1f1),以及在 crashlog 中检查 ramstage 堆溢出(899a40fc9b)。
lib,intel:DDR5 SPD 缓存与 TPM 支持校验
Intel 平台增加了 DDR5 SPD 缓存支持,使得 DIMM 序列号和几何信息可在多次启动间复用,无需重新读取 SMBus(143cab8eb9),随后对公共 SMBus 路径的大小检查进行了修复(0fb58baf02)。此外,SPD_CACHE_TPM_HASH 功能会将 SPD 缓存的 SHA-256 哈希值存入 TPM NVRAM,并在不匹配时使缓存失效,从而在 RW flash 被篡改时强制进行干净的 MRC 重训练(03903a857f)。Google Ocelot 变体已开始采用 TPM 哈希路径(5384dc480a)。
build:固件构建转向 C23
coreboot 固件构建已正式迁移至 -std=gnu23 标准(e9f2a15a05)。主板代码随后更新,用标准 C23 的 static_assert 关键字替换 _Static_assert(88c1fac546)。宿主工具也曾短暂跟进(456d48e69e),但因该变更导致在旧版本发行版上构建失败而被撤销(f7249a1e4d),因此宿主工具仍保持现有的 C11 基线。
sb,soc/intel:LPC 通用解码范围现已具备编译期检查
LPC 通用解码范围现在得到了正确的验证。我们在公共南桥(7e16e70c55)和 SoC(819cd9bec3)的 LPC 代码中添加了针对 GENx_DEC 值的 LPC_IO() 辅助函数。无效的 LPC_IO() 值现在会在编译时被拒绝(4ef247411a),并且新增了一个 Lint 检查,要求设备树中的 gen*_dec 字段必须使用 LPC_IO() 宏(99a6a8518f)。
arch/x86:i8259 和虚拟线 ExtINT 设置重构
virtual wire EXTINT 的设置流程得到改进,现在只在 i8259 初始化完成后才启用(afa234c6c8),并且在初始化 i8259 期间保持 ExtINT 屏蔽状态(64bbfac246)。剩余的 PC/AT 路径上也补上了 i8259 的初始化(27aae20c29)。此外,新增了 NO_PCAT_8259 策略用于控制 PC/AT 8259 的设置(bce0c6ad5a),供没有 PC/AT PIC 的平台使用。
device,mb: Azalia verb 表变得可读
音频 verb 表经过大规模清理,终于变得可读了。我们加入了对 4-bit verb 的支持(942000193a),并改用 weak 函数获取 azalia codec(c583b0c4f8)。同时为 Realtek ALC1150(11ef0fac53)和 ALC662/892/1200(85707dc6a0)codec 添加了规范的枚举。许多 ASRock Z87 和 Z97 主板已更新为使用这些人类可读的 verb 描述(1f6fa17e4a)。
drivers,ec,console: 共享 CFR 菜单与运行时串口控制台
本周期通过 CFR 提供的设置选项大幅扩展。Lenovo H8/PMH7 主板现在会自动获得共享的 EC 固件菜单(2f96e1d90e),ChromeEC 也采用了同样的模式,因此所有启用 CFR 的 ChromeEC 主板都能使用统一的 EC 表单,无需每块板子单独维护一份(9916da47e9)。在芯片组方面,bd82x6x 增加了共享的 Intel ME 状态与控制菜单(6f581f4808),包含针对 Arrandale 时期部件的通用南/北桥选项(ce0b89b178),以及共享的超线程控制(b363cc3237、4a930e7cf3)。
console 子系统现在支持在运行时启用串口控制台(605cba2fd1),并会自动发布共享的 CFR Console 表单(5d76acd9aa),免去了每块板子的 debug 级别配置(8da7079e50)。Asset-tag CFR 支持以通用驱动形式加入(ac094eb2b7),CFR 已在 LattePanda Mu(c6d3e4ba14)、Framework(469001e130)、cyan(291951d21c)、x201/x230(f34347d790、dfa075e298)上接入或默认启用,多个 edk2-default 配置也已启用(be50f6d4ca)。
drivers/intel/mipi_camera: 为 IPU3 摄像头方案生成 ACPI
```textMIPI 摄像头驱动新增了 PMIC SSDT 生成器(9e108b97b0)以及更丰富的 ACPI 绑定支持,旨在适配面向 IPU3 摄像头的 Windows/Linux 驱动栈:_DEP(c45d969667)、外部 _STA 对象(be4ad536b2)、仅限一次重置的 PMIC PowerResources(9160dfa147)、图形拓扑 _DSD 和 GPIO _DSM(c74e3c9718)、SSDB 通道推导(3598a525ec),以及与 INT3472 并存的本地 PRIC(cc36de97cc)。CIO2 端口/_DSD 输出被限定在现有设备中(3321f6013c),并支持 Skylake CIO2 命名规范及静态子设备扫描(2f8349943b, d019cf7fcd)。未设置 VARIANT_HAS_CAMERA_ACPI 的变体现在完全跳过这些操作(bca239e90a)。
Google Poppy 系列设备(atlas、nautilus、soraka)已从静态 ASL 迁移至 MIPI 设备树路径(603c189906, b993b3026f, a3a4d23b2c)。Volteer 恢复了仅由 VCM PWREN 控制的供电方式(2abba28dab),并在 Documentation/drivers 目录下新增了一份 ACPI 编程指南(e3ec4f1fc0)。
drivers/efi:支持 Capsule-on-disk 并清理 SMMSTORE
EFI payload 基础设施新增对 Capsule-on-disk 的支持(56535e2783),且 edk2 payload 现默认启用该功能(dc67faf538)。Capsule 驱动现在会拒绝无效的内存范围(bd50f39597),并允许驱动被多次调用(db6aeea755)。SMMSTORE 移除了对 v1 协议的支持(52fd778a78),并将块大小设为可配置项(01a26951a6)。
soc/amd/turin:Turin PoC 走向成熟,首批 EPYC 主板落地
AMD Turin 已走出骨架阶段。PoC SoC 新增了对 CPPC 的支持(c21b6f255d)、IOAPIC 中断路由钩子(9a3ca0c141)、FADT 和 amdfwtool 配置(bfddb4ad78, b53955450c),以及针对 CXL 和 MPDMA 设备的 ACPI 描述(d0a055ae78, 858049a7ae)。SEV NVRAM 已集成至 PSP 目录(a8dba0849e),并针对 Genoa/Turin 完成了相应的 amdfwtool 和 EFS 相关工作(721453b7ff, 0fd91dc227, f0194c62ba, c14cf399e3)。
该路径下的首个主板是 GIGABYTE MZ33-AR1,它支持 PCIe 插槽/MCIO 拓扑、板载设备配置以及通过 BMC 进行 BIOS 更新打包(0754b3ea38, 32b4cddd27, 737480a0da, a53c63b814)。在此过程中,通用的 AMD FCH 路径(AOAC、SMI sleep)也得到了统一(80fade0ec4, c8d0d2591a, fb11c51fb7)。
Documentation:AI 审查策略与 AGENTS.md
```coreboot 正式采用了 AI 辅助代码审查策略(b34a744391)。Gerrit 规范文档如今阐明了在补丁审查中使用 AI 的时机与方法;顶层的 AGENTS.md 文件则以代码化形式记录了同样的规则,供编码 Agent 遵循:注释必须标记为 [AI-generated];仅允许提出新的顶层问题(严禁回复人类评论);不得设置审查标记或触发 Gerrit 操作;且必须遵守项目的编码风格规范。
coreboot 的其他变更
- util/cbfstool:FMD 新增
EXT标志,允许将 CBFS 区域作为ECBFS_<name>同级项扩展至备用存储(a80a718fd9);fmaptool 现可枚举这些扩展区域供 cbfstool 使用(db23ba0439)。 - soc/qualcomm/calypso:新增 Calypso RPMh RSC 驱动(f9617dba37)、显示子系统初始化(74410e2a00)以及 TSENS 控制器和热区(e00170ceca)。
- soc/mediatek/mt8196:启用 EOSC 硬件校准以提升 RTC 精度(beb40bd594),并解决 MT6685 RTC 初始化期间因未时钟的 CBUSY 导致的死锁问题(f7c6229c61)。
- soc/amd:新增 BOCO(Bus Off Chip Off,总线关闭芯片关闭)支持(90157e8977)。
- soc/amd/common/block/pci:新增 PCIe 热插拔支持(44f4416b63)。
- soc/amd/common/block/psp:新增 SMM A/B 恢复支持(0c62b9d21e)。
- util/amdfwtool:新增多 PSP 支持(56fee2ba34)及 SEV NVRAM 支持(c14cf399e3)。
- soc/intel/pantherlake:新增可配置 TDP 支持(f57c27b496)并动态配置 DDR5 内存控制器拓扑(ade6bd7e87)。
- soc/intel/novalake:启用 coreboot 原生 Logo 渲染(1f8931aceb),并新增 TDC、功耗限制及电源状态阈值(538e724405)。
- mb/starlabs:共享相同的主板源码(8dcd09d131),并将共享配置移至公共文件(c2d000ba36)。
- ec/starlabs/merlin:使用 acpigen 生成电池 ACPI(9810f4a5ef)和睡眠钩子(3c77e34b52)。
- ec/lenovo/h8:新增键盘背光硬件检测(30b8105b0b)及 ACPI 方法 _BIX(493593a1b8)。
- nb/intel/pineview:新增 DDR2 UDIMM Vref 边沿测试(c96952c3e4)及 libgfxinit 支持(9c6cb93982)。
- drivers/wifi:支持按频段选择性启用 Wi-Fi(3e81074243),并新增 DSM 功能 8“仅限室内使用设备”支持(61394c0a43)。
- mb/framework:在所有主板上启用 vboot(26450cca94),统一各主板的 EC 代码(4c9e99d07d),并新增热区(3449b5e01a)。
外部资源变更
工具链更新
- binutils 从 2.45.1 升级到 2.46.1 (6372edd871)
- LLVM 从 21.1.8 升级到 22.1.8 (30870ce128)
- NASM 从 3.01 升级到 3.02 (c165edb4ce)
- CMake 从 4.0.3 升级到 4.3.4 (560771f617)
- MPC 从 1.3.1 升级到 1.4.1 (56fc96dcac)
- crossgcc 新增 Cortex-R 和 Cortex-M multilib 支持 (54bcc595c0)
Git 子模块指针
- arm-trusted-firmware:commit id 从 9109143417 更新到 b5eaba47ef
- blobs:commit id 从 4a8de0324e 更新到 6f42f0f39b
- fsp:commit id 从 ca4f8b702d 更新到 98426bfd95
- intel-microcode:commit id 从 98f8d817ca 更新到 927e65c8d5
- libgfxinit:commit id 从 7e08e5d280 更新到 6e74c70313
- libhwbase:commit id 从 5bd7c1101c 更新到 61f7287f18
外部 payload
- payloads/external/CrabEFI:新增 CrabEFI payload 支持 (ff34dafa38)。CrabEFI 是一个用 Rust 编写的 UEFI 实现。
- payload/grub2:GRUB2 更新到 2.14 (bcb8f01241)。
- payloads/edk2:配置磁盘上的固件更新包支持(dc67faf538),并将 MrChromebox 的默认版本提升至 26.09.1(cd03ec93ad)。
- payloads/SeaBIOS:针对模拟板卡启用 CONFIG_QEMU_HARDWARE(27595ffcaf)。
- libpayload:从 coreboot 表中解析 soc_id(6b028355f7),并在磁盘几何参数发生变化时重建 MSC 磁盘(0e4ed28002)。
平台更新
新增主板:
- Acer TravelMate P633-M
- Acer TravelMate P633-V
- Apple iMac4,1
- ASRock Fatal1ty Z97X Killer
- ASRock Z97 Anniversary
- ASUS B85M-E
- ASUS Maximus VI GENE
- ASUS Maximus VII GENE
- ASUS Maximus VII HERO
- Framework Laptop 12(第 13 代 Intel Core 处理器)
- GIGABYTE MZ33-AR1
- Google Aneto
- Google Annite
- Google Hekla
- Google Meru
- Google Pic
- Intel NUC D33217GKE
- LattePanda Mu 搭配 DFR1141 全功能评估载板
- LattePanda Mu 搭配 DFR1142 简化版载板
- Lenovo ThinkPad X380 Yoga
- Lenovo ThinkStation P320
- MSI PRO B760-P WIFI DDR4(MS-7D98)
- NVIDIA Porg(Jetson Nano)
- Qotom Q535G6
- Sapphire Rave2(Faegan)
- Siemens FA ASL
从 26.06 到 26.09 发布的统计数据
- 提交总数:1324
- 日均提交数:13.87
- 新增代码行总数:114775
- 每个提交平均新增代码行数:86.69
- 新增超过 100 行的补丁数量:148
- 小提交平均新增代码行数:40.48
- 删除代码行总数:27811
- 每个提交平均删除代码行数:21.01
- 新增与删除代码行净差值:86964
- 贡献者总数:120
- 新贡献者数:29