Como trocar o driver de um dispositivo de rede em uma caixa Debian do Debian em execução?

2

Eu tenho uma caixa Debian Linux embutida / sem cabeça que é inicializada a partir de uma imagem do sistema de arquivos somente de leitura. A configuração está configurada para que eu possa (aparentemente) gravar no sistema de arquivos, mas quaisquer alterações no sistema de arquivos não são realmente gravadas no dispositivo flash e, portanto, não sobrevivem a uma reinicialização.

Esta caixa tem uma interface Ethernet na placa-mãe (Intel 82571EB) que usa o driver e1000e Linux:

root@embedded:~# lspci -v
[...]
07:00.0 Ethernet controller: Intel Corporation 82571EB Gigabit Ethernet Controller (rev 06)
    Subsystem: Intel Corporation PRO/1000 PT Dual Port Server Adapter
    Flags: bus master, fast devsel, latency 0, IRQ 45
    Memory at fc600000 (32-bit, non-prefetchable) [size=128K]
    I/O ports at 4000 [size=32]
    Capabilities: [c8] Power Management version 2
    Capabilities: [d0] MSI: Enable+ Count=1/1 Maskable- 64bit+
    Capabilities: [e0] Express Endpoint, MSI 00
    Kernel driver in use: e1000e
[...]

Como uma forma de entender o driver e1000e um pouco melhor (e talvez encontrar e consertar um bug que eu suspeito que possa estar escondido nele), eu compilei minha própria versão instrumentada do arquivo de extensão do kernel e1000e.ko e eu gostaria de experimentar.

Eu posso scp meu arquivo e1000e_instrumented.ko para a caixa Linux, mas não sei qual é a maneira correta de desassociar o driver e1000e interno do sistema operacional do controlador Ethernet 82571EB e depois dizer ao Linux para usar o meu personalizado. ko arquivo em vez disso. (Se fosse um PC Linux estilo desktop, acho que poderia fazê-lo copiando meu arquivo pelo arquivo /lib/modules/3.8.13/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko existente e então reiniciando ... mas nesta máquina quaisquer mudanças que eu fizer irão desaparecer quando eu reiniciar a máquina, então eu acho que preciso de uma técnica que não envolva uma reinicialização)

Qual é a maneira correta de fazer isso no Debian Linux? Como teste inicial, tentei:

modprobe -r e1000e ; modprobe e1000e

... apenas para ver se eu poderia remover o driver embutido e recarregá-lo novamente, mas isso apenas mata a rede na caixa do Linux e não a traz de volta.

    
por Jeremy Friesner 12.11.2015 / 02:00

1 resposta

0

Você precisa executar ifup -a para exibir as interfaces de rede após modificar o e1000e. Adicionar alguns pequenos atrasos com sleep 2 também não irá prejudicar.

Então, tente:

ifdown -a ; sleep 2 ; modprobe -r e1000e ; sleep 2; modprobe e1000e ; sleep 2; ifup -a
    
por 12.11.2015 / 22:17