- 固件
- 嵌入式
- 操作系统
- 驱动开发
【免费下载链接】coreboot
Read-only mirror of https://review.coreboot.org/coreboot.git. Synced every hour. We don't handle Pull Requests.
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 个主板(完整清单)
| 厂商 | 型号 |
|---|---|
| ASROCK | G41C-GS、G41M-GS、G41M-S3、G41M-VS3 R2.0、H81M-HDS |
| ASUS | P5QC、P5QL-PRO、P5Q-PRO、P8H61-M-LX、P8H61-M-PRO |
| CAVIUM | CN8100-SFF-EVB |
| WATSON | |
| FOXCONN | D41S |
| GIGABYTE | GA-H61M-S2PV |
| ALEENA、AMPTON、ARCADA、ASUKA、BOBBA、BUDDY、CAREENA、CAROLINE、CASTA、CAVE、DELAN、DRAGONEGG、FLEEX、HATCH、KARMA、KUKUI、LIARA、MEEP、RAMMUS、SARIEN、SENTRY | |
| HEWLETT PACKARD | HP COMPAQ 8200 ELITE SFF PC |
| INTEL | COFFEELAKE RVP11、COFFEELAKE RVP8、COFFEELAKE RVPU、DG41WV、ICELAKE RVPU、ICELAKE RVPY、WHISKEYLAKE RVP |
| LENOVO | T431S、THINKCENTRE A58、W500、W530 |
| OPENCELLULAR | ELGON、ROTUNDU、SUPABRCKV1 |
| SIEMENS | MC-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 个主板(完整清单)
| 厂商 | 型号 |
|---|---|
| AAEON | PFM-540I REVB |
| AMD | DB800、DBM690T、F2950、MAHOGANY、NORWICH、PISTACHIO、SERENGETI-CHEETAH |
| ARTECGROUP | DBE61 |
| ASROCK | 939A785GMH |
| ASUS | A8N-E、A8N-SLI、A8V-E DELUXE、A8V-E SE、K8V-X、KFSN4-DRE K8、M2N-E、M2V、M2V MX-SE |
| BACHMANN | OT200 |
| BCOM | WINNETP680 |
| BROADCOM | BLAST |
| DIGITALLOGIC | MSM800SEV |
| GIGABYTE | GA-2761GXDK、M57SLI |
| KAHLEE、MEOWTH、PURIN、ROTOR、ZOOMBINI | |
| HP | DL145-G1、DL145-G3 |
| IEI | PCISA LX-800 R10、PM LX2-800 R10、PM LX-800 R11 |
| INTEL | COUGAR-CANYON2、STARGO2 |
| IWILL | DK8 HTX |
| JETWAY | J7F2、J7F4K1G2E、J7F4K1G5D |
| KONTRON | KT690 |
| LINUTOP | LINUTOP1 |
| LIPPERT | HURRICANE LX、LITERUNNER LX、ROADRUNNER LX、SPACERUNNER LX |
| LOWRISC | NEXYS4DDR |
| MSI | MS7135、MS7260、MS9185、MS9282 |
| NVIDIA | L1-2PVV |
| SIEMENS | SITEMP-G1P1 |
| SUNW | ULTRA40、ULTRA40M2 |
| SUPERMICRO | H8DME、H8DMR |
| TECHNEXION | TIM5690、TIM8690 |
| TRAVERSE | GEOS |
| TYAN | S2912 |
| VIA | EPIA-CN、EPIA-M700、PC2500E、VT8454C |
| WINENT | MB6047、PL6064 |
| WINNET | G170 |
从移除清单可以清晰看出 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 的意义可以概括为三点:
- 技术债清理:
device_t退出历史舞台、编码风格统一、ICH 南桥公共化,让后续功能开发建立在更干净的基础上; - 启动链路现代化:
POSTCAR_STAGE、RELOCATABLE_RAMSTAGE、EARLY_CBMEM、bootblock 压缩、TSEG 化 SMM 等机制的普及,为现代平台的快速、安全启动铺路; - 平台版图洗牌:新增 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.
相关推荐
coreboot 4.3 版本发布说明全解:FMAP 固件布局、Kconfig 严格模式与大规模代码清理
coreboot 4.3 版本发布说明全解:FMAP 固件布局、Kconfig 严格模式与大规模代码清理 coreboot 4.3 是该项目基于固定时间周期发布
固件嵌入式操作系统驱动开发PKSM项目10.2.0版本发布:性能优化与代码清理
PKSM项目10.2.0版本发布:性能优化与代码清理 PKSM是一款功能强大的任天堂3DS平台开源工具,主要用于管理宝可梦系列游戏的存档数据。作为一款深受玩家喜
开发工具coreboot 25.12 版本发布解析:CFR 固件选项框架、SMMSTORE 扩容与 X1P42100、LPCAMM 新平台能力
coreboot 25.12 版本发布解析:CFR 固件选项框架、SMMSTORE 扩容与 X1P42100、LPCAMM 新平台能力 本篇基于 coreboo
固件嵌入式操作系统驱动开发
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考