如何让 Linux 识别网络接口?

如何让 Linux 识别网络接口?

我有一台安装了自定义 Linux 系统(使用 Yocto 创建)的计算机。在以前使用此版本的计算机上,网络接口工作正常,但在这台新计算机上,eth0 根本不显示。我知道如何使网络接口联机并配置它(如果操作系统已识别该网络接口并具有名称(eth0)),但如果 eth0 不存在,我不知道如何首先创建该接口。

首先,我要指出的是,如果我启动 Ubuntu,它会识别它并且工作正常,因此不存在硬件问题,Linux 绝对能够使用该硬件。

其次,我可以使用 lspci 查看网卡:

root@intel-corei7-64:/etc# lspci -v -s 01:00.0
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15)
        Subsystem: Mitac Device 0787
        Flags: fast devsel, IRQ 23
        I/O ports at e000 [size=256]
        Memory at 91104000 (64-bit, non-prefetchable) [size=4K]
        Memory at 91100000 (64-bit, non-prefetchable) [size=16K]
        Capabilities: [40] Power Management version 3
        Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
        Capabilities: [70] Express Endpoint, MSI 01
        Capabilities: [b0] MSI-X: Enable- Count=4 Masked-
        Capabilities: [100] Advanced Error Reporting
        Capabilities: [140] Virtual Channel
        Capabilities: [160] Device Serial Number 44-01-00-00-68-4c-e0-00
        Capabilities: [170] Latency Tolerance Reporting
        Capabilities: [178] L1 PM Substates
        Kernel modules: r8169

第三,我相信我已经安装了驱动程序:

root@intel-corei7-64:/etc# lsmod | grep r8169
r8169                  77824  0
libphy                 61440  2 r8169,realtek

我不知道从这里该去哪里。 ip link show不将界面显示为选项。我不确定为什么界面没有自动创建,或者如何手动创建它。

我还会注意到,当我插入 USB -> 以太网连接器时,eth0 会上线并正确配置。但内置网卡无法工作。

最后, dmesg 显示了一行可能相关的行,但我真的不知道它的含义:

igb: Intel(R) Gigabit Ethernet Network Driver - version 5.6.0-k

我在 dmesg 中也有这些消息:

r8169 0000:01:00.0: enabling device (0000 -> 0003)
r8169: probe of 0000:01:00.0 failed with error -5
r8169: probe of 0000:01:00.0 failed with error -5

关于如何使该网卡联机有什么想法吗?

答案1

r8169模块是许多 Realtek NIC 的驱动程序。其中许多需要固件包才能成功初始化 NIC。

检查您的dmesg列表(例如dmesg | grep firmware):您可能会发现类似的消息Unable to load firmware <name of firmware file>。这意味着您必须提供该固件文件。

由于您有一个自定义系统,因此从以下位置下载该文件可能是最简单的方法:linux-firmware Git 存储库并将其放入/lib/firmware/rtl_nic/系统上的目录中。

在 Ubuntu 中,Realtek NIC 固件文件以包的形式提供firmware-realtek,并且安装程序可能足够聪明,如果检测到您需要它,可以在操作系统安装过程中自动添加它。

一旦固件文件就位,卸载并重新加载r8169模块:

modprobe -r r8169
modprobe r8169

现在模块可以找到固件文件并将其提供给 NIC 硬件,卡应该能够正确初始化。

某些硬件设备可能需要多个固件文件,因此如果 NIC 仍然不可用,请dmesg再次检查列表末尾是否有新消息。

答案2

错误 -EIO 意味着低于网络驱动程序级别的某些内容发生故障。您可以查看以下报告: https://bugzilla.kernel.org/show_bug.cgi?id=203025 或者进行一些 printf 调试来查看到底哪里出了问题。详细查看 dmesg 日志也可能会提供提示。与 igb 相关的消息与此无关。也许您错过了 PCI(e) 支持的一些基本配置选项。

答案3

我升级到了最新版本的 yocto,其中包括 5.10 linux 内核。我不知道到底是什么解决了它,但它现在正在工作。这不是一个令人满意的修复,但它确实有效。

相关内容