【嵌入式Linux学习七步曲之第二篇 ARM+Linux开发环境】详解为什么开发板的TFTP、NFS等网络功能神奇消失

 

详解为什么开发板的TFTPNFS等网络功能神奇消失

Sailor_forever  [email protected] 转载请注明

http://blog.csdn.net/sailor_8318/archive/2008/04/16/2295603.aspx

 

【摘要】:搞无线开发的朋友注意了,本文详解为什么开发板的TFTPNFS等网络功能神奇消失。在安装完毕无线网卡驱动后,出现开发板的网络系统不能用,也无法ping通的情况,本质上是由网络接口的问题引发的路由表问题,数据包无法通过无线接口发送出去。现转贴我在linuxforum.net上的精华帖。

【关键词】:pingTftp,无线局域网,wn321gwl167garm

 

原帖链接

http://www.linuxforum.net/forum/showflat.php?Cat=&Board=embedded&Number=646218&fpart=1&PHPSESSID=

 

问题来源:

主机端已经设置好了TFTP,以前能用,最近突然不能用

TFTP from server 192.168.0.12; our IP address is 192.168.0.15

Filename 'ulmage'.

Load address: 0x21000000

Loading:T T T T T T T T T T T T 。。。。。

Retry count exceeses ;starting again

 

我通过flash启动,进入系统可以更改MAC,也可以配置IP,提示成功

[root@AT91RM9200DK /root]$ifconfig

eth0 Link encap:Ethernet HWaddr 00:E0:4C:4D:8D:5E

inet addr:192.168.0.14 Bcast:192.168.0.255 Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

但是ping不通主机,这个时候板子上网络的一个灯在闪烁,应该是正在发送数据

相关情况可见

http://www.linuxforum.net/forum/showflat.php?Cat=&Board=embedded&Number=646034&fpart=1&PHPSESSID=

 

 

也就是说不管是U-boot通过TFTP与主机通信下载内核印象还是进入系统后ping主机或者通过NFS加载主机上的文件,此时,以前可用的网络功能现在都不能用了

 

为什么呢?更神奇的是板子拿到别人机子上就可以用了,证明硬件没问题

网线拿到别的开发板上用别人的机子也没问题

主机ping局域网内的机器也没问题

开发板网络硬件、主机网络接口、网线都没问题,可为什么TFTP无法下载呢,为什么无法加载NFS?就怪了!?

 

折腾好几天,又有坛子里朋友们的支持,终于搞定了这个问题,在此感谢nxinvxworks帮我排除了板子本身的硬件问题,才让我想到了无线接口的问题

 

小弟正从事无线网卡在ARM平台上的移植工作,希望与大家多交流共同提高

 

其实问题的本质就是最近我刚安装好了无线网卡的驱动,现在主机有两个网络接口,无线网络接口优先,因此板子的TFTPNFS功能都被限制了,根本办法windows下杀死无线网卡驱动的进程,Linux下关闭无线网卡的驱动,保证只有eth0接口

 

网络下载内核和文件系统启动

tftp 20000000 zImage 时出现:
MAC error during MII initialization
TFTP from server 192.168.0.12;our IP address is 192.168.0.14Filename 'zImage'
Load address:0x20000000
Loading:T T T T T T T T T T T T
错误现象:TFTP无法与主机建立网络连接,无其他提示信息,开发板在启动阶段不支持PING

 

干扰因素:

1、 主机端和开发板的网络设置完全正确,以前能用,最近突然冒出这个问题

2、  U-boot启动阶段出现过一次MII初始化错误的提示信息

MAC error during MII initialization就出现过一次,现在都没有这个提示  

3、  想修改下MAC地址解决MII错误问题,但环境变量MAC地址无法更改

但另外敲入Uboot> setenv ethaddr
12:34:56:78:99:aa
后显示 Can/'t overwrite "ethaddr" ,是什么原因呢?
mac
地址不能写入吗?但其他的变量都可以修改
以前MAC地址可以改的,是不是硬件现在坏了?

初步结论:硬件可能坏了

不采用U-bootLinux平台,单独在裸机环境下测试以太网硬件,经测试没有问题

工作还得继续阿,先用FLASH模式启动系统再说吧

 

Flash模式启动系统

通过Flash启动进入Linux,可以配置MACIP地址,但是也ping不通主机

用回环接口lo进行了测试,ping 127.0.0.1 确没有问题,说明网卡本身及驱动没问题

 

[root@AT91RM9200DK /root]$ifconfig
eth0 Link encap:Ethernet HWaddr 00:E0:4C:4D:8D:5E
inet addr:192.168.0.14 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
但是ping不通主机,这个时候板子上网络的一个灯在闪烁,应该是正在发送数据

Linux环境下面就是出现ping 无法返回的结果,无其他现象

Linux主机ping 开发板提示request timed out

但是Linux主机可也ping通其他Windows 主机(后来发现这个主机当时正好安装了无线网卡,一定程度上更增加了排查问题的难度)

 

也就是说不管是U-boot通过TFTP与主机通信下载内核印象还是进入系统后ping主机或者通过NFS加载主机上的文件,此时,以前可用的网络功能现在都不能用了

最原始 替换原理测试

为什么呢?更神奇的是板子拿到别人机子上就可以用了,证明硬件没问题
网线拿到别的开发板上用别人的机子也没问题
主机ping局域网内的机器也没问题
开发板网络硬件、主机网络接口、网线都没问题,可为什么TFTP无法下载呢,为什么无法加载NFS?就怪了!?

 

进一步的结论

问题进一步缩小,确定在开发板和主机PC建立网络连接时出现了问题???

 

类比联想

联想到当时在DoCOMo实习时也遇到过无线网络连接不通的问题,Linux开发板默认为无线的,主机上双击后即连接为无线网络,通常情况下都没有问题,但是当开发板使用了有线接口后无线就连接不通了,二者不能同时存在,并且使用时有一定的先后顺序

 

关于板子无线和有线网络接口问题的总结:

1、系统上电后默认为无线接口的,此时有线接口是不通的,要想使用有线接口必须stargate:/root# ifconfig wlan0 down9

2、使用有线接口后即使再次打开无线接口stargate:/root# ifconfig wlan0 up,此时有线网络仍然是通的,尽管显示无线接口正常,但无线接口不能通讯,必须关闭

stargate:/root# ifconfig eth0 down

cs89x0 net_close (initialized=1)

3、中途配置任何接口即使提示成功,也不能强行抢占网络接口,必须关闭对方

ifconfig wlan0/eth0 down

自己才能使用网络接口

4、板子和主机必须同时关闭无线接口后,二者才能够eth0ping(静态IP

 

其实问题的本质就是最近我刚安装好了无线网卡的驱动,现在PC主机有两个网络接口,无线网络接口优先,因此板子的TFTPNFS功能都被限制了,根本办法windows下杀死无线网卡驱动的进程,Linux下关闭无线网卡的驱动,保证只有eth0接口

 

寻根究底 路由表是罪魁祸首

发送网络数据包的时候需要查找路由表,以决定从哪个网卡发送出去

但是目前有线和无线共用一个网段,故在此网段的数据只能从一个网络接口发送出去

netstat –r察看路由表

反复打开关闭无限及有线网络接口,查找路由表的变化规律,跟推断相吻合

 

另外用sniffer, ethereal, TCPDUMP等网络分析软件进行抓包分析,进一步验证了推断结果

 

最简单的解决方案就是无线和有线分别采用不同的网段,这样路由表中就有两条路由表项,包根据子网号就可以发送到正确的网络中。

 

至此,无线和有线双网卡系统的互联问题得以根本解决~~~~~

 

 

详细过程如下:

一、配置以太网eth0Lo,确定板子硬件无误

[root@AT91RM9200DK /root]$ifconfig eth0 192.168.0.14

eth0: Link now 100-FullDuplex

[root@AT91RM9200DK /root]$ifconfig

eth0 Link encap:Ethernet HWaddr 00:18:F3:E5:9D:66

inet addr:192.168.0.14 Bcast:192.168.0.255 Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

.............

[root@AT91RM9200DK /root]$ping 192.168.0.12 此时主机有无线接口,不能ping

PING 192.168.0.12 (192.168.0.12): 56 data bytes

 

--- 192.168.0.12 ping statistics ---

4 packets transmitted, 0 packets received, 100% packet loss

 

[root@AT91RM9200DK /root]$ifconfig lo 127.0.0.1

[root@AT91RM9200DK /root]$ifconfig ##当前以太网和回环接口UP

eth0 Link encap:Ethernet HWaddr 00:18:F3:E5:9D:66

inet addr:192.168.0.14 Bcast:192.168.0.255 Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

UP LOOPBACK RUNNING MTU:16436 Metric:1

 

[root@AT91RM9200DK /root]$ping 127.0.0.1 ##网络硬件应该没有问题了吧

PING 127.0.0.1 (127.0.0.1): 56 data bytes

Warning: unknown ICMP packet received (not echo-reply)

64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=1.6 ms

 

--- 127.0.0.1 ping statistics ---

6 packets transmitted, 6 packets received, 0% packet loss

 

二、未拔无线网卡,关闭无线接口确不行

[root@dding root]# ifconfig rausb0 down

[root@dding root]# ifconfig

eth0 Link encap:Ethernet HWaddr 00:F0:4C:81:64:43

inet addr:192.168.0.12 Bcast:192.168.0.255 Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

UP LOOPBACK RUNNING MTU:16436 Metric:1

## 关闭了无线接口此时只剩下有线接口,看是否能否ping

 

[root@dding root]# ping 192.168.0.14 怎么会这样呢,我连上了阿?网线肯定没问题阿

connect: Network is unreachable

[root@AT91RM9200DK /root]$ping 192.168.0.12

PING 192.168.0.12 (192.168.0.12): 56 data bytes

 

--- 192.168.0.12 ping statistics ---

11 packets transmitted, 0 packets received, 100% packet loss

## 绝望阿

 

三、拔下无线网卡、彻底关闭无线接口

[root@dding root]# service network restart

正在关闭接口 eth0 [ 确定 ]

关闭环回接口: [ 确定 ]

设置网络参数: [ 确定 ]

弹出环回接口: [ 确定 ]

弹出界面 eth0 [ 确定 ]

弹出界面 rausb0 rt73 设备 rausb0 似乎不在。将要推迟它的初始化。

[失败]

[root@dding root]# ifconfig

eth0 Link encap:Ethernet HWaddr 00:F0:4C:81:64:43

inet addr:192.168.0.12 Bcast:192.168.0.255 Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

 

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

UP LOOPBACK RUNNING MTU:16436 Metric:1

##彻底清除无线接口

 

四、板子和主机互ping

[root@dding root]# ping 192.168.0.14 ##ping板子,可以了,哈哈,原来如此阿

PING 192.168.0.14 (192.168.0.14) 56(84) bytes of data.

64 bytes from 192.168.0.14: icmp_seq=1 ttl=64 time=0.836 ms

 

--- 192.168.0.14 ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 2008ms

rtt min/avg/max/mdev = 0.135/0.382/0.836/0.321 ms

 

[root@AT91RM9200DK /root]$ping 192.168.0.12 ##ping主机,可以阿,太爽了,心病没了

PING 192.168.0.12 (192.168.0.12): 56 data bytes

64 bytes from 192.168.0.12: icmp_seq=0 ttl=64 time=0.5 ms

64 bytes from 192.168.0.12: icmp_seq=2 ttl=64 time=0.3 ms

 

五、板子重新启动,TFTP功能正常了(注意,此时主机的无线接口必须是关闭的)

##板子重新启动

U-Boot 1.1.1 (Nov 16 2004 - 18:01:43)

 

U-Boot code: 21F00000 -> 21F16F2C BSS: -> 21F1B368

RAM Configuration:

Bank #0: 20000000 32 MB

Flash: 16 MB

In: serial

Out: serial

Err: serial

Hit any key to stop autoboot: 0

TFTP from server 192.168.0.12; our IP address is 192.168.0.15

Filename 'ulmage'.

Load address: 0x21000000

Loading: #################################################################

#################################################################

 

至此,一切问题搞定!

 

你可能感兴趣的:(linux,网络,Flash,嵌入式,initialization,statistics)