如何讓 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
關於如何線上獲取此 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) 支持的基本配置選項。