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