- 固件
- 嵌入式
- 操作系统
- 驱动开发
【免费下载链接】coreboot
Read-only mirror of https://review.coreboot.org/coreboot.git. Synced every hour. We don't handle Pull Requests.
本文围绕 coreboot 仓库中 Star Labs StarFighter Mk I(Meteor Lake 平台,代号starlabs_starfighter_mtl)的官方主板文档展开,完整继承原文档的硬件规格、构建前置条件与烧录参数,并结合 src/mainboard/starlabs/starfighter 目录下的真实板级源码,讲解 SPD 内存参数索引、VBT 双版本选择、Flash 布局与 ACPI/USB 拓扑等实现细节。读完本文,你将能够独立完成该机型 coreboot 固件的构建,理解其配置项与板级代码的对应关系,并掌握通过 fwupd 安全刷写固件的完整前置要求。
硬件规格总览
StarFighter Mk I 是 Star Labs 面向高性能创作场景的笔记本平台,其固件支持要点在原文档 starfighter_mtl.md 中列得相当完整:
- CPU:Intel Core Ultra 125H(Meteor Lake)或 Intel 285H(Arrow Lake),完整处理器参数可在 Intel ARK 中查询;
- EC(嵌入式控制器):ITE IT5570E,负责背光键盘(标准 PS/2 键码 + SCI 热键)、电池管理、USB-C PD 充电、挂起/恢复;
- GPU:Intel Iris Xe 核显。文档明确建议启用GOP driver,并提供VBT文件;显示输出包括 16 英寸 eDP 屏幕(3840×2400 或 2560×1600)、HDMI 视频、USB-C DisplayPort 视频;
- 内存:32 GB 或 64 GB 板载 LPDDR5(不可更换);
- 网络:AX210 2230 规格 WiFi/蓝牙模块;
- 音频:Realtek ALC235,内置扬声器、可拆卸麦克风、3.5 mm 耳麦复合接口,以及 HDMI 与 USB-C DisplayPort 音频通路;
- 存储:2 × M.2 PCIe SSD + RTS5129 MicroSD 读卡器;
- USB/接口:1920×1080 可拆卸 CCD 摄像头、2 × Thunderbolt 4(左侧)、左/右各 USB 3.1 Gen 2 Type-A、右侧 USB 3.1 Gen 1 Type-A。
在板级代码层面,src/mainboard/starlabs/starfighter/board_info.txt 记录了该机的固件身份标识:
Vendor name: Star Labs Board name: StarFighter Category: laptop ROM protocol: SPI ROM socketed: n Flashrom support: y这些信息会进入 SMBIOS/硬件识别,也与后文“Flash 芯片不可插拔(socketed: no)”的描述相互印证。
构建 coreboot:前置文件与构建命令
构建前置条件(blobs 文件)
构建 StarFighter 的 coreboot 之前,必须准备以下二进制文件(原文档 Preliminaries 部分):
| 文件 | 说明 | 必需性 |
|---|---|---|
descriptor.bin | Intel Flash Descriptor(SPI 区域划分、STRP/Region Access 等策略) | 必需 |
me.bin | Intel Management Engine 固件 | 必需 |
ec.bin | ITE 嵌入式控制器固件 | 必需 |
Logo.bmp | Windows 3.1 BMP 格式开机画面 | 可选 |
这些文件位于 Star Labs 自有的StarLabsLtd/blobs仓库(GitHub),构建时它替代标准的 3rdparty/blobs 仓库。这与 Star Labs 全系主板的通用构建文档 building.md 一致——通用文档同样要求descriptor.bin、me.bin、ec.bin三个必需文件,并统一使用 StarLabsLtd/blobs 作为 blobs 来源。
注意:
descriptor.bin不是可缺省的占位文件。StarFighter 系列的 Kconfig 强制选择了VALIDATE_INTEL_DESCRIPTOR,即构建/运行时会对 Flash Descriptor 做校验,Descriptor 内容必须与硬件实际引脚配置匹配。
构建命令
原文档给出的可构建镜像的命令序列如下(使用config.starlabs_starfighter_mtl作为 defconfig):
make distclean make defconfig KBUILD_DEFCONFIG=configs/config.starlabs_starfighter_mtl make对应关系说明:
config.starlabs_starfighter_mtl对应 Kconfig 符号BOARD_STARLABS_STARFIGHTER_MTL,其定义位于 Kconfig;- 该符号选择
BOARD_STARLABS_STARFIGHTER_SERIES(系列公共项)以及SOC_INTEL_METEORLAKE/SOC_INTEL_METEORLAKE_U_H,即 Meteor Lake U/H 系列 SoC; - 同目录下的
starlabs_starfighter_rpl变体(Arrow Lake)对应BOARD_STARLABS_STARFIGHTER_RPL,二者共享系列公共 Kconfig、板级目录不同 variant 子目录(mtl与rpl)。
需要说明的一点:当前 coreboot 上游主线的configs/目录中并未包含config.starlabs_starfighter_mtl的现成配置文件(上游 configs 多为各厂商提交到上游的示例配置),该配置由 Star Labs 在其分发流程中维护并随 StarLabsLtd/blobs 体系使用。若在当前仓库直接执行make defconfig找不到该文件,可通过make menuconfig手工选择Star Labs厂商下的StarFighter(MTL 变体)得到等效配置。
关键 Kconfig 选项解读
从 Kconfig 的BOARD_STARLABS_STARFIGHTER_SERIES选项块可以看到 StarFighter 系列的固件特性清单,逐条对应原文档的硬件描述:
config BOARD_STARLABS_STARFIGHTER_SERIES def_bool n select BOARD_ROMSIZE_KB_32768 # 32 MiB SPI Flash select CSE_DEFAULT_CFR_OPTION_STATE_DISABLED select DRIVERS_EFI_VARIABLE_STORE # EFI 变量存储 select DRIVERS_OPTION_CFR_ENABLED select DRIVERS_GFX_GENERIC # 通用 GPU 驱动(承载 GOP/VBT 初始化) select DRIVERS_INTEL_PMC # Intel 平台管理器(电源/热) select DRIVERS_INTEL_USB4_RETIMER # TB4 信号重定时器 select DRIVERS_I2C_HID # EC/触摸板 I2C HID 通信 select EC_STARLABS_FAN select EC_STARLABS_MERLIN # ITE EC(Merlin)通信框架 select HAVE_ACPI_RESUME select HAVE_ACPI_TABLES select HAVE_HDA_DMIC # 板载数字麦克风(ALC235) select HAVE_SPD_IN_CBFS # SPD 数据打包进 CBFS select INTEL_GMA_HAVE_VBT # 内置 VBT select INTEL_LPSS_UART_FOR_CONSOLE select MAINBOARD_HAS_TPM2 select MEMORY_MAPPED_TPM select NO_UART_ON_SUPERIO select PMC_IPC_ACPI_INTERFACE select SOC_INTEL_COMMON_BLOCK_HDA_VERB select SOC_INTEL_COMMON_BLOCK_TCSS select SOC_INTEL_ENABLE_USB4_PCIE_RESOURCES select SPD_READ_BY_WORD select SPI_FLASH_WINBOND # Winbond W25Q256 select SYSTEM_TYPE_LAPTOP select TPM_MEASURED_BOOT select VALIDATE_INTEL_DESCRIPTOR select STARLABS_NVME_POWER_SEQUENCE其中几个与原文档直接对应的点值得注意:
BOARD_ROMSIZE_KB_32768:镜像尺寸上限 32 MiB,正好等于后文 Flash 芯片容量(Winbond W25Q256,32 MiB);SPI_FLASH_WINBOND:与原文档 flashing 表格中 Vendor = Winbond 一致;HAVE_SPD_IN_CBFS+INTEL_GMA_HAVE_VBT:分别对应“SPD 文件随固件内置”与“提供 VBT”两条硬件说明;MAINBOARD_PART_NUMBER的默认值在 MTL 变体下为"StarFighter Mk II"、RPL 变体下为"StarFighter Mk I"——即硬件家族名沿用 Mk I/Mk II 的命名体系,MTL 板对应的 Kconfig 主目录仍为starlabs/starfighter。
此外MB_STARLABS_PL4_WATTS默认 80 W(PL4 功耗策略)、CCD_PORT默认 4(摄像头所在 USB2 端口号,在 devicetree 中以CONFIG_CCD_PORT形式被引用)、TPM_PIRQ在 MTL 下默认0x3d,这些都是该板特有的板级默认值,可在 defconfig 基础上按需调整。
板级实现细节:从源码看 MTL 变体的关键逻辑
SPD:按内存配置 strap 选择 CBFS 中的 SPD 索引
原文档指出该机为 32 GB 或 64 GB 板载 LPDDR5。由于内存不可更换,coreboot 并不在运行时读取 SPD 总线,而是把不同容量/速率组合的 SPD 数据文件打包进 CBFS,按硬件 strap 选择。这一机制在源码中有完整体现:
board_id.c 中的get_memory_config_straps()读取 4 个 ID GPIO(GPP_B05~GPP_B08)判定内存容量:
/* * | | ID3 | ID2 | ID1 | ID0 | * | 32GB | 1 | 0 | 0 | 0 | -> 13 * | 64GB | 1 | 1 | 0 | 1 | -> 13 + 4 + 1 = 18? 见下方注释 */ gpio_t spd_id[] = { GPP_B05, GPP_B06, GPP_B07, GPP_B08 }; return (uint8_t)gpio_base2_value(spd_id, ARRAY_SIZE(spd_id));romstage.c 再把 strap 值与用户可选的内存速率档位(5500/6400/7500)合成 CBFS 索引:
static uint8_t strap_to_memcfg_index(uint8_t strap) { switch (strap) { case 13: /* 32GB */ return 0; default: /* 64GB */ return 1; } } static uint8_t memcfg_and_speed_to_cbfs_index(uint8_t memcfg, unsigned int speed) { if (speed > 2) speed = 2; return (uint8_t)(memcfg * 3 + speed); }即索引 = 容量档位(0/1) × 3 + 速率档位(0~2),与 spd/Makefile.mk 中的打包顺序严格对应(MTL 平台依次打包32gb-mtl-5500/6400/7500、64gb-mtl-5500/6400/7500,共 6 个.spd.json)。fsp_memory_mainboard_version()最终把这个索引交给 FSP 的 M_UPD,完成内存初始化参数选择。这就是为什么 spd/ 目录中存在按容量与速率命名的成套 JSON 文件——每一个都对应一种 strap+速率组合。
VBT:两套 VBT 按屏幕分辨率选择
原文档提到“GOP driver 推荐、提供 VBT”,且屏幕存在 3840×2400 与 2560×1600 两种规格。板级代码用同一套 strap 位区分这两种屏幕,并在 ramstage.c 中动态选择 VBT 文件名:
const char *mainboard_vbt_filename(void) { if (get_memory_config_straps() == 13) return "vbt_qhd.bin"; return "vbt.bin"; }对应的 variants/mtl/Makefile.mk 将第二套 VBT 以别名写入 CBFS:
$(call add_vbt_to_cbfs, vbt_qhd.bin, data_qhd.vbt)即 CBFS 中同时存在vbt.bin(高分辨率面板)与vbt_qhd.bin(QHD 面板),ramstage 根据硬件实际面板选择加载。data.vbt与data_qhd.vbt两个源文件均位于 variants/mtl/ 目录。
设备树:iGPU 输出、WiFi 与双 SSD 拓扑
MTL 变体的 devicetree.cb 把硬件规格逐条落实为设备树节点,可直接对照原文档 Specs 阅读:
- iGPU:挂载
drivers/gfx/generic,声明 6 个显示设备:LCD0(eDP 面板)、DD01(HDMI)、DD02/DD03(两路 Type-C DisplayPort,并绑定 ACPI 物理位置属性ACPI_PLD_TYPE_C(LEFT, CENTER, ...)),与文档中“eDP + HDMI + USB-C DP”三路输出一致; - WiFi:挂在
pcie_rp9,SMBIOS 槽位描述为M.2/M 2230、Gen3×1,并挂载rtd3芯片实现运行时 D3 电源管理(enable/reset GPIO 分别为 GPP_B19 / GPP_H02); - SSD:
pcie_rp10声明为M.2/M 2280的 x4 插槽(另一颗 SSD 由 CPU 直连通道承载),同样启用 rtd3; - USB 拓扑:
xhci节点逐端口声明了后部/前置 USB Type-C、左/右 Type-A、读卡器、内置摄像头(usb2_ports[CONFIG_CCD_PORT])与内置蓝牙,每个端口都绑定了物理位置描述(PLD),与文档中“左 2×TB4 + 3×Type-A + 摄像头”的接口布局逐一对应; - TB4:
tbt_pcie_rp0/1两个 Thunderbolt 端口节点开启,tcss_dma0下挂载drivers/intel/usb4/retimer重定时器(对应 Kconfig 的DRIVERS_INTEL_USB4_RETIMER)。
Flash 布局(board.fmd)
MTL 变体的 Flash 分区定义在 board.fmd:
FLASH 0x2000000 { SI_ALL 0x1000000 { SI_DESC 0x4000 SI_ME 0xbb1000 } SI_BIOS 0x1000000 { EC@0x0 0x20000 RW_MRC_CACHE@0x20000 0x10000 SMMSTORE@0x30000 0x80000 CONSOLE@0xB0000 0x20000 FMAP@0xD0000 0x1000 COREBOOT(CBFS) } }整片 32 MiB(0x2000000)Flash 被划分为两个约 16 MiB 的镜像区:SI_ALL区含descriptor.bin(4 KiB,SI_DESC)与me.bin(约 11.9 MiB,SI_ME);SI_BIOS区则依次放置 EC 固件(128 KiB,ec.bin)、MRC 内存缓存、SMMSTORE、console 数据、FMAP 表,剩余空间全部交给 coreboot CBFS。这一布局解释了原文档为什么要求三个 blobs 文件——descriptor.bin、me.bin、ec.bin恰好一一对应 Flash 中SI_DESC、SI_ME、EC三个固定区域。
Flashing:通过 fwupd 刷写 coreboot
原文档给出的 Flash 芯片参数表如下(与board_info.txt的Flashrom support: y、Kconfig 的SPI_FLASH_WINBOND相互印证):
| 属性 | 值 |
|---|---|
| Socketed flash(可插拔) | no |
| Vendor | Winbond |
| Model | W25Q256.V |
| Size | 32 MiB |
| Package | SOIC-8 |
| Internal flashing(内部刷写) | yes |
| External flashing(外部刷写) | yes |
Star Labs 推荐的刷写方式是 fwupd(LVFS 固件更新通道),完整要求与步骤见 common/flashing.md:
fwupd 版本:≥ 1.5.6。用
fwupdmgr --version检查;在 Ubuntu 20.04/20.10、Linux Mint 20.1、elementaryOS 6 上可通过 Star Labs 的 PPA 安装:sudo add-apt-repository ppa:starlabs/ppa sudo apt update sudo apt install fwupdManjaro 用户:
sudo pacman -Sy fwupd-git flashrom-starlabs。电池与电源:电量 ≥ 30%,且必须连接充电器(USB-C 或 DC 口)。刷写过程中断电会导致变砖风险,这是硬性要求。
关闭 BIOS Lock:从原厂 AMI 固件切换到 coreboot 前,必须在 BIOS 设置中关闭 BIOS Lock。操作路径为:关机 → 开机时按住
F2进入 BIOS →Advanced选项卡找到BIOS Lock→ 设为Disabled→F10保存退出。
分支切换(switch branch):
fwupdmgr refresh --force fwupdmgr switch-branch刷新 LVFS 固件清单后,
switch-branch会列出可用分支(AMI 原厂 / coreboot),输入对应编号并确认。切换完成后需要重启,且下次重启最长可耗时约 5 分钟,期间切勿断电或断开充电器。之后即持续接收所选分支的固件更新;分支可随时来回切换。
小结与延伸阅读
本文以 starfighter_mtl.md 为骨架,覆盖了三块核心内容:
- 硬件规格:Meteor Lake/Arrow Lake 平台、ITE EC、双 VBT 面板、LPDDR5 板载内存、双 M.2 SSD 与 TB4 接口布局;
- 构建:blobs 三件套(descriptor/me/ec)+ 可选 Logo.bmp、
KBUILD_DEFCONFIG三行构建命令,以及 Kconfig 中各 select 项与硬件的对应关系; - 刷写:Winbond W25Q256(32 MiB,SOIC-8)的 fwupd 刷写全流程,包括版本要求、BIOS Lock 关闭与分支切换注意事项。
进一步深入可阅读:
- 板级源码入口 src/mainboard/starlabs/starfighter:
Kconfig、devicetree(variants/mtl/devicetree.cb)、board.fmd、cfr.c(运行时 PCIE 电源管理选项); - 内存参数体系 spd/Makefile.mk 与各
*.spd.json文件,以及 romstage.c 中的索引计算逻辑; - Star Labs 全系通用构建与刷写文档 building.md、flashing.md;
- 同平台兄弟机型(StarBook/StarLite 系列)的文档位于 Documentation/mainboard/starlabs/ 目录,其构建流程与 StarFighter 一致,仅 blobs 与配置名不同。
适用前提说明:本文所有命令与配置均以当前 coreboot 仓库源码为准;config.starlabs_starfighter_mtl配置文件由 Star Labs 分发体系维护,上游主线configs/目录当前未收录该文件,使用make menuconfig手工选择等效选项即可;刷机操作务必在连接电源、电量达标且已关闭 BIOS Lock 的前提下进行。
- 固件
- 嵌入式
- 操作系统
- 驱动开发
【免费下载链接】coreboot
Read-only mirror of https://review.coreboot.org/coreboot.git. Synced every hour. We don't handle Pull Requests.
相关推荐
StarBook Mk V 实战指南:在 coreboot 中构建与刷写 Star Labs Tiger Lake 笔记本固件
StarBook Mk V 实战指南:在 coreboot 中构建与刷写 Star Labs Tiger Lake 笔记本固件 本文以 coreboot 官方文
固件嵌入式操作系统驱动开发coreboot 移植实战:Star Labs StarBook Mk V(Tiger Lake)硬件规格、构建与刷写全流程
coreboot 移植实战:Star Labs StarBook Mk V(Tiger Lake)硬件规格、构建与刷写全流程 本文基于 coreboot 仓库中
固件嵌入式操作系统驱动开发Star Labs Lite Mk III(StarLite Mk III)coreboot 实战指南:Gemini Lake 板级配置、IFWI 固件与 fwupd 刷写
Star Labs Lite Mk III(StarLite Mk III)coreboot 实战指南:Gemini Lake 板级配置、IFWI 固件与 fw
固件嵌入式操作系统驱动开发
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考