ACTION=="add", DRIVER=="r8152", ATTR{idVendor}=="2357", ATTR{idProduct}=="0601", ATTR{bConfigurationValue}!="$env{REALTEK_NIC_MODE}", ATTR{bConfigurationValue}="$env{REALTEK_NIC_MODE}"
O significado desta regra do udev é o seguinte:
"Quando um dispositivo com idVendor
valor 2357 e idProduct
valor 0601 (e gerenciado pelo driver" r8152 ") for adicionado ao sistema, se seu bConfigurationValue
não for qualquer valor definido na variável de ambiente REALTEK_NIC_MODE
, defina seu bConfigurationValue
para esse valor. "
Em outras palavras, esta regra do udev não está carregando o driver r8152, ele está alternando o dispositivo para o modo correto para esse driver, se necessário.
Quando um novo dispositivo é adicionado, o kernel Linux basicamente executa modprobe
com os IDs de hardware (e algumas outras coisas) do dispositivo codificado no "nome" do módulo solicitado. Esse "nome" é então comparado por modprobe
às cadeias curinga incorporadas em cada módulo como aliases do módulo. O comando depmod
reúne esses nomes de alias e os armazena em /lib/modules/<kernel version>/modules.alias[.bin]
para pesquisa rápida. Você pode ver as cadeias de apelidos embutidas nos módulos do kernel com o comando modinfo
.
Para o seu adaptador ethernet USB, o "nome" é algo como usb:v2357p0601d...
. Infelizmente, o módulo cdc_ether
tem um alias de caractere curinga que também corresponderá a ele.
Todos os alias definidos em /etc/modprobe.d
terão precedência sobre os aliases incorporados nos próprios módulos. Portanto, você provavelmente poderia especificar um alias que corresponderia ao seu adaptador ethernet e faria com que o módulo r8152
fosse carregado.
Tente adicionar isso como /etc/modprobe.d/usbnic.conf
:
alias usb:v2357p0601d*dc*dsc*dp*ic*isc*ip*in* r8152
Em seguida, execute depmod -a
como root, desconecte o adaptador ethernet USB, descarregue os módulos r8152
e cdc_ether
, conecte o adaptador Ethernet novamente e veja o que acontece. Se apenas o módulo r8152 estiver carregado, bom.
Se o cdc_ether
ainda for carregado também, o alias pode precisar ser mais específico (ou seja, um ou mais dos asteriscos nele precisam ser substituídos por valores reais, sejam eles quais forem) para que esse alias ser o mais específico e, portanto, o "melhor" jogo.
Atualização: Aqui está uma descrição do formato do alias do módulo: por 03.02.2018 / 15:08