问题——IMX6UL的uboot无法ping主机或Ubuntu
主要描述可能的方向,不涉具体过程,详细操作可以查阅网上相关教程
跟随正点原子教程测试以太网端口时,即便按照步骤多次尝试也无法ping通,后补充了些许网络工程基础知识解决了这个问题。
uboot无法ping主机或Ubuntu有多种可能,我所知的有以下几种情况
——物理上未连接或连接松动
——防火墙没有关
——uboot的ip地址、子网掩码等配置错误
——…………
这次我所遇到的是第三种,这种情况比较复杂,有可能是虚拟机或主机网络配置错误、ip地址和子网掩码找错等。我描述一下我的连接情况,开发板通过网线连接到笔记本上,笔记本桥接Ubuntu,同时笔记本连接手机上的热点(就是WiFi)供上网
正是由于我的这种配置,导致了开发板与Ubuntu无法通信,简单来说就是开发板是直接连接到主机的,而非Ubuntu,所以开发板与Ubuntu所用的不一定是同一个网络接口,也不一定是同一个网段。直接跳到【目录一下面的3】
一、检测配置
1、检测虚拟机联网
在主机联上网的情况下(有线、无线都无所谓),在Ubuntu里直接打开火狐浏览器,然后随便点击一个网页,比如百度,看看能不能正常联网
如果不能的话,那么就要检查下面配置是否正常
①网络适配器
②虚拟网络编辑器
这个一般不用改,如果不小心改错了就点击【更改设置(C)】,进入下面窗口,然后点击【还原默认设置(R)】
③Ubuntu网络配置
输入ifconfig后,正常情况下会出现下面信息,此时你可以看到inet 后的ip地址、netmask后的子网掩码等。
如果不能的话,那么就要检查一下Ubuntu的network有没有改掉什么。由于我有时使用手机热点,有时使用以太网,有时使用公共WiFi,网关经常改变,所以配置成了动态分配。
不过Ubuntu的network一般不会出现不显示ip地址的情况,此时可以尝试到虚拟网络编辑器里还原默认设置,然后重启Ubuntu。更严重的可能是VMware的网络方面的工具安装错误等
2、主机与虚拟机互相通信
主机与虚拟机互相ping,如果不成功,首先要检测防火墙有没有关。如果防火墙关了仍会出现问题,那么要检查虚拟机与Ubuntu是否处于同一个网段,比如主机ip为192.168.116.140,那么虚拟机应为192.168.116.xx。可以选择动态分配,会自动生成同一个网段的ip地址
3、Uboot与主机通信
①基础知识
在终端里输入ipconfig会出现一下信息,不同的网络适配器下会有不同的ip地址,以不同方式访问笔记本时,笔记本呈现的是对应方式下网络适配器的ip地址。比如笔记本连接上手机热点,此时用的是无线局域网适配器 WLAN,那么笔记本的ip地址是192.168.116.149,手机可以通过这个ip地址与笔记本通信。
要注意的是,如果你使用桥接模式,并且虚拟网络编辑器里桥接模式设置的是自动,那么虚拟机就会自动匹配能连上网的网络适配器。所以此时我的Ubuntu的网段是192.168.116.0/24
这里我们只看以太网适配器 以太网(注意,不是VM的网络适配器),因为开发板是通过网线直接连接笔记本的以太网端口。
此时我们可以看到的是ip地址为169.254.10.236,子网掩码是255.255.0.0,通过子网掩码可以知道网段是169.254.0.0/16,那么ip地址可以设为169.254.xx.xx,而不是192.168.10.xx
②尝试主机与uboot通信
那么就可以在uboot里把ip地址和子网掩码给改了,网关gatewayip和服务器地址serverip不改也不会影响uboot向主机通信
改完重启开发板后,再去ping主机,一般来说这一步是可以正常ping,不会出现什么问题(要注意,这是单向通信,主机是不能ping通uboot的)
二、解决
1、_
2,_
3,创建新的网络接口
前面提到,由于Ubuntu与开发板分别处于无线局网络接口和以太网接口两个不同的网络接口且不是同一个网段,所以是无法直接通信的(默认是无法通信的,可以添加路由规则什么的)。所以给Ubuntu添加一个网络接口就行了。
具体操作见教程Ubuntu和IMX6ULL开发板网络通讯-配置方法
简单来说就是桥接模式供开发板通信,NAT供上网,因为桥接模式可以选择不同的网络适配器,而仅主机模式和NAT模式分别绑定了VMnet0和VMnet8
直接添加一个NAT网口、桥接选为以太网适配器时会出现下面信息,可以见到的是ens33(不同人的显示可能不同)这个代表是桥接模式的网口,ens37表示的是NAT网口。其中ens33由于动态分配ip地址,而此刻以太网端口连接的是开发板,自然没有网关,那么也就不会分配有效的ip地址
所以需要自己手动设置ip地址和子网掩码,网关可以不用设,需要格外注意开发板、主机、虚拟机必须在同一个子网内。此外,还需要牢记一点,在同网口有连接的情况下,只要在同一个子网内,那么它们三者就一定能通信,不管它们的ip是192.168.10.x还是10.236.x.x亦或者是什么别的形式
我在用Ubuntu桥接模式过程中,经常会遇到动不动就把设置的端口给关掉的情况(可能是因为我设的ip不是192.168.10.x?),这会导致uboot去ping主机时可以ping通,但是去ping虚拟机时失败,这一点要留意
下图是用uboot去ping主机(169.254.10.236)时能ping通,但去ping同一子网下的Ubuntu时却没ping通,检查一遍才发现Ubuntu对应网口被关了,于是打开后重新用uboot去ping虚拟机(169.254.10.100)就成功了
在ping的过程中,uboot可以单向ping主机或虚拟机,反之不行。主机与虚拟机可以正常互ping,只不过虚拟机去ping主机时,会时不时等间隔出现DUP这种报文
只有开发板去ping虚拟机时,虚拟机才能ping通开发板【已解决】
后来翻到这篇博客嵌入式Linux--正确设置网络使开发板ping同Ubuntu,才知道了原因