
カーネルバージョン3.6.11でbusyboxを実行するbuildrootで構築された組み込みデバイスがあります。カーネルは完全に基本的なオプションで構築されました。ネットワーク担当者が指定したIP、ゲートウェイ、ネットマスクなどに従ってデバイスを設定し、その値を/etc/network/interfacesファイルに入れました。システムが起動したときに電話した通路で、すべてのifconfig
ネットワーク設定が正常になっていることを知らせてくれました。ただし、デバイスと同じサブネット上の他のコンピュータに対してpingを実行することはできません。直接イーサネットケーブル接続を介してホストと通信できるため、ネットワークアダプタが正常であるとします。ssh
ホストに接続でき、ホストはvsftpd
私がインストールしたデバイスでターゲットを正しく表示します。基本的に、問題の診断をどのように進めるべきかわかりません。インターネットフォーラムのLinuxネットワーク設定ガイドに没頭しましたが、何も見つかりませんでした。そして心配してタイピングをするとき
# ip addr show dev eth0
libuClibc-0.9.33.2.soでセグフォルトの報告を受けました。私はbuildrootを使ってこれらすべてを構築し、すべてが成功したと報告しました。私のカーネルが破損している可能性がありますか?進行方法がわからないので、アドバイスをいただきありがとうございます。
編集するの出力は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で同じコマンドを呼び出すと、セグメントが発生しないため、実際に何が起こっているのかわかりません。
編集2デバッグ情報を使用して再構築した後、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
答え1
分割エラーの問題を解決し、後で同様の問題が発生した場合に備えて、ここで問題を文書化します。次のような電話をかけると
ip -f inet addr show dev eth0
変える
ip inet addr show dev eth0
これによりセグフォルトは発生しませんが、まだ発生します。
ip -f inet6 addr show dev eth0
これにより、私のツールチェーンやビジボックスのどこかにIPv6サポートと互換性のない部分があると結論付けることができました。私はbuildroot設定ファイルを使用して、ターゲット全体、ツールチェーン、カーネル、およびuClibcを最初から再構築し、今回はクロスツールがIPV6サポートで作成されたことを確認しました。このオプションを設定すると、報告されたセグフォルトは発生しなくなります。