Networking

無法讓嵌入式設備 ping 網路上的任何內容

  • February 28, 2013

我有一個嵌入式設備,使用 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 的情況下創建的。使用該選項設置報告的段錯誤不再發生。

引用自:https://unix.stackexchange.com/questions/66068