ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

ASRock H77 Pro4-M 主板 coreboot 移植支持指南:规格、刷写与硬件监控

ASRock H77 Pro4-M 主板 coreboot 移植支持指南:规格、刷写与硬件监控
  • 固件
  • 嵌入式
  • 操作系统
  • 驱动开发

【免费下载链接】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 官方文档 Documentation/mainboard/asrock/h77pro4-m.md 为骨架,系统介绍 ASRock H77 Pro4-M 这块 microATX 桌面主板在 coreboot 下的完整支持状况、固件刷写流程、NCT6776 Super I/O 风扇控制、串口针脚定义与 eSATA 复用机制,并结合仓库中 src/mainboard/asrock/h77pro4-m 的 Kconfig、设备树与启动早期初始化源码做纵深解析。读完本文,你将掌握该板从选型确认、原生内存初始化、刷写固件到配置板载硬件的完整实战路径。

主板技术规格

ASRock H77 Pro4-M 是一块面向 Intel Sandy Bridge(SNB)与 Ivy Bridge(IVB)处理器的 microATX 尺寸桌面主板,采用 LGA 1155 插座。coreboot 侧的核心硬件组成如下:

部件规格
北桥Intel Sandy Bridge(详见 北桥文档)
南桥Intel H77(bd82x6x / Panther Point)
CPU 插座LGA 1155
内存4 × DDR3-1600
Super I/ONuvoton NCT6776
音频Realtek ALC892
网络Realtek RTL8111E(千兆以太网)
串口板载针脚排针(RS-232)

这些配置在源码中均有对应依据。主板选择入口定义于 Kconfig.name(BOARD_ASROCK_H77PRO4_M),而 Kconfig 则通过一系列select语句确定了整块板的功能集合:

  • NORTHBRIDGE_INTEL_SANDYBRIDGE、SOUTHBRIDGE_INTEL_C216:南北桥芯片组;
  • SUPERIO_NUVOTON_NCT6776:板载 Super I/O;
  • DRIVERS_ASMEDIA_ASM1061:ASMedia ASM1061 PCIe-to-SATA 桥接芯片驱动;
  • USE_NATIVE_RAMINIT:使用 coreboot 原生 DDR3 内存初始化(NRI),不需要 vendor MRC 二进制;
  • MAINBOARD_HAS_LIBGFXINIT与INTEL_GMA_HAVE_VBT:使用 libgfxinit 驱动集成显卡,并携带 VBT 文件data.vbt;
  • HAVE_ACPI_RESUME、HAVE_ACPI_TABLES:支持 ACPI 休眠恢复与 ACPI 表生成;
  • HAVE_CMOS_DEFAULT、HAVE_OPTION_TABLE:内置 CMOS 默认值与可选参数表(这是下文nvramtool能够修改cpu_fan_tach_src的前提);
  • BOARD_ROMSIZE_KB_8192:固件 ROM 容量 8 MiB。

board_info.txt 补充了板级元数据:类别为 desktop,发行年份 2012,ROM 采用 DIP-8 封装、SPI 协议、可插拔(socketed),且 flashrom 支持标志为 y。

设备树中的板载设备布局

devicetree.cb 完整刻画了板载设备拓扑,可与硬件规格一一对应:

  • 北桥侧启用host_bridge、peg10(PCIE1 x16 插槽,SMBIOS 描述为 Gen3 x16)、igd(集成显卡);
  • 南桥侧启用xhci、ehci1/ehci2、hda(HD Audio)、mei1,关闭gbe(板载千兆网由 PCIe 根端口下的 Realtek RTL8111E 提供,见pcie_rp6注释);
  • 四个 PCIe 根端口:pcie_rp1(PCIE4,Gen2 x4)、pcie_rp5(PCIE2,Gen2 x1)、pcie_rp6(RTL8111E GbE)、pcie_rp7(PCIE3,Gen2 x1)、pcie_rp8(ASM1061 SATA 控制器),与文档中“三条额外 PCIe 插槽”及 ASM1061 桥接 SATA 的表述吻合;
  • SATA 配置:sata_interface_speed_support = 0x3(支持 6 Gb/s 与 3 Gb/s)、sata_port_map = 0x3f(6 个端口全部映射),对应 PCH 的六个原生 SATA 口(两个 6 Gb/s、四个 3 Gb/s);
  • USB 配置:superspeed_capable_ports = 0x0000000f(4 个 USB3 端口具备超速能力)、xhci_switchable_ports = 0x0000000f,外加 14 端口usb_port_config表;
  • Super I/O 段(pnp 2e.x)启用了 Parallel port(0x378/IRQ5/DRQ3)、COM1(0x3f8/IRQ4)、Keyboard、HWM(硬件监控,基址 0x0290)以及多个 GPIO 逻辑设备;
  • subsystemid 0x1849 ...是 ASRock 的 PCI 子系统标识,贯穿北桥、南桥、HDA、PCIe 根端口等设备。

支持状态

官方文档给出的测试基线为 SeaBIOS 1.14.0 与 2019-07-12 的 slackware64-live(linux-4.19.50),后续又验证了 EDK II(MrChromebox 的 fork,origin/uefipayload_202207)与 SeaBIOS 1.16.1 场景。

Working(可用)

  • Sandy Bridge 与 Ivy Bridge CPU(实测 i5-2500、Pentium G2120);
  • 四条 DIMM 的原生内存初始化(USE_NATIVE_RAMINIT);
  • PS/2 复合端口(鼠标或键盘二选一);
  • libgfxinit 驱动的集成显卡,覆盖全部显示输出(DVI-D、HDMI、D-Sub)。这一点由 gma-mainboard.ads 佐证:HDMI1映射到 DVI-D 接口、HDMI3映射到 HDMI 接口、Analog映射到 D-Sub 接口;
  • PEG 插槽中的 PCIe 显卡,以及全部三条附加 PCIe 插槽;
  • 全部后置与内置 USB2/USB3 端口;
  • PCH 全部六个 SATA 口(两个 6 Gb/s、四个 3 Gb/s)与 ASM1061 桥接的两个 6 Gb/s SATA 口;
  • 后置 eSATA 接口(与一个 ASM1061 端口复用,详见下文);
  • 千兆以太网;串口控制台输出;
  • EDK II(MrChromebox fork)引导 Windows 10 (22H2) 与 Linux (5.19.17,经 GRUB 2);
  • SeaBIOS 1.16.1 引导 Windows 10(需 VGA BIOS)与 Linux(经 extlinux);
  • 使用 flashrom-1.2 进行内部刷写与外部刷写(外部刷写实测使用 Raspberry Pi 1);
  • S3 挂起/恢复(Linux 或 Windows 10 均可)、断电关机。

Not working(不可用)

  • 从 ASM1061 提供的两个 SATA 口引导系统;
  • NCT6776D Super I/O 的自动风扇控制(目前没有 OS 无关的自动调速,见下文)。

Untested(未测试)

  • EHCI debug、S/PDIF 音频;
  • 除绿色音频口外的其他音频接口及前置音频排针;
  • 并口、红外/CIR;
  • 除电源键以外的任何唤醒源。

刷写 coreboot

闪存芯片与分区布局

官方文档记录的闪存信息如下:

项目值
插槽式闪存是(socketed,可插拔)
芯片型号W25Q64.V
容量8 MiB
封装DIP-8
写保护无
双 BIOS 特性无
内部刷写支持

用ifdtool -f rom.layout backup.rom导出的闪存分区布局为:

00000000:00000fff fd # Flash Descriptor 00200000:007fffff bios # BIOS 00001000:001fffff me # Management Engine

注意 BIOS 区从 0x00200000 开始,意味着 ME 与描述符占据了低端 2 MiB,而可刷写的 BIOS 镜像实际放在高端 6 MiB。

内部刷写(Internal Programming)

主 SPI 闪存可用 flashrom 访问。默认情况下只有 BIOS 区可写;若要改动其他区域(ME 或闪存描述符),必须使用外部编程器。刷写 coreboot 的推荐命令:

$ sudo flashrom --noverify-all --ifd -i bios -p internal -w coreboot.rom

参数含义:

  • -p internal:使用主板自带 SPI 控制器(内部编程器);
  • --ifd:启用 Intel 闪存描述符解析,只操作指定区域;
  • -i bios:只写 BIOS 区域,避免触碰 ME 与描述符;
  • -w coreboot.rom:写入固件镜像;
  • --noverify-all:必须使用——因为 ME 区域即使对宿主机也不可读,若校验整个芯片会失败。

外部刷写则需取下 DIP-8 芯片,用 Raspberry Pi 等 SPI 编程器连接,配合-p linux_spi:path=/dev/spidevX.Y等外部编程器后端完成。

刷写与救砖的完整流程,请进一步阅读 刷写固件教程。

硬件监控与风扇控制

双 CPU 风扇排针的共享测速机制

板上 CPU 散热器风扇排针共有两个:CPU_FAN1 与 CPU_FAN2。它们在 Super I/O 上共享同一个风扇测速(tachometer)输入,由板载逻辑选择哪一路信号能够到达该输入,而这块选择逻辑由 Super I/O 的两根 GPIO 引脚控制。

该机制在启动早期初始化源码 early_init.c 中有精确实现。其注释说明:

  • 当 GP77(寄存器E1h[7])为0时,CPU_FAN1 的测速信号接通;
  • 当 GP76(寄存器E1h[6])为0时,CPU_FAN2 的测速信号接通;
  • 两者同时为0且两个风扇都接上时,测速读数会出错。

get_cpufanin_gpio_config()依据 CMOS 选项cpu_fan_tach_src返回写入寄存器E1h的值:

static u8 get_cpufanin_gpio_config(void) { switch (get_uint_option("cpu_fan_tach_src", CPU_FAN_HEADER_1)) { case CPU_FAN_HEADER_NONE: return 0xff; case CPU_FAN_HEADER_1: default: return 0x7f; case CPU_FAN_HEADER_2: return 0xbf; case CPU_FAN_HEADER_BOTH: return 0x3f; } }

该值随后在bootblock_mainboard_early_init()中通过pnp_write_config(GPIO6789_DEV, 0xe1, ...)写入,即在 bootblock 阶段就完成了测速源选择。对应地,cmos.layout 中定义了这个 2 位的用户选项(枚举 ID 7):

# cpu_fan_header (select which header provides the tachometer # signal to the Super I/O on its CPUFANIN input) 7 0 None 7 1 CPU_FAN1 7 2 CPU_FAN2 7 3 Both

cmos.default 给出的出厂默认值是cpu_fan_tach_src=CPU_FAN1。

用 nvramtool 修改风扇测速来源

如果固件构建时开启了CONFIG_USE_OPTION_TABLE(本板 Kconfig 已通过HAVE_OPTION_TABLE支持),用户可在运行时用 nvramtool 修改该设置:

$ sudo nvramtool -e cpu_fan_header [..] $ sudo nvramtool -w cpu_fan_header=CPU_FAN2 $ sudo nvramtool -w cpu_fan_header=None $ sudo nvramtool -w cpu_fan_header=Both
  • -e(--enum)列出该选项的取值;
  • -w(--write)写入新值,-r可读取当前值。

该设置重启后生效。虽然可以选择并同时连接两个风扇排针,但此时 Super I/O 会报告错误的风扇转速(两路信号在共享测速输入上互相干扰)。

无自动调速时的替代方案

当前固件层面没有 OS 无关的自动风扇控制(这对应“Not working”列表中的 NCT6776D 自动风扇控制缺失)。可以改用 lm-sensors 软件包中的fancontrol工具,在操作系统内基于传感器温度读取 PWM 输出,实现软件调速闭环。HWM 逻辑设备在 devicetree.cb 中被配置为基址0x0290,且 NCT6776 的 HWM 寄存器通过irq 0x30 = 0xe1启用了风扇转速感知引脚。

串口排针引脚定义

Super I/O 提供的串口 1(COM1,0x3f8/IRQ4,见 devicetree.cb 中device pnp 2e.2)暴露在板载排针上。RS-232 信号在排针上的分配方式很特别:排针引脚号与 DE-9 连接器引脚号直接一一对应。俯视图如下:

+---+---+ N/C | | 9 | RI -> pin 9 +---+---+ Pin 8 <- CTS | 8 | 7 | RTS -> pin 7 +---+---+ Pin 6 <- DSR | 6 | 5 | GND -> pin 5 +---+---+ Pin 4 <- DTR | 4 | 3 | TxD -> pin 3 +---+---+ Pin 2 <- RxD | 2 | 1 | DCD -> pin 1 +---+---+

排查串口不工作的实用建议:

  • 检查你的挡板(bracket)是否采用相同的引脚分配,不同厂商的串口挡板排线定义可能不一致;
  • 切勿直接连接 TTL 电平设备——这是标准的 RS-232 电平,需要像 MAX232 这样的电平转换芯片才能与 TTL UART 对接。

固件侧串口初始化由bootblock_mainboard_early_init()中的nuvoton_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE)完成(early_init.c)。

eSATA 复用机制

后置 I/O 面板上的 eSATA 接口与内置接口 SATA3_A1 共享 ASM1061 上的同一个控制器端口。当 eSATA 上接入设备时,板载多路复用器芯片会断开内部接口与 SATA 控制器的连接,转而接通 eSATA 接口。

该状态可以通过 Super I/O 的 GPIO 引脚 GP23 观察:eSATA 接入设备时 GP23 为0,否则为1。这也是文档明确记录的硬件行为,配合 devicetree.cb 中pcie_rp8(ASM1061 SATA Controller)的启用配置即可理解整条链路。由于复用器的存在,两块盘无法同时工作——这也解释了“Not working”列表中“无法从 ASM1061 的两个 SATA 口引导”的已知限制:引导盘应接在 PCH 原生 SATA 口上。

构建与调试要点

  • 固件镜像用标准 coreboot 构建流程生成(参考 构建系统文档),主目录MAINBOARD_DIR为asrock/h77pro4-m,MAINBOARD_PART_NUMBER为H77 Pro4-M;
  • Makefile.mk 显示:early_init.c与gpio.c同时编入 bootblock 与 romstage,gma-mainboard.ads在开启 libgfxinit 时编入 ramstage——这印证了风扇测速源选择在 bootblock 阶段即生效、GPIO 配置在 romstage 早期完成的时序;
  • 板级 GPIO 的完整设置(PCH GPIO set1/set2/set3 的模式、方向、电平)见 gpio.c,可作为对照板卡硬件手册排查外设状态;
  • 音频设备 verb 表(Realtek ALC892 与 Intel Display Audio/HDMI 音频)见 hda_verb.c,ACPI 表(DSDT、_WAK/_PTS)见 dsdt.asl 与 acpi/platform.asl;
  • CMOS 中还可配置gfx_uma_size(IGP 显存,32M–512M 共 16 档)、sata_mode(AHCI/Compatible/Legacy)、power_on_after_fail等参数,枚举定义均见 cmos.layout。

综上,ASRock H77 Pro4-M 是 coreboot 对 Sandy/Ivy Bridge 平台的成熟移植样本:原生内存初始化、libgfxinit 显示输出、完整 SATA/USB/PCIe 支持一应俱全,配合可插拔 DIP-8 闪存与内部刷写支持,是一块对刷机用户相当友好的桌面主板。使用时请留意本文列出的已知限制(ASM1061 引导、自动风扇控制、eSATA/内部 SATA 复用)以规避坑点。

  • 固件
  • 嵌入式
  • 操作系统
  • 驱动开发

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

相关推荐

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

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进