Networking

如何讓 Linux 辨識網路介面?

  • September 13, 2021

我有一台安裝了自定義 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

關於如何線上獲取此 NIC 的任何想法?

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 韌體文件以 package 的形式提供firmware-realtek,安裝程序可能足夠聰明,可以在作業系統安裝過程中自動添加它,如果它檢測到您需要它。

準備好韌體文件後,解除安裝並重新載入r8169模組:

modprobe -r r8169
modprobe r8169

現在模組可以找到韌體文件並將其提供給 NIC 硬體,卡應該能夠正確初始化。

某些硬體設備可能需要多個韌體文件,因此如果 NIC 仍然不可用,請dmesg再次檢查列表末尾是否有新消息。

錯誤 -EIO 表示低於網路驅動程序級別的某些東西失敗。您可以查看以下報告: https ://bugzilla.kernel.org/show_bug.cgi?id=203025 或者進行一些 printf 調試,看看究竟哪裡出了問題。詳細查看 dmesg 日誌也可能會提供提示。與 igb 相關的消息在這裡沒有相關性。也許您錯過了一些用於 PCI(e) 支持的基本配置選項。

引用自:https://unix.stackexchange.com/questions/668347