Não há comando. Isso não é feito pelo userspace em primeiro lugar - é feito inteiramente pelo driver Ethernet da placa, que usa register_netdev()
do subsistema "net" do kernel para fazer uma nova interface aparecer.
O processo é, aproximadamente:
-
O Kernel descobre um dispositivo PCI ou USB, cria um "modalias" descrevendo-o e envia um uevent anunciando o dispositivo para o udev. Por exemplo:
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 ...
-
O udev recebe o uevent, o processa de acordo com as regras (executando ferramentas auxiliares, adicionando vários metadados, criando links simbólicos) e os envia novamente, desta vez para vários programas que usam o libudev.
-
Um dos arquivos de regras do udev,
80-drivers.rules
, manipula uevents contendoMODALIAS=
e usa a libkmod para carregar qualquer módulo do kernel correspondente a esse alias. (No passado, costumava executarmodprobe
para o carregamento do módulo. Você ainda pode passar um modalias paramodprobe
oumodinfo
.)$ 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 ...
Portanto, para este dispositivo, o udev carregará o driver
ax88179_178a
. -
Se o driver foi carregado agora ou já havia sido carregado anteriormente, o kernel chama sua função
.probe
para anexá-lo a um dispositivo específico. -
A função
probe
do driver faz qualquer mágica de chip necessária para ligar o dispositivo, inicializá-lo, configurá-lo e finalmente chamarregister_netdev()
para criar uma interface Ethernet real para si mesmo.(Para dispositivos USB, alguns drivers adiam a detecção para o módulo
usbnet
, que é o que faz a maior parte do trabalho USB padrão e cria uma interface Ethernet real, e só chama o driver principal para fazer o hardware específico mágica.)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