私は、busyboxを実行しているbuildroot、カーネルバージョン3.6.11を使用して構築された組み込みデバイスを持っています。カーネルは完全にデフォルトのオプションで構築されています。ネットワーク担当者がIP、ゲートウェイ、ネットマスクなどに指定した内容に従ってデバイスを構成し、これらの値を/ etc/network/interfacesファイルに配置しました。システムが起動すると、ifconfig
を呼び出すと、すべてのネットワーク設定が想定どおりであることがわかります。ただし、デバイスと同じサブネット上の他のマシンにpingを実行できません。直接イーサネットケーブル接続でホストマシンと通信できるので、ネットワークアダプターは問題ないと思います。ホストにssh
でき、ホストはvsftpd
からターゲットを正しく表示できます。デバイスにインストールしました。基本的に、問題の診断をどのように進めるかは非常にわかりません。私はインターネットフォーラムのLinuxネットワークセットアップガイドに溺れていて、どこにも行きません。また、心配して、私がタイプするとき
# ip addr show dev eth0
LibuClibc-0.9.33.2.soでセグメンテーション違反のレポートを受け取ります。私はこれをすべてbuildrootを使用して構築しましたが、すべてが成功したと報告されました。カーネルが壊れている可能性はありますか?どうすればいいのかわからないので、アドバイスをいただければ幸いです。
[〜#〜] edit [〜#〜]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
他のアダプターeth1で同じコマンドを呼び出すと、セグメンテーション違反が発生しないため、何が起こっているのか本当にわかりません。
EDIT2デバッグ情報とstrace
を使用して再構築した後、segfaultのstrace出力を取得できました-これが何を意味するのかはわかりませんが、書き込もうとしているように見えます。おそらくすべきではない場所に(私はそれをすべて含めたわけではなく、最後の数行だけを含めました)。
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
将来誰かが同様の問題を抱えている場合に備えて、ここで文書化するセグメンテーション違反の問題をなんとか解決しました。私が次のように電話したときに気づいた
ip -f inet addr show dev eth0
の代わりに
ip inet addr show dev eth0
その後、セグメンテーション違反は発生しませんが、それでも発生します
ip -f inet6 addr show dev eth0
これにより、ツールチェーンまたはbusyboxのどこかでIPv6サポートとの非互換性が必要であるという結論に至りました。ターゲット、ツールチェーン、カーネル、uClibc全体をbuildroot構成ファイルを使用して最初から再構築します。今回は、クロスツールがIPV6サポートで作成されていることを確認します。このオプションを設定すると、報告されたセグメンテーション違反は発生しなくなります。