news 2026/10/15 6:52:41

coreboot 对 System76 Darter Pro 9(darp9)的支持:硬件规格、源码实现与固件刷写指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
coreboot 对 System76 Darter Pro 9(darp9)的支持:硬件规格、源码实现与固件刷写指南
  • 固件
  • 嵌入式
  • 操作系统
  • 驱动开发

【免费下载链接】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 仓库中的主板支持文档与源码,系统梳理 System76 Darter Pro 9(内部代号 darp9,2023 年发布)的完整硬件规格、其在 coreboot 树中的源码实现(Kconfig 配置、设备树、GPIO、内存初始化与 HDA 音频),并给出基于 flashrom 的固件刷写方案。读完本文,你将掌握 darp9 在 coreboot 下的硬件组成、源码结构以及从备份到刷写完整 BIOS 区域的实操步骤。

硬件规格总览

darp9 是 System76 的 15.6 英寸轻薄本,搭载 Intel 第 13 代 Raptor Lake-P 移动处理器。官方主板文档 Documentation/mainboard/system76/darp9.md 给出的规格如下:

  • CPU
    • Intel Core i5-1340P
    • Intel Core i7-1360P
  • EC:ITE IT5570E,运行 System76 自研 EC 固件
  • 显卡与显示
    • Intel Iris Xe Graphics
    • eDP 15.6" 1920x1080@60Hz LCD
    • 1x HDMI
    • 1x DisplayPort 1.4 over USB-C
  • 内存:最高 64GB(2x32GB)双通道 DDR5 SO-DIMM @ 5600 MHz
  • 网络
    • 千兆以太网(Realtek RTL8111H)
    • M.2 NVMe/CNVi WiFi/蓝牙(Intel Wi-Fi 6E AX210/211)
  • 供电
    • 90W(19V,4.74A)AC 圆口适配器
    • USB-C 充电,兼容 65W 及以上充电器
    • 73Wh 4 芯锂离子电池(L140BAT-4)
  • 音频
    • Realtek ALC256 编解码器
    • 内置扬声器与麦克风
    • 3.5mm 耳麦二合一接口
    • HDMI、USB-C DisplayPort 音频
  • 存储
    • 2x M.2 PCIe NVMe Gen 4 SSD
    • MicroSD 读卡器(OZ711LV2)
  • USB
    • 1x USB Type-C(Thunderbolt 4)
    • 1x USB 3.2 Gen 2 Type-C
    • 1x USB 3.2 Gen 2 Type-A
    • 1x USB 2.0 Type-A
  • 尺寸:35.7cm x 22.05cm x 1.99cm,重 1.74kg

作为对照,同系列上一代 darp8 使用 DDR4-3200 内存与 Wi-Fi 6 AX200/201(见 Documentation/mainboard/system76/darp8.md),而 darp9 升级为 DDR5-5600 与 Wi-Fi 6E,这是该机型相对上一代最显著的两处变化。

源码中的 darp9:主板支持结构

darp9 在 coreboot 源码树中不是一个独立的src/mainboard/system76/darp9/目录,而是作为 Raptor Lake 系列主板的变体(variant)存在,公共逻辑位于 src/mainboard/system76/rpl/:

src/mainboard/system76/rpl/ ├── Kconfig / Kconfig.name # 板型选择与公共配置 ├── Makefile.mk # 编译单元与 SPD 来源 ├── devicetree.cb # 公共设备树(SoC 级配置) ├── board.fmd / board-s.fmd # 32MiB flash 布局 ├── bootblock.c / ramstage.c # 各阶段入口 └── variants/ └── darp9/ # darp9 专属配置 ├── board_info.txt # 板名与发布年份 ├── data.vbt # 显卡 VBT ├── gpio.c # 完整 GPIO 表 ├── gpio_early.c # bootblock 早期 GPIO(调试 UART) ├── hda_verb.c # ALC256 音频 verb ├── overridetree.cb # 变体设备树覆盖 └── romstage.c # 内存初始化
  • 板型选择定义在 src/mainboard/system76/rpl/Kconfig.name(config BOARD_SYSTEM76_DARP9),通过 src/mainboard/system76/Kconfig 的choice "Mainboard model"供用户选择。
  • src/mainboard/system76/rpl/Kconfig 中BOARD_SYSTEM76_DARP9选择公共配置BOARD_SYSTEM76_RPL_COMMON、PCIEXP_HOTPLUG以及SOC_INTEL_ALDERLAKE_PCH_P(P 系列 PCH)。
  • 公共配置里与 darp9 直接相关的重要项包括:
    • BOARD_ROMSIZE_KB_32768:32MiB 固件,与文档中的 flash 芯片容量一致;
    • MAINBOARD_HAS_TPM2、MEMORY_MAPPED_TPM、TPM_MEASURED_BOOT:板载 TPM2 与安全启动测量;
    • HAVE_ACPI_RESUME、HAVE_ACPI_TABLES、HAVE_CMOS_DEFAULT、HAVE_OPTION_TABLE:ACPI S3 唤醒与 CMOS 选项表(cmos.layout 定义了 boot_option、debug_level、me_state 等字段);
    • USE_PM_ACPI_TIMER默认n:禁用 PM Timer 以省电;
    • UART_FOR_CONSOLE默认 0(P 系列 PCH),早期 GPIO 在 gpio_early.c 中将 GPP_H10/GPP_H11 配为 UART0 收发。
  • SMBIOS 产品名映射为 "Darter Pro"(Kconfig),版本号即darp9(Kconfig),board_info.txt 记录发布年份为 2023。

编译单元与 SPD

Makefile.mk 展示了各阶段如何组合变体文件:bootblock-y编入gpio_early.c,romstage-y编入romstage.c,ramstage-y编入hda_verb.c与gpio.c。同时SPD_SOURCES = samsung-M425R1GB4BB0-CQKOD引用了 src/mainboard/system76/rpl/spd/samsung-M425R1GB4BB0-CQKOD.spd.hex,这是一条 Samsung 内存模组的 SPD 数据,供 DDR5 初始化参考。

关键子系统实现细节

内存初始化(DDR5 双通道)

romstage.c 中的mainboard_memory_init_params()把内存拓扑描述为MEM_TOPO_DIMM_MODULE,类型为MEM_TYPE_DDR5,并开启 ECT(Early Command Training):

const struct mb_cfg board_cfg = { .type = MEM_TYPE_DDR5, .ect = true, .LpDdrDqDqsReTraining = 1, }; const struct mem_spd spd_info = { .topo = MEM_TOPO_DIMM_MODULE, .smbus = { [0] = { .addr_dimm[0] = 0x50, }, [1] = { .addr_dimm[0] = 0x52, }, }, };

两个 DIMM 槽位的 SPD 地址分别为 0x50 与 0x52,half_populated = false表示双通道均会插满探测;同时将 FSP-M 的DmiMaxLinkSpeed设为 4(Gen 4)以匹配 M.2 PCIe Gen 4 SSD。

设备树:PCIe、USB 与触摸板

变体覆盖设备树 overridetree.cb 详细描述了板载外设的 PCIe 根端口分配:

设备PCIe RP通道时钟源说明
SSD2CPU RP#1 (pcie4_0)x4clk 0第二块 M.2 NVMe,带 RTD3 电源管理(复位脚 GPP_F20)
SSD1CPU RP#3 (pcie4_1)x4clk 4第一块 M.2 NVMe,带 RTD3(复位脚 GPP_B16)
WLANPCH RP#5 (pcie_rp5)x1clk 2CNVi/Wi-Fi 无线网卡
读卡器PCH RP#6 (pcie_rp6)x1clk 5MicroSD 读卡器,启用 PCIE_RP_HOTPLUG
GLANPCH RP#8 (pcie_rp8)x1clk 6Realtek RTL8111H 千兆网卡

两个 CPU 直连 NVMe 根端口均使能PCIE_RP_LTR | PCIE_RP_AER,并挂载soc/intel/common/block/pcie/rtd3子芯片实现设备运行时 D3 电源门控。公共设备树 devicetree.cb 中还启用了eist_enable(Enhanced Intel SpeedStep)、enable_c6dram(C6 DRAM)、tcc_offset = 8(温度控制偏移),并为 Raptor Lake J0/Q0 步进禁用了 package C-state demotion 作为 S0ix 问题的规避手段。

USB 端口通过 XHCI 配置:usb2_ports定义了 7 个 USB2 端口(两个 Type-A、J_TYPEC1、指纹、Thunderbolt 的 J_TYPEC2、摄像头、蓝牙),usb3_ports定义 3 个 USB3 端口,并用drivers/usb/acpi为每个端口生成 ACPI 描述(Type-A / USB-C 切换 / 内部设备)。Thunderbolt 4 由tbt_pcie_rp0与tcss_dma0(SOC_INTEL_ALDERLAKE_PCH_P的 TCSS)支持。

触摸板挂在 I2C0 总线上,设备树同时声明了 ELAN0412(地址 15)与 FTCS1000(地址 38)两个 HID 触摸板,中断均为 GPP_E12(电平触发低有效),通过generic.detect = 1按探测结果二选一启用。

GPIO 与音频

gpio.c 是约 220 行的完整 pad 配置表,覆盖电源状态(PWROK/DEEP/PLTRST)、eSPI EC 通道、M.2 SSD 复位与电源使能(SSD1_PWR_EN、SSD2_PWR_EN)、无线网卡复位/使能(WLAN_RST#_R、GPP_E3_WLAN_EN)、SD 读卡器使能、CCD_WP# 等;其中 UART0、PCIe CLKREQ、CNVi CLKREQ 等引脚交由 FSP 或 bootblock 阶段配置。

音频部分 hda_verb.c 定义了 Realtek ALC256 的 HDA verb 序列(vendor_id = 0x10ec0256,subsystem_id = 0x155851b1):0x14 为内置扬声器、0x21 为耳麦接口、0x12 为内部麦克风,其余引脚禁用。

EC(Embedded Controller)

darp9 使用 ITE IT5570E 运行 System76 开源 EC 固件,对应 coreboot 驱动位于 src/ec/system76/。驱动提供system76_ec_cmd()命令通道(system76_ec.h),ACPI 部分(ec.asl)实现 EC0 设备、电源/电池/按键/亮度等控制方法。公共配置通过select EC_SYSTEM76_EC启用,EC Kconfig 提供电池充电阈值(EC_SYSTEM76_EC_BAT_THRESHOLDS)等选项;darp9 未选择EC_SYSTEM76_EC_DGPU,即该机型无独显风扇控制需求。主板上 eSPI 的 EC 通道解码(gen1_dec0x68、gen2_dec0xe00、gen3_dec0xf00)在 devicetree.cb 中配置。

刷写 coreboot

Flash 芯片信息

darp9 的 flash 芯片位于左侧内存插槽上方,丝印 U22,采用非插座(焊盘)封装。官方文档给出的芯片参数如下:

项目值
Socketed flash否
VendorGigaDevice
ModelGD25B256E
容量32 MiB
封装WSON-8
内部刷写支持
外部刷写支持

32MiB 容量与公共配置BOARD_ROMSIZE_KB_32768及 board.fmd(FLASH 32M)一致。FMD 布局将 flash 划分为SI_DESC(IFD)、SI_ME(Intel ME)、SI_BIOS三个区域,BIOS 区域内含RW_MRC_CACHE、SMMSTORE(PRESERVE)(SMM 存储,保留区)与只读的COREBOOT(CBFS)。

内部刷写(推荐)

机器已运行 coreboot 时,可通过 flashrom 的 internal programmer 在系统内直接刷写:

flashrom -p internal -w coreboot.rom

更稳妥的做法是只更新 BIOS 区域、不动 IFD 与 ME。coreboot 官方刷写教程 Documentation/tutorial/flashing_firmware/index.md 提供了两种方式:

  1. 布局文件方式:先从原厂固件备份生成布局,再按布局只写 bios 区域:
ifdtool -f rom.layout backup.rom flashrom -l rom.layout -i bios -w coreboot.rom -p internal
  1. IFD 自动布局方式:flashrom 1.0 及以上可直接读取 IFD 中的布局(适用于 Intel ICH7+,且外部刷写时 flash 唯一):
flashrom --ifd -i bios -w coreboot.rom -p internal

外部刷写

若机器无法启动或需要恢复原厂固件,可借助编程器从外部刷写。由于 flash 芯片(GD25B256E,WSON-8 封装)直接焊在主板上,需要连接编程器夹子或飞线到芯片引脚;刷写前务必确认芯片方向,不要依赖丝印漆点判断 1 脚。外部刷写同样建议使用-i bios限定区域,避免破坏 IFD/ME。更多细节可参考 Documentation/tutorial/flashing_firmware/ 下的教程(含 内部刷写说明 与外部供电注意事项 no_ext_power.md)。

⚠️ 刷写固件存在损坏硬件的风险,操作前务必备份原厂固件并核对编程器接线与芯片型号。

延伸阅读

  • 主板官方文档:Documentation/mainboard/system76/darp9.md
  • 主板源码目录:src/mainboard/system76/rpl/ 与变体 variants/darp9/
  • EC 驱动:src/ec/system76/
  • 同系列对比:darp8.md、darp7.md、darp6.md
  • 刷写教程:Documentation/tutorial/flashing_firmware/index.md
  • 固件
  • 嵌入式
  • 操作系统
  • 驱动开发

【免费下载链接】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
点击查看免费下载

相关推荐

上一篇:群晖NAS百度网盘终极指南:从安装到排错完整教程
下一篇:终极摄像头流媒体解决方案:go2rtc完整安装与配置指南

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 6:52:15

激光频率梳3D轮廓技术在爆破工程孔深测量中的应用

1. 项目背景与核心需求在特种爆破工程领域,传爆深孔的加工精度直接影响爆破效果与安全性。传统孔深测量采用机械探针或超声波方式,存在接触损伤、精度受限(2mm级)等问题。我们团队研发的激光频率梳3D轮廓技术,实现了非…

作者头像 李华
网站建设 2026/10/15 6:52:02

Saga模式入门与实战:编排与协同模式、补偿设计原则与Java生产级实现

Saga模式入门与实战:编排与协同模式、补偿设计原则与Java生产级实现 在分布式系统中,Saga模式是一种通过将长事务拆解为多个可补偿的本地事务来维护数据最终一致性的架构模式。本文从核心概念讲起,深入对比编排与协同两种实现方式&#xff0c…

作者头像 李华
网站建设 2026/10/15 6:51:53

PHP应用集成CNN海草识别:跨语言推理服务架构与工程实践

1. 为什么要把CNN海草识别塞进PHP应用里第一次听到这个需求的人,十有八九会皱眉头:PHP 不是写网页、连数据库、渲染模板的吗,怎么跟卷积神经网络扯上关系了?我当初接到这个活儿的时候也是同样的反应。但把场景摊开来看&#xff0c…

作者头像 李华
网站建设 2026/10/15 6:50:32

jQuery和Bootstrap到底有什么区别?一文讲透定位与分工

先说结论:jQuery 和 Bootstrap 压根不是一个赛道上的东西。但既然这么多人把这两个词放在一起比了,就说明这种混淆背后有普遍原因——不是大家水平差,而是这两个老伙计经常在同一批项目里出现,时间久了,很多人就默认它…

作者头像 李华
网站建设 2026/10/15 6:50:10

基于Whisper与python-docx的听力语料转写与答案文档生成实战

简介:这份文档面向西北工业大学修读核心听力课程的学生,以及需要借助雨课堂平台完成听力练习与复习的学习者,集中整理了课程各单元的参考答案与要点提示,帮助解决课后核对、考前梳理和薄弱环节定位的问题。资源包共1个docx文件&am…

作者头像 李华
网站建设 2026/10/15 6:50:01

Qt QSplitter全面解析:可拖拽分栏布局的实战技巧

QSplitter 是 Qt 里一个特别容易被忽略的组件,但这几年做桌面端工具,我几乎每个项目都离不开它。如果你需要在界面里提供"可拖拽分割区域"的能力——比如编辑器左右分栏、文件管理器树状目录加详情列表、参数面板的上下折叠——QSplitter 就是…

作者头像 李华