首页 / 资讯中心 / 文章详情

coreboot 4.9 版本发布全解析:代码清理、平台扩展与启动链路现代化

coreboot 4.9 版本发布全解析:代码清理、平台扩展与启动链路现代化 ★ FEATURED ARTICLE
固件嵌入式操作系统驱动开发【免费下载链接】corebootRead-only mirror of https://review.coreboot.org/coreboot.git. Synced every hour. We dont 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 ThinkPadcoreboot 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_BLOBSsrc/Kconfig 中config USE_BLOBS允许使用二进制仓库默认y但保留「Free」选项让用户选择纯开源构建USE_AMD_BLOBSsrc/Kconfig 中config USE_AMD_BLOBS依赖USE_BLOBS涉及 AMD 的 VBIOS、PSP bootloader、SMU firmware 等二进制启用即表示同意 AMD 许可协议USE_QC_BLOBSsrc/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-HDSASUSP5QC、P5QL-PRO、P5Q-PRO、P8H61-M-LX、P8H61-M-PROCAVIUMCN8100-SFF-EVBFACEBOOKWATSONFOXCONND41SGIGABYTEGA-H61M-S2PVGOOGLEALEENA、AMPTON、ARCADA、ASUKA、BOBBA、BUDDY、CAREENA、CAROLINE、CASTA、CAVE、DELAN、DRAGONEGG、FLEEX、HATCH、KARMA、KUKUI、LIARA、MEEP、RAMMUS、SARIEN、SENTRYHEWLETT PACKARDHP COMPAQ 8200 ELITE SFF PCINTELCOFFEELAKE RVP11、COFFEELAKE RVP8、COFFEELAKE RVPU、DG41WV、ICELAKE RVPU、ICELAKE RVPY、WHISKEYLAKE RVPLENOVOT431S、THINKCENTRE A58、W500、W530OPENCELLULARELGON、ROTUNDU、SUPABRCKV1SIEMENSMC-APL2、MC-APL3、MC-APL4、MC-APL5这些主板大量运用了前述 variant 机制例如 T431s 作为 T430s 的变体见 src/mainboard/lenovo/t430s/Kconfig 与 src/mainboard/lenovo/t430s/Makefile.mkW500 则与 T400/R400/R500 共享主板目录见 src/mainboard/lenovo/t400/Kconfig。新增主板可结合 src/mainboard/ 下对应目录与 Documentation/mainboard/ 各厂商文档进一步查阅。移除 71 个主板完整清单厂商型号AAEONPFM-540I REVBAMDDB800、DBM690T、F2950、MAHOGANY、NORWICH、PISTACHIO、SERENGETI-CHEETAHARTECGROUPDBE61ASROCK939A785GMHASUSA8N-E、A8N-SLI、A8V-E DELUXE、A8V-E SE、K8V-X、KFSN4-DRE K8、M2N-E、M2V、M2V MX-SEBACHMANNOT200BCOMWINNETP680BROADCOMBLASTDIGITALLOGICMSM800SEVGIGABYTEGA-2761GXDK、M57SLIGOOGLEKAHLEE、MEOWTH、PURIN、ROTOR、ZOOMBINIHPDL145-G1、DL145-G3IEIPCISA LX-800 R10、PM LX2-800 R10、PM LX-800 R11INTELCOUGAR-CANYON2、STARGO2IWILLDK8 HTXJETWAYJ7F2、J7F4K1G2E、J7F4K1G5DKONTRONKT690LINUTOPLINUTOP1LIPPERTHURRICANE LX、LITERUNNER LX、ROADRUNNER LX、SPACERUNNER LXLOWRISCNEXYS4DDRMSIMS7135、MS7260、MS9185、MS9282NVIDIAL1-2PVVSIEMENSSITEMP-G1P1SUNWULTRA40、ULTRA40M2SUPERMICROH8DME、H8DMRTECHNEXIONTIM5690、TIM8690TRAVERSEGEOSTYANS2912VIAEPIA-CN、EPIA-M700、PC2500E、VT8454CWINENTMB6047、PL6064WINNETG170从移除清单可以清晰看出 4.9 的取舍方向大量 AMD K8 时代主板、VIA 平台以及缺乏新特性如EARLY_CBMEM的老平台被淘汰资源向现代芯片组集中。通用变更深度解析发布说明列出的通用变更每一项目前都能在源码树中找到对应实现代码清理类移除device_t改用struct device *见上文「清理」章节移除多余 include 指令、提升编码风格合规性贯穿 src/ 全树用 variant 机制去重主板见 src/mainboard/lenovo/t430s/Makefile.mk 等示例。启动流程类postcar 阶段扩展使用。postcarpost-CAR阶段负责在 RAM 已可用后、进入 ramstage 前拆除 cache-as-ramCAR并完成 MTRR 等收尾工作。其定义与开关位于 src/arch/x86/Kconfigconfig 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_BOOTBLOCKsrc/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_PPC64src/arch/ppc64/Kconfigarm64 支持启动 FITuImagepayloadFIT 加载器实现于 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_STAGESandy/Ivy Bridge 与 Haswell 平台改用 postcar 拆除 CAR减少各芯片组重复的 CAR teardown 代码cpu/intel/slot_1 切换到不同的 CAR 设置Slot 1 老平台Pentium II/III 时代采用另一套 CAR 初始化方案放弃 FSP1.0 的 Sandy/Ivy Bridge 启动路径FSPFirmware Support Package1.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_CN81XXIntel 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_CBMEME7505至强双路成为 CBMEM 早期化支持的一员nb/intel/i945、e7505、pineview、x4x、gm45、i440bx 迁移到POSTCAR_STAGECAR 拆除流程统一化nb/intel/i440bx、e7505 迁移到RELOCATABLE_RAMSTAGEramstage 采用可重定位模块可加载到任意地址intel/x4x 增加 DDR3 支持x4xG45 时代内存控制器扩展至 DDR3nb/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 与 smihandlerSMM 初始化与 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.0binutils 2.30IASL 20180810ACPI 编译器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是否符合构建预期。赞分享固件嵌入式操作系统驱动开发【免费下载链接】corebootRead-only mirror of https://review.coreboot.org/coreboot.git. Synced every hour. We dont handle Pull Requests.项目地址https://gitcode.com/gh_mirrors/co/coreboot点击查看免费下载相关推荐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固件嵌入式操作系统驱动开发上一篇YOLOv10 训练全流程中的 Ultralytics HUB 回调机制从指标上报到模型上传的源码级解析下一篇Home Manager 20.09 版本发布解读stateVersion 机制、路径确定性化与窗口管理器配置迁移实战创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?
咨询建站