最近遇到一个比较难调试的问题,想用一下linux的GNUdebug,但是弄了很久发现,需要板子和电脑的linux虚拟机能通信才行,这直接给我挂掉了,我这电脑神经兮兮的,虚拟机自从安装好了,就从来没ping通过,个人对网络这块也是一知半解,以前没遇到问题就一直没处理,这次自己查了很久很久的资料,发现别人的方法都不行,然后自己瞎倒腾一通,搞定了,但是不知道为啥,但是记录一下,免得以后换电脑了搞不定环境。
我们工作中会遇到需要在linux上跑代码的情况,工程需要在电脑的linux虚拟机下交叉编译,然后将编译好的代码放到板子里的linux系统里运行。不管是通过共享文件夹和winscp来拖动复制文件,还是说将文件通过SD卡转移,都是非常麻烦的。有一个办法可以让代码直接电脑编译好后就在板载的linux里跑,那就是挂载。将虚拟机的编译目录挂载到板子的linux里,板子再通过ssh进入此目录后,直接就可以运行电脑编译好的程序了。挂载的命令很简单,网上很多办法,此文章是记录我解决的另一个问题,即板子->PC机->虚拟机的通信问题。毕竟挂载的前提就是能通信上。
第一步,板子和电脑通信,这个没啥好说的,板子和电脑的以太网口的ip是同一个网段就ok
第二步,电脑ping通虚拟机,虚拟机ping通电脑。这一步比较复杂。首先电脑需要在主机的防火墙中,入站规则开通ICMPv4-in,不会的可以百度,觉得麻烦可以直接关防火墙(笑~)。重点来了,下面是我弄通这一步的过程
1.打开虚拟机->编辑->虚拟网络编辑器,进去直接右下角还原默认设置,因为以前调的时候乱改过这个设置,我直接重置了重新调
重置后你这里的虚拟机的网络设置,以及电脑控制面板中关于VMnet1和VMnet8的设置全部都会重置。
重点来了,打开电脑的网络适配器。把VMnet设置成和板子同样的网段里不同的ip,比如我板子是192.168.1.137,电脑以太网口是192.168.1.23,那我VMnet1设置成192.168.1.17
网上别人说要设VMnet8,但我试了不行。
2.打开虚拟网络编辑器,里面重置以后会随机给net1和net8分配子网地址,将net1的子网地址复制给net8,再将net1的子网地址改成你板子的网段,我的是192.168.1.0,如果巧合你的net1网段和你板子的一致,这一步跳过。
3.打开虚拟机的设置页面,看看网络适配器,改成nat模式
4.启动虚拟机,ifconfig看看网络地址,如果之前的设置都没问题的话,里面会有一个网络会自动分配到和你板子一个网段
可以看到他们是对应的,如此下来,虚拟机即可以ping通百度,又可以ping通PC机了,但是还不一定能ping通板子
5.打开电脑的网络适配器选项,找到你电脑的以太网口,属性--共享,将其共享给VMnet1,搞定
总结,因为虚拟网络编辑器里面那个VMnet1和VMnet8两个的子网是不能一样的,所以可以交替的尝试一下,把其中一个的子网换成你板子的网段,其次就是虚拟机的网络设置一定要是net模式,然后就是可以通过ipconfig看电脑的IP,ifconfig看虚拟机的IP,要保证电脑-虚拟机-板子不能有相同的IP,因为他们在同一个网段下。如果IP始终有问题,可以启动虚拟机,进去网络设置看看你是否曾经手动设置过虚拟机的IP
现在我已经把板子到虚拟机的通信终于调通了,后续关于挂载,和GNUdebug,都会继续写笔记
|