IP link指令中乙太網路介面如何出現

IP link指令中乙太網路介面如何出現

我正在嘗試 Linux,並試圖了解早期啟動過程。至少在我使用 udev 的系統上是發現裝置的「模組」。然而,一旦發現,它就會以某種方式「新增」到可用介面清單中,然後您可以執行「ip link set dev up」命令。在此步驟之前,它無法識別設備名稱。

我的問題是這種情況發生在哪裡,使用了什麼指令?

我知道它發生在“早期用戶空間”之後,因為我向 initramfs 映像添加了一個鉤子,並使用“ip link”轉儲接口,並且僅存在環回接口。

不過,它必須很早就發生,並且在我的系統環境中,當我執行 systemctl 命令時,會有一個「裝置」條目作為 sys-subsystem-net-devices-ens33.device 。

根本不清楚該條目如何添加到設備列表中或它執行什麼命令。

感謝您的幫助,我一直在探索,但這個過程的細節並不容易找到。

答案1

沒有命令。它首先不是由用戶空間完成的 - 它完全由卡的乙太網路驅動程式完成,該驅動程式使用register_netdev()核心的“net”子系統來顯示新的介面。

流程大致是:

  1. 核心發現 PCI 或 USB 設備,建構描述它的“modalias”,並向 udev 發送宣布該設備的 uevent。例如:

    ACTION=add
    DEVPATH=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3
    DEVTYPE=usb_device
    SUBSYSTEM=usb
    ...
    
    ACTION=add
    DEVPATH=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3/2-1.3:1.0
    DEVTYPE=usb_interface
    MODALIAS=usb:v0B95p1790d0100dcFFdscFFdp00icFFiscFFip00in00
    SUBSYSTEM=usb
    ...
    
  2. udev 接收 uevent,根據規則處理它(運行幫助工具、添加各種元資料、建立符號連結)並再次發送它,這次發送到各種使用 libudev 的程式。

  3. udev 規則檔案之一80-drivers.rules處理包含MODALIAS=並使用 libkmod 的 uevent 來載入與該別名相符的任何核心模組。 (過去,它用於運行modprobe模組加載。不過,您仍然可以將模態別名傳遞給modprobeor modinfo。)

    $ modinfo usb:v0B95p1790d0100dcFFdscFFdp00icFFiscFFip00in00
    filename:       /lib/modules/4.7.2-1-ARCH/kernel/drivers/net/usb/ax88179_178a.ko.gz
    description:    ASIX AX88179/178A based USB 3.0/2.0 Gigabit Ethernet Devices
    alias:          usb:v0DF6p0072d*dc*dsc*dp*ic*isc*ip*in*
    alias:          usb:v2001p4A00d*dc*dsc*dp*ic*isc*ip*in*
    alias:          usb:v0B95p178Ad*dc*dsc*dp*ic*isc*ip*in*
    alias:          usb:v0B95p1790d*dc*dsc*dp*ic*isc*ip*in*
    depends:        usbnet,usbcore,mii
    ...
    

    所以對於這個設備,udev會載入ax88179_178a驅動程式。

  4. 無論驅動程式是剛剛加載還是之前已經加載,內核都會調用其.probe函數將其附加到特定設備。

  5. 驅動程式的probe函數會執行任何必要的晶片魔法來為裝置供電、初始化、配置它,最後呼叫register_netdev()為自己創建一個真正的乙太網路介面。

    (對於 USB 設備,某些驅動程式推遲探測usbnet模組,該模組完成大部分標準 USB 工作並創建實際的以太網接口,並且僅調用主驅動程式來執行特定於硬體的魔法。)

    Sep 04 21:25:11 kernel: ax88179_178a 2-1.3:1.0 eth1: register 'ax88179_178a'
    ↵ at usb-0000:00:1d.0-1.3, ASIX AX88179 USB 3.0 Gigabit Ethernet, 8c:ae:4c:f4:06:33
    

相關內容