解决华硕 X670e 系列主板在 Linux 上的断网故障

发表于 更新于

前言

如果你是华硕的 X670/X670E 系列主板和 I225-V 网卡,可能会发现无法在 Linux 上长时间正常工作,因为目前这个搭配有一个难以解决的硬件故障。具体表现为系统可能随时断网,短则十几分钟长则数十小时,除了重启之外对恢复网络是毫无办法。

本文将告诉你这类故障的可能原因,以及临时的解决方案。

背景介绍

作为首发就入手的 AMD 锐龙 7000 系用户,当然也少不了一块 X670 主板。我的主板是 ROG 的 X670E,ROG 和华硕主板差异不大,通常配置会更高一点。我没有查过 X670/X670E 系列有多少华硕主板搭配的这个网卡,也许只有少部分有这个故障或者非此网卡也会存在。如果你存在一样的问题,可以尝试用同样的方法解决。

检查问题

当系统出现断网后,可以用 journalctl 来查看日志以确认故障是否已发生。运行命令:

journalctl -b | grep eno1

会看到这样一条输出:

11 月 17 17:03:48 nixos kernel: igc 0000:0c:00.0 eno1: PCIe link lost, device now detached

意思很明确,网卡的 PCIe 链接丢失了,设备已分离。这表示什么?这表示网卡从总线上莫名其妙的消失了。在这种故障下,你仍试图用各种命令拯救无异于碰瓷,基本是没用的。

例如我第一次看到这个的时候,就尝试过删除并重新加载 igc 模块再重启网络或 dhcpd,都是没用的。 如果你的网络接口名称不是 eno1,请在命令中使用自己的网络接口名称。具体可以用 ip addrifconfig 命令查看。

dmesg 进一步寻找可用信息:

dmesg -T | grep -i igc

可以看到另一条错误细节:

[日 11 月 11 05:55:21 2022] 0000:0c:00.0: igc failed to read reg 0xc030

嗯,除了能确认 igc 模块发生崩溃了,好像也没什么用。

如果你在断网后能重现上述两条错误,那很大概率你那边和本文描述的是同一种原因导致的故障。

修复方法

添加两个内核启动参数即可彻底避免此问题。具体如下:

  • pcie_port_pm=off
  • pcie_aspm.policy=performance

如果是 GRUB 引导的常规系统,编辑 /etc/default/grub 文件,追加上面两个参数到 GRUB_CMDLINE_LINUX_DEFAULT 选项中:

GRUB_CMDLINE_LINUX_DEFAULT="pcie_port_pm=off pcie_aspm.policy=performance"

执行 sudo update-grub 后重新启动即可。如果你和我一样使用 NixOS,则编辑 /etc/nixos/hardware-configuration.nix 文件,设置:

{
  # ...
  boot.kernelParams = [ "pcie_port_pm=off" "pcie_aspm.policy=performance" ];
}

执行 sudo nixos-rebuild switch 后重启。

注意:如果原本就存在一些参数,请追加不要覆盖。

问题原因

这个问题我至今还不清楚底层原因。我在两年多以前小小的研究过,但是没有记录下来也没有深究。现在已经印象不太深了。此问题貌似要华硕、Intel 和 Linux 三方合作才能修复。但华硕根本不在意 Linux 上的故障。

曾经有 Reddit 网友给华硕瑞典公司反馈过此现象,但是得到的居然是这样的回复:

Unfortunately, I can only say that when you have Linux as an operating system, it is not something we can assist further as we do not provide support for that.

翻译过来讲就是你们 Linux 的问题跟我们无关,我们不为 Linux 提供支持。

嗯,很……下头。

结束语

这其实是一篇几年前的文章,被我从某平台的草稿箱翻出来了。想必遇到过此问题的人早已找到解决方案了,但最初时网络上几乎没有讨论,导致我也头疼过一段时间。

本文由作者按照 CC BY 4.0 进行授权
分享: