我有一台安装了自定义 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 内核。我不知道到底是什么解决了它,但它现在正在工作。这不是一个令人满意的修复,但它确实有效。