核心思想

在 RK3588 开发过程中,我需要同时使用 Windows 主机、VMware 中的 Ubuntu 虚拟机和 RK3588 开发板:Windows 用于日常开发与调试,Ubuntu 用于编译或运行 Linux 环境下的程序,RK3588 则负责板端部署。为了让三者能够互相传输文件、访问服务和调试程序,我搭建了一套不依赖路由器的三端局域网。

一、最终目标

最终使用的地址规划如下:

设备 网络接口 IPv4 地址 子网掩码 默认网关
Windows 主机 真实有线网卡 192.168.20.1 255.255.255.0 留空
RK3588 板端有线网卡 192.168.20.2 255.255.255.0 留空
Ubuntu 虚拟机 ens33 192.168.20.5 255.255.255.0 留空

三个地址的子网掩码都是 /24,因此它们都属于 192.168.20.0/24 网段,可以直接通信,不需要路由器和默认网关。

实际连接关系如下:

1
2
3
4
5
6
7
8
9
RK3588(192.168.20.2)
│
网线
│
Windows 真实有线网卡(192.168.20.1)
│
VMware VMnet0 桥接
│
Ubuntu ens33(192.168.20.5)

需要注意的是,“三个设备使用同一个网口”并不是把三个 IP 全部配置在 Windows 网卡上。Windows、Ubuntu 和 RK3588 各自拥有独立地址,VMware 只是把 Ubuntu 的虚拟网卡桥接到了 Windows 的真实有线网卡。

二、配置 Windows 有线网卡

首先使用网线直接连接电脑和 RK3588。Windows 可以继续通过 Wi-Fi 上网,有线网口只负责与开发板通信。

按下 Win + R,输入:

1
ncpa.cpl

找到与 RK3588 相连的“以太网”,右键进入:

1
属性 → Internet 协议版本 4(TCP/IPv4)→ 属性

打开 Windows 网络适配器设置
选择“使用下面的 IP 地址”,填写:

1
2
3
4
IP 地址:192.168.20.1
子网掩码:255.255.255.0
默认网关:留空
DNS:留空

为 Windows 有线网卡配置静态 IPv4 地址
也可以在管理员 PowerShell 中执行:

1
netsh interface ipv4 set address name="以太网" static 192.168.20.1 255.255.255.0

随后检查配置:

1
ipconfig

确认真实有线网卡显示 192.168.20.1。这里一定要分清真实“以太网”和 VMware 创建的 VMnet1、VMnet8 虚拟网卡。

三、配置 VMware 桥接网络

这一部分是三端通信的关键。虚拟机如果处于 NAT 或仅主机模式,通常不能像独立设备一样直接进入 RK3588 所在的物理网络,因此需要使用桥接模式。

先将 Ubuntu 虚拟机完全关机,然后在 VMware 中打开:

1
编辑 → 虚拟网络编辑器 → 更改设置

选择 VMnet0,设置为:

1
2
网络类型:桥接模式
桥接到:电脑真实的有线网卡

“桥接到”最好不要选择“自动”,而是明确选择连接 RK3588 的 Realtek 或 Intel 有线网卡。不要选择 Wi-Fi、VMnet1、VMnet8、蓝牙或者 VPN 网卡。

在 VMware 虚拟网络编辑器中配置虚拟网络
接着打开 Ubuntu 虚拟机设置:

1
虚拟机设置 → 网络适配器

选择:

1
自定义:特定虚拟网络 → VMnet0

同时确认“已连接”和“启动时连接”已经勾选。如果界面中有“复制物理网络连接状态”,也可以一并勾选。

VMnet0、VMnet1 和 VMnet8 的区别

网络 典型用途
VMnet0 桥接到真实网络,让虚拟机像独立电脑一样接入物理局域网
VMnet1 仅主机网络,主要用于虚拟机与宿主机之间通信
VMnet8 NAT 网络,主要用于让虚拟机借助宿主机访问互联网

排障过程中,我曾发现 Windows 的 VMnet1 也占用了 192.168.20.0/24 网段。这会导致 Windows 同时存在两条相同网段的路由,数据可能从错误的接口发出。因此,最终配置时应避免让 VMnet1 和真实有线网卡处于同一网段。可以暂时禁用 VMnet1,或者将它改为其他网段,例如 192.168.200.0/24。

四、配置 Ubuntu 虚拟机

启动 Ubuntu 后,先查看网卡名称:

1
2
ip -br link
ip -br addr

我的虚拟网卡名称是 ens33。不同环境中也可能显示为 ens160、enp0s3 或 eth0,后续命令需要使用实际名称。

使用图形界面配置

依次打开:

1
设置 → 网络 → 有线 → 齿轮按钮 → IPv4

将 IPv4 方法改成“手动”,填写:

1
2
3
4
地址:192.168.20.5
网络掩码:255.255.255.0
网关:留空
DNS:留空

保存后关闭并重新开启有线连接。

使用 NetworkManager 配置

先查看连接名称:

1
2
nmcli device status
nmcli connection show

假设连接名称为 Wired connection 1,执行:

1
2
3
4
5
6
sudo nmcli connection modify "Wired connection 1" \
ipv4.method manual \
ipv4.addresses 192.168.20.5/24 \
ipv4.gateway "" \
ipv4.dns "" \
ipv4.never-default yes

重新启用连接:

1
2
sudo nmcli connection down "Wired connection 1"
sudo nmcli connection up "Wired connection 1"

检查结果:

1
2
ip -4 addr show ens33
ip route

正常情况下可以看到:

1
inet 192.168.20.5/24

如果虚拟机还需要访问互联网,可以再添加一块 NAT 网卡:第一块网卡使用 VMnet0 与 RK3588 通信,第二块网卡使用 VMnet8 上网。此时桥接网卡不应抢占默认路由,所以设置了 ipv4.never-default yes。

五、配置 RK3588

在 RK3588 上查看接口名称:

1
2
ip -br link
ip -br addr

常见名称是 eth0 或 end0。假设实际接口为 eth0,可先临时配置:

1
2
sudo ip link set eth0 up
sudo ip addr add 192.168.20.2/24 dev eth0

如果网卡原来有错误地址,并且当前是在串口、HDMI 或本地终端中操作,可以清除后重新配置:

1
2
3
sudo ip addr flush dev eth0
sudo ip addr add 192.168.20.2/24 dev eth0
sudo ip link set eth0 up

如果当前是通过 SSH 远程连接 RK3588,不要直接执行 ip addr flush,否则连接会立即中断。

检查配置:

1
2
ip -4 addr show eth0
ip route

临时配置在重启后可能消失。永久配置方式要根据板端使用的是 NetworkManager、/etc/network/interfaces 还是其他网络管理服务决定。

六、逐步验证三端通信

网络排查时不要一开始就测试业务程序,而应先确认最基本的 Ping。

Windows 测试

1
2
ping 192.168.20.2
ping 192.168.20.5

Ubuntu 测试

1
2
ping -c 4 192.168.20.1
ping -c 4 192.168.20.2

RK3588 测试

1
2
ping -c 4 192.168.20.1
ping -c 4 192.168.20.5

理想情况下,三台设备之间的六个方向都应该能够通信。如果 Windows 能 Ping RK3588,但 RK3588 不能 Ping Windows,通常不是网线问题,而是 Windows 防火墙拦截了入站 ICMP 请求。

七、解决单向 Ping 问题

先在管理员 PowerShell 中查看网络类型:

1
Get-NetConnectionProfile

将连接 RK3588 的网络设为专用网络:

1
Set-NetConnectionProfile -InterfaceAlias "以太网" -NetworkCategory Private

然后添加允许 ICMPv4 的入站规则:

1
2
3
4
5
6
New-NetFirewallRule `
-DisplayName "Allow ICMPv4 from RK3588 network" `
-Direction Inbound `
-Protocol ICMPv4 `
-IcmpType 8 `
-Action Allow

也可以查看 ARP 或邻居表,判断二层通信是否正常。

Windows:

1
arp -a

Ubuntu 或 RK3588:

1
ip neigh

如果能够看到对方的 IP 和 MAC 地址,说明物理连接和桥接基本正常;如果长期显示 INCOMPLETE 或 FAILED,应重点检查网线、网卡状态、IP 地址和 VMware 桥接对象。

八、为什么 Ping 通了,程序还是访问不了

Ping 使用 ICMP 协议,只能证明基础网络连通,并不能证明某个 TCP 或 UDP 服务已经可以访问。

例如 Ubuntu 上运行了一个 8080 端口的服务,RK3588 需要访问:

1
curl http://192.168.20.5:8080

服务必须监听 0.0.0.0:8080 或 192.168.20.5:8080。如果只监听 127.0.0.1:8080,就只能在 Ubuntu 本机通过 localhost 访问。

Linux 中可以检查监听状态:

1
ss -lntp | grep 8080

下面两种监听地址的含义不同:

1
2
127.0.0.1:8080  只允许本机访问
0.0.0.0:8080 监听所有本机网络接口

因此,遇到“Ping 通但 curl 不通”时,应继续检查:

  1. 服务是否已经启动;
  2. 服务监听的 IP 是否正确;
  3. 端口是否填写正确;
  4. Windows 或 Linux 防火墙是否放行该端口;
  5. 客户端访问的是不是目标设备的真实局域网地址。

九、我的排障顺序

经过这次配置,我更习惯按照网络层次逐步排查:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
物理网线
↓
网卡是否处于 UP 状态
↓
IP 地址和子网掩码是否正确
↓
VMware 是否桥接到正确物理网卡
↓
ARP 是否能够解析对方 MAC 地址
↓
三端是否能够互相 Ping
↓
防火墙是否放行
↓
应用端口是否监听
↓
业务接口是否正确

常用检查命令如下:

1
2
3
4
5
6
7
ip -br link
ip -br addr
ip route
ip neigh
ping 192.168.20.2
ss -lntp
curl http://192.168.20.5:8080

这种顺序可以避免在基础网络尚未打通时,反复修改应用程序代码。

十、总结

最终稳定的三端通信配置可以概括为:

1
2
3
4
5
Windows 有线网卡:192.168.20.1/24
RK3588 网口: 192.168.20.2/24
Ubuntu ens33: 192.168.20.5/24
VMware: VMnet0 桥接到真实有线网卡
设备局域网网关: 留空

开发建议

对于嵌入式开发来说,这套思路不仅适用于 RK3588,也适用于树莓派、Jetson、其他 Linux 开发板以及通过以太网通信的 FPGA 设备。只要按照“物理连接—IP 与路由—Ping—端口—应用”的顺序排查,大多数网络问题都能逐步定位。