我有一台全新的 ThinkPad E16 Gen 2 笔记本电脑,运行的是 Ubuntu 24.01.1 LTS。我最近遇到了挂起问题,我将其归结为 LAN 适配器的 LAN 唤醒功能。

在解决这个问题时,我注意到我正在运行 e1000e 驱动程序,据我所知,它已经很古老了,而且只在没有更好选择的虚拟机中实际使用。

为什么选择使用 e1000e?我原本希望使用更现代的驱动程序。

我甚至不知道如何调试它或尝试什么,也不知道应该使用哪个驱动程序。所以即使是一般性的建议也会很受欢迎。

干燥细节:

cat /etc/*release* | grep PRETTY_NAM
PRETTY_NAME="Ubuntu 24.04.1 LTS"

❯ sudo dmidecode -s system-version 
ThinkPad E16 Gen 2
uname -r        
6.8.0-45-generic

❯ lspci -nnk | grep -i ethernet -A3
00:1f.6 Ethernet controller [0200]: Intel Corporation Device [8086:550b] (rev 20)
    Subsystem: Lenovo Device [17aa:50e1]
    Kernel driver in use: e1000e
    Kernel modules: e1000e

作为参考,在另一台(Mint)笔记本电脑上运行最后一个命令,我得到了这个输出,它更接近我的预期:

❯ lspci -nnk | grep -i ethernet -A3
3d:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 16)
  DeviceName: Realtek PCIe GBE Family Controller
  Subsystem: Hewlett-Packard Company RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [103c:878a]
  Kernel driver in use: r8169
  Kernel modules: r8169


最佳答案
1

作为参考,在另一台(Mint)笔记本电脑上运行最后一个命令,我得到了这个输出,它更接近我的预期:

简单来说,您使用 e1000e 驱动程序是因为您的笔记本电脑物理上有一个 Intel 以太网接口。¹另一台笔记本电脑使用 r8169 驱动程序,因为它有一个 Realtek 以太网芯片。您无法自由选择驱动程序 – 您只能使用笔记本电脑中物理硬件所需的任何驱动程序。

即使在虚拟机中,您实际上也无法选择驱动程序;您告诉虚拟机管理程序要模拟哪种芯片(例如,让 VM 具有模拟的 RTL8168),并且驱动程序必然会遵循该芯片。

在解决这个问题时,我注意到我正在运行 e1000e 驱动程序,据我所知,它已经很古老了,而且只在没有更好选择的虚拟机中实际使用。

不是。它仍然是英特尔嵌入式千兆以太网网卡的标准驱动程序,例如现代台式机或笔记本电脑中的全部英特尔 I219 系列;尤其是 vPro 系列(AMT/vPro 要求 NIC 成为 CPU 的一部分)。

千兆以太网本身是一项相当古老的技术,因此硬件没有太大变化——新的 I219 仍然使用与旧版 Intel 82573 几乎相同的主机操作系统接口,这使得相同的驱动程序只需进行很少的更改即可支持它。如果现有接口满足要求,为什么要重新做一遍并需要一个全新的驱动程序呢?

事实上,Realtek r8169 驱动程序也是如此:它最初是在 2002 年编写的,这仅比 e1000e 年轻三年 – 但到现在也有二十多年的历史了。

但是,这两个驱动程序在虚拟机中都属于“第二层”的原因与驱动程序本身的质量关系不大——更常见的是,它们需要虚拟机管理程序来模拟物理设备的行为,而由于内存空间设置方式等方面的差异,物理设备的行为效率总是低于 VirtIO 或其他虚拟设计设备。


¹ 更具体地说,它具有 Intel I219-V(版本 18)作为 Meteor Lake CPU/芯片组的一部分。这-V表明它是 vPro 版本,而 vPro 确实仅适用于属于同一 CPU 的以太网接口。您的另一台笔记本电脑没有 vPro,因此它可以使用任何外部部件来连接以太网。

2

  • 3
    看来 ChatGPT 误导了我 😀 它告诉我 8086:550b 来自 I225-LM 系列(2.5Gbps)而不是 I219(千兆位),我没有费心去验证。谢谢你的详细回答!这是我每天的教训,不要把 LLM 所说的视为理所当然 <3


    – 


  • 嗯,e1000e hw.h(由英特尔自己更新)肯定将 0x550b 列为 I219(E1000_DEV_ID_PCH_MTP_I219_V18)。对于 I225,它将是igc驱动程序,其支持的设备中有一个类似的 0x5502。


    –