無法讓嵌入式設備 ping 網路上的任何內容
我有一個嵌入式設備,使用 buildroot 建構,核心版本 3.6.11 執行busybox。核心是使用完全預設選項建構的。我已經根據網路人員為 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 上呼叫相同的命令時,我沒有得到段錯誤,所以真的不知道發生了什麼。
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支持不兼容。我再次使用 buildroot 配置文件從頭開始重建我的整個目標、工具鏈、核心和 uClibc,這一次確保我的交叉工具是在支持 IPV6 的情況下創建的。使用該選項設置報告的段錯誤不再發生。