Sim, o kernel do Linux pode ativar a interface eth0 sem recorrer a scripts de espaço do usuário.
Você pode usar o parâmetro de inicialização do kernel ip=
para inicializar a interface de rede com um endereço IP estático, por exemplo:
ip=192.168.1.100:::255.255.255.0:myboard:eth0:on
É claro que a interface eth0 não pode ser habilitada até que os drivers tenham sido carregados (como indicado pela liberação da seção __init
da memória).
Aqui está o log do sistema para mostrar quando a interface de rede se torna ativa:
eth0: link down
IP-Config: Complete:
device=eth0, addr=192.168.1.100, mask=255.255.255.0, gw=255.255.255.255,
host=myboard, domain=, nis-domain=(none),
bootserver=255.255.255.255, rootserver=255.255.255.255, rootpath=
Freeing init memory: 564K
remounting / read-write... done.
mounting /proc... done.
mounting /sys... done.
Creating device nodes manually, running /sbin/makenodes-2.6
eth0: link up, 100Mbps, full-duplex, lpa 0xCDE1
Done.
mounting /home... MTDSB: dev_name "/dev/mtdblock3"
Detalhes completos sobre a sintaxe do parâmetro ip=
boot estão em Documentation / filesystems / nfs /nfsroot.txt . Ignore o fato de que o propósito original desse recurso era facilitar um sistema de arquivos raiz em rede.
I passed ip= and eth= u-boot environment variables to the linux kernel as bootargs
eth=
não é um parâmetro de inicialização válido e provavelmente é ignorado pelo kernel.
BTW Se você estiver usando o driver macb.c
do Atmel, certifique-se de que o U-Boot instale o endereço MAC do PHY para que isso funcione.