IP 링크 명령에 이더넷 인터페이스가 어떻게 표시됩니까?

IP 링크 명령에 이더넷 인터페이스가 어떻게 표시됩니까?

저는 Linux를 실험 중이며 초기 부팅 프로세스를 이해하려고 노력하고 있습니다. 적어도 내가 udev로 플레이한 시스템에는 장치를 검색하는 "모듈"이 있습니다. 그러나 일단 발견되면 어떻게든 사용 가능한 인터페이스 목록에 "추가"되고 "ip link set dev up" 명령을 수행할 수 있습니다. 하지만 그 단계까지는 장치 이름을 인식하지 못합니다.

내 질문은 이런 일이 어디서 발생하며 어떤 명령이 사용됩니까?

initramfs 이미지에 후크를 추가하고 "ip 링크"를 사용하여 인터페이스를 덤프하고 루프백 인터페이스만 존재하므로 "초기 사용자 공간" 이후에 이런 일이 발생한다는 것을 알고 있습니다.

꽤 초기에 발생해야 하며 내 시스템 환경에는 systemctl 명령을 수행할 때 sys-subsystem-net-devices-ens33.device라는 "device" 항목이 있습니다.

해당 항목이 장치 목록에 어떻게 추가되는지 또는 어떤 명령을 수행하는지 전혀 명확하지 않습니다.

도움을 주셔서 감사합니다. 여기저기 알아보고 있었지만 이 프로세스의 세부정보를 찾기가 쉽지 않았습니다.

답변1

명령이 없습니다. 처음에는 사용자 공간에 의해 수행되지 않습니다. 이는 register_netdev()커널의 "net" 하위 시스템을 사용하여 새 인터페이스를 표시하는 카드의 이더넷 드라이버에 의해 전적으로 수행됩니다.

프로세스는 대략 다음과 같습니다.

  1. 커널은 PCI 또는 USB 장치를 발견하고 이를 설명하는 "모달리아"를 구축한 다음 장치를 알리는 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 규칙 파일 중 하나인 80-drivers.rules는 libkmod를 포함하는 uevent를 처리 MODALIAS=하고 해당 별칭과 일치하는 커널 모듈을 로드하는 데 사용됩니다. (과거에는 modprobe모듈 로딩을 위해 실행되었습니다. 그래도 여전히 모달리아를 modprobe또는 에 전달할 수 있습니다 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
    

관련 정보