找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 563|回复: 2
收起左侧

关于开发板,PC机,以及linux虚拟机通信的一些问题

[复制链接]
ID:729982 发表于 2024-3-21 17:37 | 显示全部楼层 |阅读模式
最近遇到一个比较难调试的问题,想用一下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,都会继续写笔记
回复

使用道具 举报

ID:883242 发表于 2024-3-21 20:05 | 显示全部楼层
很好的经验。
回复

使用道具 举报

ID:729982 发表于 2024-3-28 16:45 | 显示全部楼层
之前的经验有一些问题,这段时间又弄了一下,发现以前的方法配出来的网络跟六脉神剑一样时灵时不灵,下面做一个更正:
首先大家可以看看https://blog.csdn.net/m0_52318340/article/details/125004109
这篇博客中讲了VMnet0、1、8虚拟网卡分别代表什么,怎么用。
总结就是想通过虚拟机连接访问板子,已经板子也要访问虚拟机,只能用VMnet0桥接,VMnet8和1配出来板子都无法访问虚拟机,而虚拟机可以ping板子。

下面说方法
1、VM虚拟网卡设置里,开启三个网卡,分别设置桥接,nat,还有仅主机模式,VM0桥接,VM1仅主机,VM8 nat。然后重置
2、虚拟机设置里也要申请3个网络配置,同样对应三个虚拟网卡。然后桥接那个记得勾选复制物理连接
3、打开linux虚拟机,发现有三个网络了,进入网络设置,把所有的ip都勾选自动,删掉手动ip,重启网络。通过ifconfig看这几个网络的ip,看网段分别对应哪个虚拟网卡,其中有ip的那两个会对应1和8。另外一个VMnet0必须要手动设置ip的,所以没有获得ip的就是VMnet0,然后断开VMnet1的连接。
4、打开电脑主机的网络配置,把VMnet8设置一个手动的ip,和虚拟机里的VMnet8的那个连接必须是同一个网段的不同IP,这样就实现了虚拟机通过主机访问外网,但是外网访问不了虚拟机。
5、虚拟机里属于VMnet0的那个网络的IP设置成电脑以太网口的网段,根据我上面的帖子,板子IP为192.168.1.137,电脑以太网口的ip192.168.1.23,那么虚拟机这个对应VMnet0的网络设置成192.168.1.12.如此下来板子和虚拟才能相互通信。
6、如果只开VMnet0也可实现外网访问虚拟机,虚拟和板子相互访问,那就是在第五条的基础上,板子,电脑,路由器,交换机接到一起,这样外网就可以通过这个以太网口访问虚拟机了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表