今天按照国嵌视屏,进行uboot--网卡驱动的移植,对移植过程中的几点疑问记录如下:
1、修改DM9000网卡的地址
通过查看原理图,dm9000链接的是arm的bank4,即地址应该是0x20000000,什么会是0x20000300呢??(原理图如下)
2、修改完后,编译后移植uboot,应该支持网卡dm9000,但是发现开发板子不能ping同虚拟机服务器的ip
Mini2440 # set serverip 192.168.189.128 // 设置好服务器的ip
Mini2440 # set ipaddr 192.168.189.120 // 设置好开发板子的ip
Mini2440 # printenv
bootdelay=3
baudrate=115200
netmask=255.255.255.0
stdin=serial
stdout=serial
stderr=serial
serverip=192.168.189.128
ipaddr=192.168.189.120
Environment size: 139/65532 bytes
Mini2440 # ping 192.168.189.128
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 00:00:00:00:00:00
*** ERROR: `ethaddr' not set
ping failed; host 192.168.189.128 is not alive
Mini2440 # set ethaddr 10:23:45:67:89:ab // 设置好网卡的mac地址
Mini2440 # print
bootdelay=3
baudrate=115200
netmask=255.255.255.0
stdin=serial
stdout=serial
stderr=serial
serverip=192.168.189.128
ipaddr=192.168.189.120
ethaddr=10:23:45:67:89:ab
Environment size: 165/65532 bytes
Mini2440 # ping 192.168.189.128 // 插上交叉网线后,ping服务器ip
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 10:23:45:67:89:ab
ping failed; host 192.168.189.128 is not aliv // 发现提示没有服务
疑问:
(1)、难道是虚拟机的tftp服务器没有开启的原因??
查询虚拟机的tftp是否开启
[root@localhost u-boot-2008.10]# netstat -a |grep tftp
udp 0 0 *:tftp *:*
[root@localhost u-boot-2008.10]#
这里已经提示虚拟机的服务器已经开启了,所以不是虚拟服务器tftp没有开启的原因
(2)、查询了网上资料,他们说可能是虚拟机的网络配置问题,网络配置为桥接,电脑能够ping通虚拟的ip??
pc能够ping通虚拟机的ip,网络也设置为桥接方式,结果:开发板还是不能ping通虚拟机ip
(3)、自己用开发板子的uboot,设置完成后,结果发现板子也是不能ping通虚拟机服务器,现在可以确定不是uboot移植的错误,导致ping不同
追问:1、难道,网线不是交叉线的原因??2、难道是虚拟机本身的问题??
现在的问题还真的暂时解决不了,暂时搁下,记录下来,不知道他人是否遇到此类问题,请提供帮助!!
3、问题解决办法
买回来个路由器,把开发板子交叉线 和 电脑的网线都接在路由器的lan口,形成局域网
情况1:
虚拟机:192.168.189.128
主机:192.168.8.100
虚拟机映射出的两个虚拟的ip地址:
vmnet8:192.168.189.1
vmnet1:192.168.83.1
结果 :虚拟机 和 pc机 之间可以互相ping通(虚拟采用的 nat 连接方式)
情况2:
解决办法:修改虚拟机的ip地址为:192.168.8.89,和pc机:192.168.8.100在同一个网段内
结果:虚拟机 和 pc机 之间ping不通(虚拟机采用的是nat连接方式,而不是桥接方式)
设置linux的ip的方法:
下面我们来举个例子如何实现Linux环境下设置IP地址。
#ifconfig eth0 192.168.0.1 或者 修改/etc/sysconfig/network-scripts/下的ifcfg-eth0
#vi /etc/syssconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static // 设置为静态ip地址方式
HWADDR= ;这里是你网卡的物理地址,通常检测到的网卡你就不用输入了
ONBOOT=yes
IPADDR=192.168.0.1
NETMASK=255.255.255.0
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
GATEWAY= ;这里输入你的网关,路由器的IP地址
保存退出
#service network restart
虚拟机菜单栏——>vm(虚拟机)——>setting(设置)——>networkAdapter:bridged就可以了,
注意:设置为NAT网络连接方式是不行的
这样子 开发板:192.168.8.80,pc机:192.168.8.100,虚拟机:192.168.8.90 都在同一个网段内的ip地址,现在开发板、虚拟机、pc机之间可以互相ping通了。
Mini2440 # set serverip 192.168.8.90 // 设置虚拟机tftp服务器的ip
Mini2440 # printenv
bootdelay=3
baudrate=115200
netmask=255.255.255.0
name=TQ2440
ethaddr=01:23:45:67:89:ab
ipaddr=192.168.8.80
stdin=serial
stdout=serial
stderr=serial
serverip=192.168.8.90
Environment size: 171/65532 bytes
Mini2440 # ping 192.168.8.90 // ping一下虚拟机的服务器
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 01:23:45:67:89:ab
host 192.168.8.90 is alive // 采用桥接方式后,既可以ping通虚拟机啦
新问题:(DHCP获取的ip地址和默认的路由器的网关不在同一个网段内)
但是问题又来了,路由器的当用DHCP自动获取ip地址时(路由器连接上一级路由器,wan端ip地址设置为动态获取ip:192.168.1.111,lan端ip地址设置为192.168.8.1),当pc机使用自动获取ip地址的方式获取ip时:却出现了这么奇葩的问题:
也就是根本访问不了路由器的web界面,这问题就很奇怪,一开始我认为是路由器的问题,刚买了tp-link个路由器,但是发现了面没有说明书,以为是盗版的。急匆匆的拿去店里面去找老板理论,但是在老板店里面,电脑在没有虚拟机的情况之下,DHCP自动获取ip地址还是在192.168.8.1的正常范围内啊,这问题就是让我纠结啦,难道是虚拟机设置的影响???虚拟机网络设置的setting中,网络桥接和nat连接有什么样的区别???为什么虚拟机nat连接时,设置虚拟机和pc机在同一个网段内,却ping不通pc机,设置为网络桥接后,就可以ping通了呢????
猜测:
难道nat连接方式是把虚拟机当作内网??所以你在和pc机同一网络段下是ping不通的,桥接方式是把虚拟机和pc机当成一个局域网,所以就可以ping通了。现在这样子的猜测感觉很和道理。。。。。。。。。。。。
尝试:得重新启动电脑一下,看看dhcp获取的ip地址是否正常??????
新问题的解决:
原来是因为,
局域网中还有另一台DHCP服务器,且他的接入口为192.168.230.X的地址,这台DHCP服务器,就是虚拟机,也就是虚拟机在作怪。
Edit-->Virtual Network Editor
把上述的 VMnet0 这个能够DHCP分配给电脑ip的删除掉,然后再自动获取ip地址时,pc机就能够获取到路由器的ip地址了,且和路由器在同一个网段内。
到这里,经过了一天的不断尝试和排除,终于找到了问题的根源,原来不是路由器的问题,tp-link路由器还是比较稳定的,而是对电脑的虚拟机认识不够,导致出现的问题,在自己认知的范围内,特别感到奇葩,原来其实就是那么一回事。。。。。。。。。~~~~~~~~~~