- 固件
- 嵌入式
- 操作系统
- 驱动开发
【免费下载链接】coreboot
Read-only mirror of https://review.coreboot.org/coreboot.git. Synced every hour. We don't handle Pull Requests.
本文基于 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 | 通道 | 时钟源 | 说明 |
|---|---|---|---|---|
| SSD2 | CPU RP#1 (pcie4_0) | x4 | clk 0 | 第二块 M.2 NVMe,带 RTD3 电源管理(复位脚 GPP_F20) |
| SSD1 | CPU RP#3 (pcie4_1) | x4 | clk 4 | 第一块 M.2 NVMe,带 RTD3(复位脚 GPP_B16) |
| WLAN | PCH RP#5 (pcie_rp5) | x1 | clk 2 | CNVi/Wi-Fi 无线网卡 |
| 读卡器 | PCH RP#6 (pcie_rp6) | x1 | clk 5 | MicroSD 读卡器,启用 PCIE_RP_HOTPLUG |
| GLAN | PCH RP#8 (pcie_rp8) | x1 | clk 6 | Realtek 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 | 否 |
| Vendor | GigaDevice |
| Model | GD25B256E |
| 容量 | 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 提供了两种方式:
- 布局文件方式:先从原厂固件备份生成布局,再按布局只写 bios 区域:
ifdtool -f rom.layout backup.rom flashrom -l rom.layout -i bios -w coreboot.rom -p internal- 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.
相关推荐
coreboot 对 System76 Darter Pro 8(darp8)的支持与固件刷写指南
coreboot 对 System76 Darter Pro 8(darp8)的支持与固件刷写指南 本篇技术指南以 coreboot 仓库中 darp8 主板文
固件嵌入式操作系统驱动开发coreboot 对 System76 Adder Workstation 3(addw3)的支持:硬件规格、板级源码与固件刷写指南
coreboot 对 System76 Adder Workstation 3(addw3)的支持:硬件规格、板级源码与固件刷写指南 本文以 coreboot
固件嵌入式操作系统驱动开发coreboot 主板移植指南:System76 Darter Pro 6 (darp6) 硬件规格、设备树配置与固件刷写
coreboot 主板移植指南:System76 Darter Pro 6 darp6 硬件规格、设备树配置与固件刷写 本文基于 coreboot 官方仓库中的
固件嵌入式操作系统驱动开发
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考