IPリンクコマンドでイーサネットインターフェースはどのように表示されるか

IPリンクコマンドでイーサネットインターフェースはどのように表示されるか

私は Linux を試していて、初期ブート プロセスを理解しようとしています。少なくとも私が試したシステムでは、udev はデバイスを検出する「モジュール」です。ただし、いったん検出されると、何らかの方法で使用可能なインターフェイスのリストに「追加」され、「ip link set dev up」コマンドを実行できるようになります。ただし、そのステップまではデバイス名は認識されません。

私の質問は、これがどこで発生し、どのようなコマンドが使用されるかということです。

initramfs イメージにフックを追加し、「ip link」を使用してインターフェースをダンプし、ループバック インターフェースのみが存在するため、「初期ユーザー スペース」の後に発生することがわかっています。

ただし、これはかなり早い段階で発生するはずであり、私のシステム環境では、systemctl コマンドを実行すると、sys-subsystem-net-devices-ens33.device として「デバイス」エントリが存在します。

そのエントリがデバイスのリストにどのように追加されるのか、またどのようなコマンドが実行されるのかについてはまったく明らかではありません。

ご協力ありがとうございます。いろいろ調べてみましたが、このプロセスの詳細は簡単には見つかりませんでした。

答え1

コマンドはありません。これはそもそもユーザー空間によって行われるものではなく、完全にカードの Ethernet ドライバーによって行われ、register_netdev()カーネルの「net」サブシステムを使用して新しいインターフェイスを表示します。

プロセスは大まかに次のようになります。

  1. カーネルは PCI または USB デバイスを検出し、それを記述する「modalias」を構築し、デバイスを通知する uevent を udev に送信します。例:

    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 ルール ファイルの 1 つは80-drivers.rules、 を含む uevents を処理しMODALIAS=、 libkmod を使用してそのエイリアスに一致するカーネル モジュールをロードします。(以前は、モジュールのロードのために が実行されていました。ただし、またはmodprobeに modalias を渡すことはできます。)modprobemodinfo

    $ 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
    

関連情報