环境:Hi3516CV610 开发板(BusyBox 系统)、Ubuntu 虚拟机(NFS 服务端)
日志主题
解决开发板与 PC 主机、Ubuntu 虚拟机之间的网络连通性问题,最终实现 NFS 挂载,支持嵌入式开发的代码调试。
按照下面的网络拓扑结构,重点要注意主机有线静态 IP、桥接绑定正确网卡、虚拟机双网卡网关隔离、防火墙放行这四点。
之后重启设备,再次出现设备网络断连,可能原因写在了第五部分,同时也针对那些原因修改了前四部分。
重启虚拟机老是自动修改虚拟机上网卡的连接方式,每次重启虚拟机就自动把桥接模式的那个网卡改成了仅主机模式,导致网络通信失败。最后我以管理员身份打开VMware就不会自动修改了。
一、初始网络拓扑与问题描述
- 初始拓扑
开发板:通过网线直连 PC 主机的有线网卡
PC 主机:同时连接校园网(无线网卡 10.142.138.42/15,网关 10.143.255.254)和开发板(有线网卡)
虚拟机:桥接模式,初始连接无线网卡,可上外网,但无法与开发板通信
- 核心问题
开发板与 PC 主机无法直连 ping 通
虚拟机与开发板网络隔离,无法通信
开发板挂载虚拟机 NFS 时出现 Permission denied 权限错误
二、排错过程与解决方案
阶段 1:打通 PC 主机 ↔ 开发板直连链路
问题 1:开发板 IP 配置错误,与 PC 网段隔离
初始开发板配置:
# ifconfig eth0
inet addr:10.142.130.100 Mask:255.255.255.0
子网掩码为 255.255.255.0,与 PC 无线网段 10.142.0.0/15 不匹配,导致 PC 无法识别。
解决方案:
开发板重新配置 IP 与掩码,与 PC 网段对齐:
ifconfig eth0 10.142.138.100 netmask 255.254.0.0 up
route add default gw 10.143.255.254 eth0
验证路由表:
route -n
# 输出需包含10.142.0.0/15网段路由,走eth0网卡
问题 2:PC 主机有线网卡未配置 IP,无法识别开发板
初始 PC 状态:有线网卡无静态 IP,无法响应开发板的 ARP 请求,导致 ping 超时。
解决方案:
以管理员身份打开 CMD(shift+ctrl+enter打开cmd命令),为主机的有线网卡配置静态 IP:
语法:
netsh interface ipv4 set address name="网卡名称" static IP地址 子网掩码 [默认网关] [跃点数]
netsh interface ipv4 set address name="以太网" static 10.142.138.200 255.254.0.0

添加静态路由,强制 10.142.138.0/24 网段走有线网卡:
route -p add 10.142.138.138 mask 255.255.255.0 10.142.138.200 metric 1
单主机路由,强制指定虚拟机IP走有线网卡,优先级最高,不会被抢占。
验证 PC 与开发板连通性:
ping 10.142.138.100
# 输出:来自10.142.138.100的回复,无丢包
阶段 2:打通虚拟机 ↔ 开发板通信链路(双网卡方案)
问题 1:单网卡桥接无法同时满足 "上外网" 和 "连开发板"
初始虚拟机配置:单网卡桥接无线网卡,可上外网,但无法与直连开发板通信;若桥接有线网卡则断外网。
解决方案:为虚拟机配置双网卡,分工明确:
1.虚拟机添加第二块网卡,模式为 NAT(用于上外网),原有网卡改为桥接模式,手动绑定 PC 有线网卡。重启虚拟机可能会修改桥接的虚拟网卡,最好是选择手动绑定桥接网卡,操作如下:
打开 VMware 虚拟网络编辑器。
将一张虚拟网卡设置为【桥接模式】,手动绑定主机有线网卡(Realtek PCIe GbE)。
取消勾选:将主机虚拟适配器连接到此网络。
在桥接模式的网卡的网络设置中选择自定义 ,下拉菜单选择前面设置桥接模式的网卡。
2.虚拟机 Netplan 配置(/etc/netplan/01-network-manager-all.yaml):
network:
version: 2
renderer: networkd
ethernets:
ens33: # 桥接有线网卡,与开发板通信(无网关)
addresses:
- 10.142.138.195/15
ens37: # NAT模式网卡,自动获取IP(负责外网)
dhcp4: true
nameservers:
addresses: [8.8.8.8, 114.114.114.114]
如果桥接网卡也设网关,虚拟机路由会乱,内网走外网出口,导致开发板访问卡顿 / 超时。编辑 netplan 配置文件,只给 NAT 网卡开网关,桥接网卡无网关。
虚拟机输入:
route -n
看默认路由 0.0.0.0 只出现在 NAT 网卡 上,桥接网卡无默认网关,即为正常。
3.应用配置并验证:
sudo netplan apply
ifconfig
# 验证ens33 IP为10.142.138.195,ens37获取到NAT网段IP
阶段 3:解决 NFS 挂载权限问题
问题:开发板挂载虚拟机 NFS 时 Permission denied
原因:虚拟机 NFS 服务配置未添加 no_root_squash,开发板 root 用户被映射为匿名用户,无读写权限。
解决方案:
1.虚拟机修改 /etc/exports 文件,添加开发板网段权限:
sudo nano /etc/exports
# 添加配置:/home/dev/nfs *(rw,sync,no_subtree_check,no_root_squash)
2.重启 NFS 服务并应用配置:
sudo exportfs -ra
sudo systemctl restart nfs-kernel-server
3.开发板执行挂载命令:
mount -t nfs -o nolock,tcp,rsize=32768,wsize=32768 10.142.138.195:/home/dev/nfs /mnt
三、最终状态
1.各设备ip配置

四、开发板网络永久生效方案
永久配置:将网络命令写入 /etc/init.d/rcS 开机脚本。
rcS 是嵌入式 Linux 标准开机自启方案,最稳定、最通用。
配置完成后,开发板每次上电自动联网,自动连通虚拟机,可直接使用 NFS。
vi /etc/init.d/rcS
# 在最后添加
ifconfig eth0 10.142.138.100 netmask 255.254.0.0 up
route add default gw 10.143.255.254
mount -t nfs -o nolock,tcp,rsize=32768,wsize=32768 10.142.138.195:/home/dev/nfs /mnt
# 保存退出
ESC :wq
chmod +x /etc/init.d/rcS
reboot
五、重启后再次出现网络断链
设备重启后网络再次断连的原因分析(本次问题根因)
-
VMnet0 自动桥接重启后失效/丢失 - VMware 默认桥接网络 VMnet0 重启后会重置、漂移到无线网卡 - 导致虚拟机桥接通道断开,主机无法访问虚拟机
-
Windows 网段路由被无线网卡优先级抢占 - 原 10.142.138.0/24 路由与无线网卡 10.142.0.0/15 冲突 - 系统优先走无线,不走向有线网卡,导致 ping 不通
-
桥接模式未固定绑定物理网卡 - 自动桥接会随机选择无线/有线,重启后必然错乱
最终稳定解决方案(重启永不失效)
-
固定桥接通道 - 使用 VMnet1 手动桥接有线网卡,虚拟机网卡绑定自定义 VMnet1 - 不使用自动桥接,不使用 VMnet0
-
Windows 路由改为单主机路由 - 路由目标:10.142.138.195/32 - 强制指向有线网卡,优先级最高
-
双网卡网关严格隔离 - 桥接网卡(ens33)无网关 - NAT 网卡(ens37)唯一默认路由
-
开发板 IP 写入 rcS 开机自启 - 重启自动配置 IP、网关、NFS 挂载
注意:
一、VMware 桥接模式绑定正确物理网卡(核心避坑)
桥接必须绑定主机有线网卡,不能绑无线,否则虚拟机桥接网卡跑在校园网网段,和开发板私网不在一个局域网,直接不通。
修改步骤
-
关闭虚拟机,打开 VMware 首页
-
顶部菜单:编辑 → 虚拟网络编辑器
-
选中 桥接模式 (Bridge)
-
下方「桥接到」:手动选择 你的有线网卡 名称一般带:Realtek 以太网、Intel 以太网、Ethernet,不要选 Wi-Fi / Wireless
-
勾选 将虚拟网络适配器连接到物理适配器
-
点应用 → 确定
-
进入虚拟机设置 → 网络适配器 1确认模式为:桥接模式
ip a
看桥接网卡(一般是 ens33)IP 是否能配置成同网段
二、Windows 防火墙放行私网网段
Windows 默认防火墙会拦截外来设备 ping、SSH、开发调试端口,出现能 ping 通但无法串口调试、sftp、ssh 连接失败。
修改方法:放行 192.168.10.0/24 网段(更安全)
控制面板 → 系统和安全 → Windows Defender 防火墙→高级设置 →入站规则 → 新建规则
允许所有端口和协议,作用域限定 远程 IP:所放行的虚拟机ip。