Não é possível obter dispositivo incorporado para pingar qualquer coisa na rede

1

Eu tenho um dispositivo embutido, construído usando o buildroot, a versão 3.6.11 do kernel rodando o busybox. O kernel é construído com opções completamente padrão. Eu configurei o dispositivo de acordo com o que o responsável pela rede especificou para o IP, gateway, máscara de rede etc e coloquei esses valores no arquivo / etc / network / interfaces. Quando o sistema é inicializado, uma chamada para ifconfig me diz que todas as configurações de rede são o que deveriam ser. No entanto, não consigo pingar nenhuma outra máquina na mesma sub-rede que o dispositivo. Eu posso me comunicar com minha máquina host com uma conexão de cabo Ethernet direta, então acho que o adaptador de rede está ok - eu posso ssh para o host, e o host pode visualizar o destino corretamente do vsftpd que eu instalei no dispositivo . Basicamente, estou muito inseguro sobre como proceder para diagnosticar o problema. Eu estou me afogando em guias de configuração de rede de linux de internet forum e chegando a lugar nenhum. Além disso, preocupantemente, quando eu digito

# ip addr show dev eth0

Eu recebo o relatório de um segfault em libuClibc-0.9.33.2.so. Eu construí tudo isso usando o buildroot e ele relatou que tudo foi bem sucedido. É possível que eu tenha um kernel quebrado? Eu realmente não sei como proceder para que qualquer conselho seja recebido com gratidão.

EDIT A saída de ip addr show dev eth0 é

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen
    1000 link/ether 00:18:7d:19:a0:d8 brd ff:ff:ff:ff:ff:ff
    inet 172.18.255.212/24 brd 172.18.255.255 scope global eth0
[  331.700545] ip[951]: segfault at 0 ip b76e1f26 sp bfbd29b0 error 4 in 
libuClibc-0.9.33.2.so[b76b5000+4d000]
Segmentation fault

Quando eu chamo o mesmo comando no outro adaptador eth1, então eu não obtenho nenhum segfault, então realmente não sei o que está acontecendo.

EDIT2 Após a reconstrução com informações de depuração e strace , consegui obter a saída de strace do segfault - não sei realmente o que isso significa, além de parecer que está tentando gravar para um local talvez não devesse (não incluímos tudo, apenas as últimas linhas).

socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 4
ioctl(4, SIOCGIFTXQLEN, {ifr_name="eth1", ifr_qlen=1000}) = 0
close(4)                                = 0
write(1, "3: eth1: <BROADCAST,MULTICAST,UP"..., 793: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
) = 79
write(1, "    link/ether 00:18:7d:19:a0:d7"..., 55    link/ether 00:18:7d:19:a0:d7 brd ff:ff:ff:ff:ff:ff
) = 55
open("/etc/iproute2/rt_scopes", O_RDONLY) = 4
ioctl(4, SNDCTL_TMR_TIMEBASE or SNDRV_TIMER_IOCTL_NEXT_DEVICE or TCGETS, 0xbfc91b30) = -1 ENOTTY (Inappropriate ioctl for device)
read(4, "#\n# reserved values\n#\n0\tglobal\n2"..., 4096) = 92
read(4, "", 4096)                       = 0
close(4)                                = 0
write(1, "    inet 192.168.12.198/16 brd 1"..., 65    inet 192.168.12.198/16 brd 192.168.255.255 scope global eth1
) = 65
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0} ---
+++ killed by SIGSEGV +++
Segmentation fault
    
por mathematician1975 25.02.2013 / 17:45

1 resposta

1

Consegui resolver o problema de falha de segmentação que documentarei aqui caso alguém tenha problemas semelhantes no futuro. Notei que quando liguei para o seguinte

 ip -f inet addr show dev eth0

em vez de

 ip inet addr show dev eth0

então o segfault não aconteceria, mas ainda aconteceria com

 ip -f inet6 addr show dev eth0

Isso me leva à conclusão de que devo ter uma incompatibilidade com o suporte ao IPv6 em algum lugar do meu toolchain ou busybox. Eu reconstruo meu alvo inteiro, toolchain, kernel e uClibc do zero mais uma vez com os arquivos de configuração do buildroot, desta vez garantindo que meus crosstools foram criados com suporte a IPV6. Com essa opção, o segfault relatado não ocorre mais.

    
por 28.02.2013 / 16:08