☰
coreboot 4.9 版本发布全解析:代码清理、平台扩展与启动链路现代化
2026/10/15 3:43:05 网站建设 项目流程
  • 固件
  • 嵌入式
  • 操作系统
  • 驱动开发

【免费下载链接】coreboot

Read-only mirror of https://review.coreboot.org/coreboot.git. Synced every hour. We don't handle Pull Requests.

项目地址:https://gitcode.com/gh_mirrors/co/coreboot
点击查看免费下载

coreboot 4.9 是 2019 年初发布的里程碑版本,覆盖了从 commit532b8d5f25到7f520c8fe6的约七个月开发周期。本指南以 Documentation/releases/coreboot-4.9-relnotes.md 发行说明为主线,逐节解析 4.9 的核心变更:device_t的移除、mainboard variant(变体)机制的去重应用、postcar 阶段的推广、bootblock 压缩、FSP 二进制集成方式,以及 56 个主板新增与 71 个主板移除的完整清单。读完本文,你将能准确理解 4.8.1 到 4.9 之间 coreboot 代码库的演进脉络,并能在当前源码树中定位这些特性对应的实现文件。

版本概况:七个月、175 位作者、2610 次提交

4.9 发行说明记录了以下关键统计数据:

  • 开发周期:距 4.8.1 约七个多月;
  • 提交规模:175 位作者向 master 提交了 2610 个变更,涉及芯片组(chipsets)、主板(mainboards)、工具(tools)、构建系统(build system)与文档(documentation)等几乎仓库的每个角落;
  • 新贡献者:同期有 70 位作者在 coreboot 完成了首次提交。

发布说明特别向所有通过开发、评审、测试、文档撰写或在 IRC、邮件列表等社区渠道帮助他人的贡献者致谢。4.9 版本在 git 仓库中有对应的 PGP 签名 tag,分支按需创建。

主题解读:4.9 是一场「清理」驱动的发布

如果说 4.9 有一个贯穿始终的主题,那就是clean up(清理)。发布说明明确指出,本周期的大量工作集中在:

  • 让代码库更符合 coreboot 编码风格(coding style);
  • 移除希望淘汰的旧惯用法,最典型的是重载的device_t数据类型;
  • 让特性在整个代码树中普及,使各部分更加统一。

这些清理不是孤立的重构,而是为后续版本铺路的系统性工程,下面逐项展开。

移除device_t,全面改用struct device *

4.9 在 ramstage 代码中彻底移除了device_t,统一改用struct device *。device_t是一个过度重载的 typedef,在不同上下文(pci_devfn_t、device 指针等)中含义不同,容易引发误解。当前源码树中,设备结构体定义位于 src/include/device/device.h,所有设备操作均以struct device *显式传参,例如 src/device/device.c 中的设备探测与枚举逻辑。这一改动提升了类型安全性,也简化了代码阅读与静态分析。

mainboard variant 机制:从 Chrome OS 走向 Lenovo ThinkPad

coreboot 4.4 周期引入了 mainboard variant(变体)概念,用于避免高度相似的主板之间重复代码。早期该特性主要为 Chrome OS 设备服务;4.9 期间,多个 Lenovo ThinkPad 平台用同样方式完成了去重。

在 src/mainboard/lenovo/t430s/Makefile.mk 中可以看到 variant 机制的实际形态:通过$(VARIANT_DIR)变量引用各变体专属的gpio.c、romstage.c、hda_verb.c等文件,构建系统根据所选BOARD_LENOVO_T431S等配置(见 src/mainboard/lenovo/t430s/Kconfig)自动拼接对应变体目录。这样 T430s 与 T431s 共享同一主板目录下的公共代码,仅差异部分按变体隔离。类似的变体布局同样用于 src/mainboard/lenovo/t400(涵盖 W500 等)与 Google 系主板目录。

工具链与自动构建基础设施的改进

清理工作还延伸到了帮助开发者遵循编码风格、避免错误的工具,以及自动化构建测试(automated build tests)基础设施。核心目标是降低新贡献者的入门门槛,同时让已有代码库在持续变更中保持一致性。

文档入仓:wiki 时代结束,Documentation/ 成为唯一事实源

4.9 期间 coreboot 将文档整体迁入仓库(Documentation/ 目录)。这一变动的意义在于:

  • 编辑文档不再需要特殊 wiki 账号,任何贡献者都可以随代码一起提交文档变更;
  • 文档与源码同仓存放,更容易保持两者同步。

迁移工作仍在进行中,因此旧 wiki 以只读方式与基于 coreboot.git 的Documentation/目录渲染出的新文档站点并行存在。仓库根目录下的 Documentation/releases/ 就是这一迁移的直接产物,本文所依据的 4.9 发行说明即存储于该目录。

Blobs 处理:Intel FSP 二进制镜像并入构建系统

4.9 的另一个重大变化是二进制 blob 的处理方式。由于 Intel 提供了许可条款合理的 FSP 二进制仓库,coreboot 得以:

  • 将该仓库镜像到 coreboot.org;
  • 将其集成进构建系统,使依赖 Intel 专有初始化代码的设备能「开箱即用」地构建出可运行的镜像。

需要强调的是,blobs不是 coreboot 树的一部分,仅在启用USE_BLOBS选项时才会下载。这一语义在当前 src/Kconfig 中依然保留:

  • USE_BLOBS(src/Kconfig 中config USE_BLOBS):允许使用二进制仓库,默认y,但保留「Free」选项让用户选择纯开源构建;
  • USE_AMD_BLOBS(src/Kconfig 中config USE_AMD_BLOBS):依赖USE_BLOBS,涉及 AMD 的 VBIOS、PSP bootloader、SMU firmware 等二进制,启用即表示同意 AMD 许可协议;
  • USE_QC_BLOBS(src/Kconfig 中config USE_QC_BLOBS):同理覆盖 Qualcomm 平台二进制。

3rdparty 目录下的 3rdparty/fsp、3rdparty/blobs 等子模块即对应这些二进制源。

弃用政策:4.9 后的节奏调整

按照 4.6 发行说明中讨论的计划,4.8 之后 coreboot 的第一批动作之一就是移除不支持某些新特性、且明显无人维护的主板。

但发布说明也坦承:当时并未全面执行更激进的弃用计划,原因包括:

  • board status 上报机制仍较粗糙:该机制对提交构建结果的贡献者造成了不小的负担;
  • 版本节奏问题:4.9 因进度延期而发布较晚,导致 4.10 的开发窗口只剩约四个月,时间太短,不足以让老主板赶上新标准。

因此调整后的时间表是:4.9 之后不再执行弃用;4.10 可能宣布下一轮弃用计划,实际执行发生在 4.11 发布之后(2019 年底)。

新增 56 个主板(完整清单)

厂商型号
ASROCKG41C-GS、G41M-GS、G41M-S3、G41M-VS3 R2.0、H81M-HDS
ASUSP5QC、P5QL-PRO、P5Q-PRO、P8H61-M-LX、P8H61-M-PRO
CAVIUMCN8100-SFF-EVB
FACEBOOKWATSON
FOXCONND41S
GIGABYTEGA-H61M-S2PV
GOOGLEALEENA、AMPTON、ARCADA、ASUKA、BOBBA、BUDDY、CAREENA、CAROLINE、CASTA、CAVE、DELAN、DRAGONEGG、FLEEX、HATCH、KARMA、KUKUI、LIARA、MEEP、RAMMUS、SARIEN、SENTRY
HEWLETT PACKARDHP COMPAQ 8200 ELITE SFF PC
INTELCOFFEELAKE RVP11、COFFEELAKE RVP8、COFFEELAKE RVPU、DG41WV、ICELAKE RVPU、ICELAKE RVPY、WHISKEYLAKE RVP
LENOVOT431S、THINKCENTRE A58、W500、W530
OPENCELLULARELGON、ROTUNDU、SUPABRCKV1
SIEMENSMC-APL2、MC-APL3、MC-APL4、MC-APL5

这些主板大量运用了前述 variant 机制:例如 T431s 作为 T430s 的变体(见 src/mainboard/lenovo/t430s/Kconfig 与 src/mainboard/lenovo/t430s/Makefile.mk),W500 则与 T400/R400/R500 共享主板目录(见 src/mainboard/lenovo/t400/Kconfig)。新增主板可结合 src/mainboard/ 下对应目录与 Documentation/mainboard/ 各厂商文档进一步查阅。

移除 71 个主板(完整清单)

厂商型号
AAEONPFM-540I REVB
AMDDB800、DBM690T、F2950、MAHOGANY、NORWICH、PISTACHIO、SERENGETI-CHEETAH
ARTECGROUPDBE61
ASROCK939A785GMH
ASUSA8N-E、A8N-SLI、A8V-E DELUXE、A8V-E SE、K8V-X、KFSN4-DRE K8、M2N-E、M2V、M2V MX-SE
BACHMANNOT200
BCOMWINNETP680
BROADCOMBLAST
DIGITALLOGICMSM800SEV
GIGABYTEGA-2761GXDK、M57SLI
GOOGLEKAHLEE、MEOWTH、PURIN、ROTOR、ZOOMBINI
HPDL145-G1、DL145-G3
IEIPCISA LX-800 R10、PM LX2-800 R10、PM LX-800 R11
INTELCOUGAR-CANYON2、STARGO2
IWILLDK8 HTX
JETWAYJ7F2、J7F4K1G2E、J7F4K1G5D
KONTRONKT690
LINUTOPLINUTOP1
LIPPERTHURRICANE LX、LITERUNNER LX、ROADRUNNER LX、SPACERUNNER LX
LOWRISCNEXYS4DDR
MSIMS7135、MS7260、MS9185、MS9282
NVIDIAL1-2PVV
SIEMENSSITEMP-G1P1
SUNWULTRA40、ULTRA40M2
SUPERMICROH8DME、H8DMR
TECHNEXIONTIM5690、TIM8690
TRAVERSEGEOS
TYANS2912
VIAEPIA-CN、EPIA-M700、PC2500E、VT8454C
WINENTMB6047、PL6064
WINNETG170

从移除清单可以清晰看出 4.9 的取舍方向:大量 AMD K8 时代主板、VIA 平台以及缺乏新特性(如EARLY_CBMEM)的老平台被淘汰,资源向现代芯片组集中。

通用变更深度解析

发布说明列出的通用变更,每一项目前都能在源码树中找到对应实现:

代码清理类

  • 移除device_t,改用struct device *:见上文「清理」章节;
  • 移除多余 include 指令、提升编码风格合规性:贯穿 src/ 全树;
  • 用 variant 机制去重主板:见 src/mainboard/lenovo/t430s/Makefile.mk 等示例。

启动流程类

postcar 阶段扩展使用。postcar(post-CAR)阶段负责在 RAM 已可用后、进入 ramstage 前,拆除 cache-as-ram(CAR)并完成 MTRR 等收尾工作。其定义与开关位于 src/arch/x86/Kconfig(config POSTCAR_STAGE,依赖ARCH_X86且非RESET_VECTOR_IN_RAM),核心实现在 src/arch/x86/postcar.c:调用late_car_teardown()拆除 CAR,恢复/初始化 CBMEM,打时间戳TS_POSTCAR_START,随后run_ramstage()加载运行 ramstage。postcar 的可重定位模块装载机制见 src/lib/program.ld。

bootblock 压缩能力。对于需要把 bootblock 从极慢的 flash 拷贝到 SRAM 的系统,4.9 引入了在 bootblock 前附加一段自解压 stub 的方案:stub 先把压缩的 bootblock 解压进 SRAM,从而把 flash 读取量降到最低。配置项为COMPRESS_BOOTBLOCK(src/Kconfig),说明中指出该选项依赖 SoC memlayout 调整,因此不开放给用户选择;解压器实现位于 src/lib/decompressor.c,通过内嵌汇编将bootblock.lz4以.incbin方式并入镜像,用ulz4f()解压后跳转;压缩构建下 bootblock 的入口见 src/lib/bootblock.c 中CONFIG(COMPRESS_BOOTBLOCK)保护的_start路径,bootblock_arg负责传递时间戳与 metadata hash 锚点。

保留/迁移类:

  • POWER8 架构端口更名为 PPC64:以反映其不限于 POWER8。当前架构目录即为 src/arch/ppc64/,Kconfig 定义ARCH_PPC64(src/arch/ppc64/Kconfig);
  • arm64 支持启动 FIT(uImage)payload:FIT 加载器实现于 src/lib/fit.c,支持按 compat 属性匹配配置、更新 devicetree 内存条目等;
  • SPI flash 写保护 API:在 src/include/spi_flash.h 中定义了spi_flash_set_write_protected()与spi_flash_is_write_protected(),支持按 region 保护、状态寄存器锁定(spi_flash_status_reg_lockdown),并注明不同 flash IC 的对齐与 TOP/BOTTOM 起始约束;发布说明指出该 API 已在 Winbond 上实现;
  • measured boot 的 TCPA log 实现:TPM 度量日志位于 src/security/tpm/tspi/(log-tpm1.c、log-tpm2.c、log.c),配合tspi.c完成 PCR 扩展,序列化头文件tpm1_log_serialized.h、tpm2_log_serialized.h定义了日志事件格式;
  • libpayload 增加 arm64 GDB 支持:调试能力扩展到 arm64 架构。

其他还包括:扩展使用 postcar 阶段(同上)、放弃无人维护的代码路径(dropped unmaintained code paths)、measured boot 支持等。

CPU 变更

  • cpu/intel/model_2065x、206ax、haswell 切换到POSTCAR_STAGE:Sandy/Ivy Bridge 与 Haswell 平台改用 postcar 拆除 CAR,减少各芯片组重复的 CAR teardown 代码;
  • cpu/intel/slot_1 切换到不同的 CAR 设置:Slot 1 老平台(Pentium II/III 时代)采用另一套 CAR 初始化方案;
  • 放弃 FSP1.0 的 Sandy/Ivy Bridge 启动路径:FSP(Firmware Support Package)1.0 体系在 4.9 开始退出,为 FSP 2.0 统一路径让路。当前 Intel 平台统一使用 FSP 2.0(见 src/soc/intel/common 与 src/Kconfig 中PLATFORM_USES_FSP2_0相关配置)。

SoC 变更

新增:

  • Cavium CN81xx:对应 src/soc/cavium/cn81xx/,Kconfig 中定义SOC_CAVIUM_CN81XX;
  • Intel Ice Lake:新一代移动 SoC 支持起步(Ice Lake RVPU/RVPY 也出现在新增主板清单中);
  • Mediatek MT8183:对应 src/soc/mediatek/mt8183/,Kconfig 定义SOC_MEDIATEK_MT8183,并包含MT8183_DRAM_EMCP等平台配置。

放弃:Broadcom Cygnus、Lowrisc、Marvell mvmap2315。这三个 SoC 均缺乏持续维护与新特性适配。

Northbridge(北桥)变更

  • 放弃 AMD K8、VIA CN700、VIA CX700、VIA VX800:理由明确——这些北桥缺少EARLY_CBMEM支持,无法跟上统一的内存基础设施演进;
  • intel/e7505 迁移到EARLY_CBMEM:E7505(至强双路)成为 CBMEM 早期化支持的一员;
  • nb/intel/i945、e7505、pineview、x4x、gm45、i440bx 迁移到POSTCAR_STAGE:CAR 拆除流程统一化;
  • nb/intel/i440bx、e7505 迁移到RELOCATABLE_RAMSTAGE:ramstage 采用可重定位模块,可加载到任意地址;
  • intel/x4x 增加 DDR3 支持:x4x(G45 时代)内存控制器扩展至 DDR3;
  • nb/intel/pineview 加速 SPD 读取:优化内存初始化时的 SPD 获取路径;
  • nb/intel/i945、gm45、x4x、pineview 在 SMI 中使用 TSEG:系统管理模式内存改用 TSEG 保护区,提升 SMM 隔离性。

Southbridge(南桥)变更

  • sb/intel/i82801{g,i,j}x、lynxpoint 使用通用 ACPI pirq 生成器:中断路由表生成逻辑收敛到公共代码(当前公共实现可参考 src/arch/x86/pirq_routing.c 与 src/acpi/acpigen_pci.c 相关接口);
  • sb/intel/i82801{g,i,j}x 使用公共代码设置 SMM 与 smihandler:SMM 初始化与 SMI 处理程序从各 ICH 南桥去重为共享实现;
  • PMBASE 配置使用公共函数:电源管理基址配置统一。

这些改动是「清理」主题在南桥层面的直接体现:ICH 系列与 Lynx Point 平台之间的重复代码被大幅削减。

Payload 变更

  • 支持 uImage/FIT 中 initrd 放置在 4GiB 以上:核心在于以 64 位地址写入 devicetree。当前 src/lib/fit.c 的fit_add_ramdisk()通过dt_add_u64_prop()将linux,initrd-start/linux,initrd-end作为 64 位属性写入chosen节点,从而突破 32 位地址空间限制(u64 start = (uintptr_t)ramdisk_addr;),配合update_reserve_map()更新保留区映射;
  • 补充 uImage/FIT payload 文档:便于开发者理解 FIT 镜像的配置与加载方式。

工具链更新

4.9 将工具链更新为:

  • GCC 8.1.0
  • binutils 2.30
  • IASL 20180810(ACPI 编译器)
  • clang 6

这套组合对应 util/crossgcc/ 中维护的交叉编译工具链构建脚本与补丁集,为后续版本在更高优化等级与更新语言标准下的编译奠定了基础。

总结与迁移建议

coreboot 4.9 的意义可以概括为三点:

  1. 技术债清理:device_t退出历史舞台、编码风格统一、ICH 南桥公共化,让后续功能开发建立在更干净的基础上;
  2. 启动链路现代化:POSTCAR_STAGE、RELOCATABLE_RAMSTAGE、EARLY_CBMEM、bootblock 压缩、TSEG 化 SMM 等机制的普及,为现代平台的快速、安全启动铺路;
  3. 平台版图洗牌:新增 56 个主板(以 Google Chromebook 系、Intel 新一代 RVP 与联想变体为主),移除 71 个老旧无人维护平台(AMD K8、VIA、旧嵌入式板卡为主)。

对于正在评估是否跟进 4.9 或从更老版本升级的开发者,建议优先核对目标主板是否依赖已移除的北桥/SoC(尤其 AMD K8、VIA、Broadcom Cygnus、Marvell mvmap2315、FSP1.0 路径),并确认主板的 variant 布局、postcar 支持与 blobs 下载配置(USE_BLOBS)是否符合构建预期。

  • 固件
  • 嵌入式
  • 操作系统
  • 驱动开发

【免费下载链接】coreboot

Read-only mirror of https://review.coreboot.org/coreboot.git. Synced every hour. We don't handle Pull Requests.

项目地址:https://gitcode.com/gh_mirrors/co/coreboot
点击查看免费下载

相关推荐

上一篇:YOLOv10 训练全流程中的 Ultralytics HUB 回调机制:从指标上报到模型上传的源码级解析
下一篇:Home Manager 20.09 版本发布解读:stateVersion 机制、路径确定性化与窗口管理器配置迁移实战

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询