Skip to content

LV001-网络环境搭建

网络搭建的相关笔记是直接使用的正点原子出厂系统做的。这里主要记录电脑 WiFi 上网,设备和电脑网口直连的方式进行网络环境的搭建。

一、准备工作

1. 扩展坞

电脑接口不太够,我就买了一个 Type-C 的扩展坞,上边有扩展的网口,后续的开发都用的这个扩展坞上的网口,但其实电脑本身的网口也可以用,当然,网口够多的话。

image-20230717200554402

2. 硬件连接方式

使用场景:路由器离电脑比较远,只有一条网线。

设备:电脑(Windows)、正点原子 Linux 开发板(出厂系统)、路由器/交换机、直通网线。

image-20251023074324147

我使用的电脑中安装了虚拟机 VMware ,在 VMware 中运行 Ubuntu 系统,电脑连接无线网实现上网,由于我使用了一个扩展坞,所以开发板的 ENET2 (这个网口是正点原子 ALPHA 开发板的默认的 eth0 网口)网口通过网线连接到扩展坞的网口,扩展坞通过 Type-C 连接到电脑,关于网络配置的相关硬件连接就是这个样子啦。

3. 开发环境

3.1 Windows

markdown
版本	       Windows 11 专业版
版本号	      23H2
安装日期	  2024/9/16
操作系统版本  22631.4169
体验	       Windows Feature Experience Pack 1000.22700.1034.0

其中 Windows 通过连接路由器的 WiFi 上网,

3.2 Ubuntu

Ubuntu 安装在 Windows 中的 VMware 中。

  • VMware
markdown
产品:VMware® Workstation 17 Pro
版本:17.6.0 build-24238078
  • Ubuntu
markdown
# uname -a
Linux sumu-vm 5.15.0-139-generic #149~20.04.1-Ubuntu SMP Wed Apr 16 08:29:56 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux

# lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04.6 LTS
Release:	20.04
Codename:	focal

3.3 开发板

正点原子 I.MX6ULL-ALPHA 开发板,系统使用的是出厂系统。

  • U-Boot
markdown
U-Boot 2016.03-gee88051 (Nov 05 2021 - 17:59:02 +0800)

CPU:   Freescale i.MX6ULL rev1.1 792 MHz (running at 396 MHz)
CPU:   Industrial temperature grade (-40C to 105C) at 29C
Reset cause: POR
Board: I.MX6U ALPHA|MINI
I2C:   ready
DRAM:  512 MiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
  • Linux 内核
markdown
# uname -a
Linux ATK-IMX6U 4.1.15-g06f53e4 #1 SMP PREEMPT Sat Nov 27 18:39:27 CST 2021 armv7l armv7l armv7l GNU/Linux

# cat /etc/issue
Freescale i.MX Release Distro 4.1.15-2.1.0 \n \l

4. 关闭 Ubuntu 和 Windows 防火墙

在 Ubuntu 和 Windows 互相通信之前,需要关闭防火墙。在 Windows 主机的控制面板\系统和安全\Windows Defender 防火墙中选择关闭防火墙。 这一步其实主要是 windows 中的防火墙,它有些版本是真的会拦截的,比如我当时用的 windows 这个版本:

shell
版本	       Windows 11 专业版
版本号	      23H2
安装日期	  2024/9/16
操作系统版本  22631.4169
体验	       Windows Feature Experience Pack 1000.22700.1034.0

在这个版本中我就遇到了开发板可以 ping 通 ubuntu,但是 windows 和开发板,windows 和 ubuntu 均会出现互相 ping 不通的情况,ubuntu 也会 ping 不通开发板。但是后来发现其实也可以不关。

4.1 Windows

【控制面板】→【系统和安全】→【Windows Defender 防火墙】:

image-20240828070841191

最后如自定义设置:

image-20240828070911740

那我们要是不想关闭防火墙呢?毕竟关闭之后,我们的 windows 安全性也会降低,其实也是可以的,主要是我们需要设置一下策略,我们这样操作:

【控制面板】→【系统和安全】→【Windows Defender 防火墙】→【高级设置】→【入站规则】(允许别人 ping 是入站,所以在入站规则上进行操作)

image-20240917073009061

这里我的是 IPv4,所以打开这两个规则即可。那要是没见这两个规则呢?比如我的就比较坑,就没有,那这个时候我们点击旁边的新建规则,然后按提示进行配置:

image-20251026211932474

(1)在规则类型中,选择 “自定义”,然后点击 “下一步”

(2)在“程序”步骤,通常保持默认的 “所有程序” ,点击 “下一步”

(3)关键步骤是协议和端口设置:在“协议类型”中,选择 “ICMPv4” (如果网络支持IPv6,可能还需要为ICMPv6创建规则)。点击下面的 “自定义” 按钮,在弹出的窗口中,勾选 “特定ICMP类型”,然后在列表中找到并勾选 “回显请求” 。点击 “确定”

(4)在后续的“操作”步骤中,选择 “允许连接”

(5)根据网络环境(域、专用或公用)选择何时应用该规则,为了测试方便,通常可以全选

(6)最后,为规则起一个易于识别的名称,例如 “允许 Ping 请求 (ICMPv4-In)” ,然后点击 “完成”

4.2 Ubuntu

打开 Ubuntu 终端,使用以下指令关闭 Ubuntu 防火墙。

shell
sudo ufw disable
image-20240828071120835

二、电脑 WiFi 上网,开发板和电脑直连

1. windows 配置

接下来我们看一下在 windows 中需要做哪些配置。

1.1 查看 windows 中有哪些网络适配器

  • 方式一

【我的电脑】→【管理】→【设备管理器】→【网络适配器】

  • 方式二

win + r 调出运行框,然后输入以下命令:

shell
devmgmt.msc

按下 enter 按键就可以打开设备管理器,然后我们点开网络适配器即可看到电脑所有的网络适配器了:

image-20230717201127295

第一个以 ASIX 开头的就是扩展坞连接后连接到扩展坞网口的网络适配器了,就是我们后边要用的。

1.2 查看 windows 以太网网络适配器

1.2.1 方式一

当我们连接好扩展坞、电脑和 Linux 开发板后,我们打开网口的详细信息。【控制面板】→【网络和 Internet】→【网络和共享中心】或者我们直接在控制面板的地址栏输入下边的内容:

markdown
控制面板\网络和 Internet\网络和共享中心

然后就会打开网络和共享中心:

image-20230717201524314

我们会发现,当开发板网口连接到扩展坞网口后,会出现一个以太网 2 的活动网络,然后我们【以太网 2】→【详细信息】这样我们就可以看到这个网口连接的网络适配器的相关信息:

image-20230717201739190

可能是以前配置过,不过不重要,后边我们会重新配置。

1.2.2 方式二

我们按下 Win + r 调出运行框,然后输入以下命令:

shell
ncpa.cpl

按下 enter 按键后,就会看到以下弹窗:

image-20230717201926055

这样我们也可以看到我们关心的以太网口连接到了哪一个网络适配器,也就是网卡,后面虚拟网络编辑器的桥接模式要配置成这个。

1.3 设置网口 IP

接下来就是设置这个网口的静态 IP 信息了,步骤如下

image-20230717202053859

这里的 IP 地址我们设置的是 192.168.10.xxx 网段的,注意后边 Ubuntu 和开发板也要设置成同一网段。到这里我们 Windows 中的 IP 设置就完成了,要记得的是我们的 Windows 所设置的 IP 信息为:

shell
IP地址  :192.168.10.100
子网掩码 :255.255.255.0
默认网关 :192.168.10.1

1.4 查看 windows 主机所有网络信息

我们按下组合键 win + r ,打开运行框,输入 cmd ,再按下 enter 便可以打开命令行,我们在命令行输入以下命令:

shell
ipconfig

然后便会显示 Windows 中所有的 IP 配置信息:

shell
Windows IP 配置


以太网适配器 以太网:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . :

无线局域网适配器 本地连接* 1:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . :

无线局域网适配器 本地连接* 10:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . :

以太网适配器 VMware Network Adapter VMnet1:

   # ...
   IPv4 地址 . . . . . . . . . . . . : 192.168.234.1
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . :

以太网适配器 VMware Network Adapter VMnet8:

   #...
   IPv4 地址 . . . . . . . . . . . . : 192.168.19.1
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . :

以太网适配器 以太网 2:

   # ...
   IPv4 地址 . . . . . . . . . . . . : 192.168.10.100
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 192.168.10.1

无线局域网适配器 WLAN:

   #...
   IPv4 地址 . . . . . . . . . . . . : 192.168.10.110
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : fe80::1%2
                                       192.168.10.1
网络适配器名 IP 地址 备注
以太网适配器
以太网 2
192.168.10.100 以太网的 IP 信息,默认有一个 IP,需要手动修改。如果显示已断开,请将电脑网口接到开发板网口上
以太网适配器
VMware Network Adapter VMnet1
192.168.234.1 在 host-only 模式下,动态分配虚拟系统的 TCP/IP 配置信息
以太网适配器
VMware Network Adapter VMnet8
192.168.19.1 提供 DHCP 服务,用于主机和虚拟机互通,虚拟机上网
无线局域网适配器 WLAN 192.168.3.110 用于 Windows 主机上网
以太网适配器
VMware Network Adapter VMnet0
不提供 DHCP,用于桥接网络,要在虚拟网络编辑器设置手动设置 IP
我们在 Windows 终端看不到到 VMnet0 ,但是可以在虚拟网络编辑器中可以看到。这是我们用来桥接的网络适配器,不会自动分配 IP ,需要手动设置(在 Ubuntu 中设置,可以看 Ubuntu 设置部分)。这里要注意, VMnet0 设置的网段不能和 VMnet1 、 VMnet8 的网段一样,不然会有冲突。

1.5 windows IP

这里记录一下 windows 中对于我们来讲比较重要的两个 ip 地址:

shell
以太网适配器 以太网 2:
   IPv4 地址 . . . . . . . . . . . . : 192.168.10.100
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 192.168.10.1
   
无线局域网适配器 WLAN:
   IPv4 地址 . . . . . . . . . . . . : 192.168.10.110
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 192.168.10.1

2. ubuntu 配置

我这里用的是 ubuntu20.04 版本。

2.1 双网卡?

2.1.1 NAT 网卡

NAT 网卡: ubuntu 通过它上网,只要 Windows 能上网, ubuntu 就能上网。

NAT, 全称是 Network Address Translation, 指网络地址转换。使用 NAT 网卡时, ubuntu 要访问外网,是委托 Windows 发出数据包,Windows 接收到回应后再转发给 ubuntu。外界看到的都是 Windows,看不到 ubuntu。使用 NAT 时,只要 Windows 能上网, ubuntu 就必定能上网, 无需设置 ubuntu 的网络。对于外界来说,就只能看到 windows 一个设备。

2.1.2 桥接网卡

桥接网卡: ubuntu 通过它跟 linux 开发板联通。

使用桥接网卡时, ubuntu 就是使用一个真实的网卡,相当于开发板的网线也连接到这个真实的网卡上,对外界来说就相当于 ubuntu 也是一个单独的设备了。这样 Windows、 Ubuntu、开发板就都可以用过这个网卡互通了。

2.1.3 双网卡的虚拟机

使用双网卡的时候,是什么样子的?下图就是之前在 ubuntu20.04 中创建的双网卡虚拟机的状态:

image-20251023214353809

这是我以前的虚拟机的双网卡的情况。其实就是再添加一个网络适配器罢了。

2.2. VMware 桥接网络适配器

2.2.1 新建网络适配器

首先我们为虚拟机新建一个网络适配器,用作桥接,新建的网络适配器用于和 Windows、Linux 开发板通信,原来的 NAT 网络适配器用于上网。

image-20251023214651572

原来的网络适配器保持 NAT 模式,这样可以保证虚拟机正常上网,新建的网络适配器 2 我们设置为 桥接模式

image-20251023215030496

这样我们的 ubuntu 就有了两个网络适配器:一个 NAT 模式的适配器用于上网,一个桥接模式的用于和开发板、Windows 通信。

2.2.2 配置虚拟网络编辑器
  • (1)我们打开虚拟网络编辑器:【编辑】→【虚拟网络编辑器】
image-20251023215805601
  • (2)打开后界面如下,我们需要点击【更改设置】才可以修改各个参数

image-20251023221919046

这里直接有一个 VMnet0,应该是新版本的 VMware 所自动生成的,老版本的虚拟机可能会出现只有两个网络名称的情况,如下图,若是只有两个网络名称,我们就需要新建一个 VMnet0 :

image-20251023222201832

  • (3)设置 VMnet0 网络信息
image-20251023222718787

这里的桥接网卡要选择连接了 linux 开发板的网口对应的网络适配器,也就是刚才 windows 中出现的以太网 2 所对应的网络适配器。这里我们选择桥接,然后桥接到 ASIX 开头的这个网络适配器,后边就用于跟 Windows 和 Linux 开发板通信使用了。

  • (4)点击应用,然后退出就可以啦。
2.2.3 虚拟网卡名简介

上边我们看到了有 VMnet0 、 VMnet1 和 VMnet8 ,这是啥?为啥要新建一个 VMnet0 ?

虚拟网卡名 网络属性 定义
VMnet0 物理网卡 Bridge 桥接
VMnet1 虚拟网卡 host-only 仅主机
VMnet8 虚拟网卡 NAT
详细的可以看这个 [01-开发环境/01-虚拟机/LV010-VMware 网络模式.md](/sdoc/dev-env/vm/126b0ece32df2aa6ab307ec6)。
2.2.4 可能出现的问题
2.2.4.1 问题一

在选择“已桥接至”网络适配器的时候找不到以太网口对应的网络适配器。

这个时候我们打开以太网的详细信息,在属性中勾选 VMware Bridge Protocol 即可。

image-20220718213457711
2.2.4.2 问题二

虚拟网络编辑器中没有 VMnet0 ,新建的时候也没有 VMnet0 ,这时候怎么办呢?

这个问题吧,目前还没有遇到过,网上直接搜的话是有解决办法的,遇到这个问题的时候我们可以尝试还原默认设置,或者是重装 VMware ,清理一下注册表之类的,后边遇到这个问题了再补充到这里。

2.3 无法开启双网卡?

我前面吧虚拟网络编辑器恢复默认设置了一次,然后进入 ubuntu 后就无法开启两个网卡了,开了一个另一个自动关闭了,这个时候我们打开配置文件:/etc/netplan/01-network-manager-all.yaml

yaml
# Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: NetworkManager

我们修改这个文件:

yaml
# Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: NetworkManager
  ethernets:
    ens33:
      dhcp4: true
    ens37:
      dhcp4: true

然后执行:

shell
sudo netplan apply

然后两个网卡就能同时启动了。

ubuntu 从 17.10 开始,已放弃在/etc/network/interface 里固定 IP 的配置,即使配置也不会生效,而是改成 netplan 方式

2.3 ubuntu 网络配置

2.3.1 网络配置信息
2.3.1.1 NAT 模式网络适配器

在 Ubuntu 系统中,我们打开【设置】→【Network】便会看到如下信息:

image-20251023224707215

我们会看到这里有两个网络名称,其中第一个 ens33 是已经自动分配的有 IP 地址的,这个其实就是我们使用 NAT 模式用于上网的网络适配器。此时这个 NAT 模式的网络适配器和 VMnet8 应当是在同一网段的( 192.168.15.X ),如果不是在同一网段,可能是之前用户有设置过 Ubuntu 的 IP ,这里我们可以在这个网络的选项中将它设置为自动模式即可。我们点开看一下:

image-20251023224845887

由于这个网络适配器的存在,我们的 Ubuntu 就可以上网,并且和 Windows 互通,我们在 ubuntu 中输入以下命令:

shell
sumu@sumu-vm:~$ ping www.baidu.com    # ping 外网
PING www.a.shifen.com (223.109.82.212) 56(84) bytes of data.
64 字节,来自 223.109.82.212 (223.109.82.212): icmp_seq=1 ttl=128 时间=19.5 毫秒
64 字节,来自 223.109.82.212 (223.109.82.212): icmp_seq=2 ttl=128 时间=15.3 毫秒
64 字节,来自 223.109.82.212 (223.109.82.212): icmp_seq=3 ttl=128 时间=15.4 毫秒
^C
--- www.a.shifen.com ping 统计 ---
已发送 3 个包, 已接收 3 个包, 0% 包丢失, 耗时 2004 毫秒
rtt min/avg/max/mdev = 15.312/16.751/19.535/1.968 ms

sumu@sumu-vm:~$ ping 192.168.10.104 # ping windows 可以上网的的无线网的 ip
PING 192.168.10.104 (192.168.10.104) 56(84) bytes of data.
64 字节,来自 192.168.10.104: icmp_seq=1 ttl=128 时间=0.729 毫秒
64 字节,来自 192.168.10.104: icmp_seq=2 ttl=128 时间=0.795 毫秒
^C
--- 192.168.10.104 ping 统计 ---
已发送 2 个包, 已接收 2 个包, 0% 包丢失, 耗时 1015 毫秒
rtt min/avg/max/mdev = 0.729/0.762/0.795/0.033 ms

需要注意的是,这里默认使用的是 ens33。

2.3.1.2 桥接模式网络适配器

上边看完 NAT 模式的网络适配器,下边还有一个,这个当然就是我们设置为桥接模式的网络适配器啦,我们后边 再进行配置。

image-20251023225114743

这个网络是什么都没有的,这就是我们需要配置的用于桥接网络的网络适配器 2 了,默认好像是关闭的(具体忘记了,因为写这篇笔记的时候我是删了用于桥接的网络,重新配置的,印象中默认是关闭的,不过问题不大,最后还是要打开的)。

2.3.1.3 打印网络配置信息

我们可以通过以下命令来打印一下 Ubuntu 中的网络配置信息:

shell
ifconfig

然后我们会看到如下信息输出:

shell
sumu@sumu-vm:~$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.15.128  netmask 255.255.255.0  broadcast 192.168.15.255
        inet6 fe80::20c:29ff:feef:13c1  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:ef:13:c1  txqueuelen 1000  (以太网)
        RX packets 377  bytes 45160 (45.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 234  bytes 23524 (23.5 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 00:0c:29:ef:13:cb  txqueuelen 1000  (以太网)
        RX packets 120  bytes 25583 (25.5 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 181  bytes 31281 (31.2 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (本地环回)
        RX packets 364  bytes 39235 (39.2 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 364  bytes 39235 (39.2 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
2.3.2 配置桥接网络适配器
2.3.2.1 配置步骤

下边我们就来配置一下这个用于桥接的网络适配器,也就是上边的 ens37:

image-20251023225829552

修改完毕后点击右上角的应用即可,这个时候可能 IP 还未配置成功,我们需要重新启动一些这个适配器。

image-20251023225241450

哎,不知道为啥好像又踩坑了,这里我配置后重启 ubuntu 就会失效,但是之前不会的,可能是我前面做的一些操作导致的,不过我们可以直接在 netplan 的配置文件 /etc/netplan/01-network-manager-all.yaml 中修改:

yaml
# Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: NetworkManager
  ethernets:
    ens33:
      dhcp4: true
    ens37:
      dhcp4: no
      addresses:
        - 192.168.10.101/24  # 静态IP地址和子网掩码
      routes:
        - to: default
          via: 192.168.10.1  # 网关地址

然后执行:

bash
sudo netplan apply
sudo systemctl restart systemd-networkd
2.3.2.2 结果测试

我们来试一下:

shell
sumu@sumu-vm:~$ ping www.baidu.com -I ens37  # ping 外网
PING www.a.shifen.com (223.109.82.212) from 192.168.10.101 ens37: 56(84) bytes of data.
来自 sumu-vm (192.168.10.101) icmp_seq=1 目标主机不可达
来自 sumu-vm (192.168.10.101) icmp_seq=2 目标主机不可达
^C
--- www.a.shifen.com ping 统计 ---
已发送 6 个包, 已接收 0 个包, +3 错误, 100% 包丢失, 耗时 5110 毫秒
 管道 3

sumu@sumu-vm:~$ ping 192.168.10.104 -I ens37 # ping Windows(可以上网的那个 ip)
PING 192.168.10.104 (192.168.10.104) from 192.168.10.101 ens37: 56(84) bytes of data.
来自 192.168.10.101 icmp_seq=1 目标主机不可达
来自 192.168.10.101 icmp_seq=2 目标主机不可达
^C
--- 192.168.10.104 ping 统计 ---
已发送 18 个包, 已接收 0 个包, +16 错误, 100% 包丢失, 耗时 17368 毫秒
 管道 4

sumu@sumu-vm:~$ ping 192.168.10.100 -I ens37 # ping Windows(连接了开发板的那个以太网适配器的 ip)
PING 192.168.10.100 (192.168.10.100) from 192.168.10.101 ens37: 56(84) bytes of data.
64 字节,来自 192.168.10.100: icmp_seq=1 ttl=128 时间=1.04 毫秒
64 字节,来自 192.168.10.100: icmp_seq=2 ttl=128 时间=0.576 毫秒
^C
--- 192.168.10.100 ping 统计 ---
已发送 2 个包, 已接收 2 个包, 0% 包丢失, 耗时 1002 毫秒
rtt min/avg/max/mdev = 0.576/0.806/1.036/0.230 ms

可以看到这个适配器是只能 ping 通桥接到的那个网卡的。

2.3.3 网络适配器优先级

上边我们设置好之后,会有一个问题就是,我们平时使用的时候优先使用哪个网络适配器呢?要是我们想上网,但是它默认使用了桥接模式的网络适配器,那这个时候是无法联网的。我们可以参考这篇文章:虚拟机双网卡的一种处理方法-OpenEdv-开源电子网

image-20230717213312843

但是有一个问题,那就是这里勾选后,无法应用,暂时不知道原因。但是可以在设置 ip 这里把网关和 dns 去掉,然后就可以成功应用了。

2.4 ubuntu IP

shell
sumu@sumu-vm:~$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.15.128  netmask 255.255.255.0  broadcast 192.168.15.255
        inet6 fe80::20c:29ff:feef:13c1  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:ef:13:c1  txqueuelen 1000  (以太网)
        RX packets 446  bytes 55458 (55.4 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 327  bytes 36153 (36.1 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.101  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::20c:29ff:feef:13cb  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:ef:13:cb  txqueuelen 1000  (以太网)
        RX packets 176  bytes 32116 (32.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 226  bytes 33521 (33.5 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (本地环回)
        RX packets 444  bytes 46295 (46.2 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 444  bytes 46295 (46.2 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

3. linux 开发板配置

这里用的是正点原子 ALPHA 开发板出厂的 linux 系统。

3.1 MobaXterm 连接开发板

这个前边应该已经很熟练了。

3.2 设置开发板 IP

我们的开发板启动后,我们可以通过以下命令来设置临时开发板的 IP 信息:

shell
ifconfig eth0 up
ifconfig eth0 192.168.10.103

【注意】这里的 IP 要跟 Windows 和 Ubuntu 在同一网段,即 192.168.10.X ,但是不能和他们重复。

然后我们输入 ifconfig 命令查看是否配置成功:

shell
ifconfig

若设置成功吗,我们会看到如下信息:

image-20230717213629661

可以看到 IP 地址已经设置为 192.168.10.103 了

3.3 互 ping 测试

3.3.1 linux 开发板与 windows
shell
开发板   IP:192.168.10.103
windows IP:192.168.10.100
  • 开发板→ windows

我们在串口终端输入以下命令:

shell
ping 192.168.10.100

看到如下信息,则是可以 ping 通:

image-20230717214627540
  • windows→ 开发板

我们在 windows 的命令行执行以下命令:

shell
ping 192.168.10.103

看到如下信息则表示可以 ping 通:

image-20230717214820330
3.3.2 linux 开发板与 ubuntu
shell
开发板  IP:192.168.10.103
ubuntu IP:192.168.10.101
  • 开发板→ ubuntu

我们在串口终端输入以下命令:

shell
ping 192.168.10.101

看到如下信息,则是可以 ping 通:

image-20230717215017684
  • ubuntu→ 开发板

我们在 ubuntu 的终端执行以下命令:

shell
ping 192.168.10.103

看到如下信息则表示可以 ping 通:

image-20251023231806130
3.3.3 问题处理

有的时候可能会因为我们插错了网口导致无法 ping 通,重新插回对的网口似乎也不行,又或者是突然开发板就无法与 windows 通信了,这个时候可以尝试重启 windows 下的以太网适配器,可以先禁用再重启。

image-20230718225201521

断开和重启的话,这个时候开发板可能会有如下打印信息:

image-20230718224810377

3.4 开发板设置静态 IP

上边的设置完成后会有一个问题,就是当我们复位开发板后, IP 又变回以前的设置了,这是由于 LAN 8720 PHY 网络芯片没有 MAC 地址,系统启动时会生成随机 MAC 地址给网络使用。每次都生成一个 MAC 地址,导致每次开机网络获取的 ip 不是固定的。 所以我们要设置给它一个静态的 ip,不因 MAC 地址的改变而改变,设置固定 ip 方法调试。

那我们如何让它不再发生变化,设置成静态的 IP 呢?

3.4.1 准备工作

如果开发板文件系统 /etc/init.d/ 下有 connman 文件,执行以下指令将 connman 命名为 connman2 :

shell
mv /etc/init.d/connman /etc/init.d/connman2

这样做是为了让系统找不到 connman 文件,就会关闭 connmand 网络连接守护进程,如果不关闭的话,在后面的设置完成后会有两个 IP 地址。如果文件系统下没有这个文件,就可以没有这一步了。然后就可以开始设置开发板的静态 IP 了,可以有两种方式,一种是自启动执行命令,另一种是修改配置文件。

3.4.2 自启动执行命令方式
3.4.2.1 方式一:修改 rcS 文件

在 MobaXterm 连接好开发板后,执行以下命令:

shell
echo "ifconfig eth0 192.168.10.103 netmask 255.255.255.0" | tee -a /etc/init.d/rcS
echo "route add default gw 192.168.10.1" | tee -a /etc/init.d/rcS

以上命令中

  • | 是管道,管道经常用于拼接命令;
  • tee 这个工具的作用就是把标准输出复制一份后放到对应的文件里;
  • -a 其实也就是 >> 即 shell 脚本中的重定向,表示追加的意思,追加就是在文件的后面写上要添加的指令,而不是覆盖源文件, >> 和 > 不同的是, > 是覆盖源文件(不能执行 > ,要不然原来的配置会被覆盖了)。

上边的命令也可以这样写:

shell
echo "ifconfig eth0 192.168.10.103 netmask 255.255.255.0" | tee >> /etc/init.d/rcS 
echo "route add default gw 192.168.10.1" | tee >> /etc/init.d/rcS

执行完以上命令后,以下命令:

shell
cat -n /etc/init.d/rcS

可以发现 /etc/init.d/rcS 文件最后两行会添加了以上两条命令,那么在开发板开机启动后,这两条命令便会执行。然后我们重启开发板,执行 ifconfig 指令或者 ip -a 查看 IP 地址,会发现与重启之前 IP 是一致的。这种设置的好处在于操作简单,一次修改成功,下次再重启开发板 IP 地址不会变化,即永久生效。

image-20230717215424090

需要注意的是,这里我后来再搞的时候在这个位置写会不生效,暂时也不知道原因,但是如下图这样写就正常了:

image-20240426074115263
shell
ifconfig eth0 192.168.10.103 netmask 255.255.255.0
route add default gw 192.168.10.1

我猜测可能是写在最后的话,没有执行。

3.4.2.2 方式二:修改 rc.local

我们在出厂系统重打开或者创建 /etc/rc.local 文件:

shell
vi /etc/rc.local

在文件的末尾添加如下内容:

shell
PATH=/sbin:/bin:/usr/sbin:/usr/bin
ifconfig eth0 192.168.10.103 netmask 255.255.255.0
route add default gw 192.168.10.1

如下图所示:

image-20240426074345579
3.4.3 修改配置文件方式

另一种方式就是修改配置文件,一般情况下配置文件路径为:

shell
/etc/network/interfaces

需要注意的是,这个配置文件在有的文件系统中有,有的文件系统下没有,没有的话,这种可能方法就不适合了,反正也是一种方式,写在这里做参考。我们使用 vi 打开这个配置文件:

shell
vi /etc/network/interfaces

原来的配置文件内容如下:

shell
# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)

# The loopback interface
auto lo
iface lo inet loopback

# Wireless interfaces
iface wlan0 inet dhcp
        wireless_mode managed
        wireless_essid any
        wpa-driver wext
        wpa-conf /etc/wpa_supplicant.conf

iface atml0 inet dhcp

# Wired or wireless interfaces
auto eth0
iface eth0 inet dhcp
iface eth1 inet dhcp

# Ethernet/RNDIS gadget (g_ether)
# ... or on host side, usbnet and random hwaddr
iface usb0 inet static
        address 192.168.7.2
        netmask 255.255.255.0
        network 192.168.7.0
        gateway 192.168.7.1

# Bluetooth networking
iface bnep0 inet dhcp

我们修改 Wired or wireless interfaces 部分为以下内容

shell
# Wired or wireless interfaces
auto eth0
# iface eth0 inet dhcp
iface eth0 inet static
address 192.168.10.103
gateway 192.168.10.1 
netmask 255.255.255.0

iface eth1 inet dhcp

就是这样:

image-20220719073057553

修改完执行以下命令:

shell
/etc/init.d/networking restart # 重启网络配置

这种修改方法是修改完配置文件,然后重启网络配置后就永久生效。

3.4.4 设置临时静态 IP

我们在开发板文件系统中执行以下命令:

shell
ifconfig eth0 192.168.10.103 netmask 255.255.255.0 
route add default gw 192.168.10.1

这种设置的好处在于,执行完指令不需重启开发板就生效,但是关机后下次再开机就会恢复原来的配置,即临时有效。

4. uboot 配置

我们要是配置好 uboot 的网络信息,也是可以和 windows、ubuntu ping 通的。我们可以复位开发板,进入 uboot:

image-20240917092842253

然后执行以下命令:

shell
setenv ipaddr 192.168.10.103        # 开发板的 IP
setenv ethaddr 00:04:9f:04:d2:35    # 开发板的网卡物理地址,好像随便写一个就行
setenv gatewayip 192.168.10.1       # 开发板的网关
setenv netmask 255.255.255.0        # 子网掩码
setenv serverip 192.168.10.101      # ubuntu 作为服务器,这里是 ubuntu 的 IP
saveenv                             # 保存环境变量,这样下次启动也不会恢复原样

如下图所示:

image-20240917093004239

然后可以跟上面一样测试即可。

5. 小结

  • 防火墙设置:关闭电脑和虚拟机的防火墙(这一步看情况而定,有些可能根本不需要,有些可以通过修改策略进行)。

  • 网络连接:电脑使用无线上网,开发板网口直连电脑网口。

  • Windows 设置:手动设置以太网 TCP/IPv4 属性中的 IP 信息。

  • VMwear 设置:设置网络适配器为桥接模式;添加一个网络适配器 2 为 NAT 模式。

  • Ubuntu 设置:设置 NAT 模式的网络适配器为自动获取模式(DHCP);手动设置桥接模式 的网络适配器的 IP 信息。

  • 开发板设置:手动设置开发板的 IP 信息。

注意:

(1)Ubuntu 里桥接模式的网络适配器、电脑的以太网、开发板的网口,三者要在同一网段,且不能与 NAT 模式的网络适配器、虚拟机子网在同一网段。Windows 和 Ubuntu 通过 NAT 模式的网络适配器通信。

(2)其实上边我配置的 IP 都和 windows 的无线局域网适配器 WLAN 在同一个网段了,这样看起来也没啥问题,但是要是想配置到别的网段可以嘛?当然也可以,只需要保证开发板、windows 的以太网适配器 以太网 x 和 ubuntu 桥接模式的网路适配器这三者的 IP 在同一网段,例如(我当时测试的时候是没什么问题):

windows:

shell
IPv4 地址 . . . . . . . . . . . . : 192.168.5.10
子网掩码  . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.5.1

ubuntu:

shell
inet    192.168.5.11
netmask 255.255.255.0
gw      192.168.5.1

开发板:

shell
inet    192.168.5.12
netmask 255.255.255.0
gw      192.168.5.1

三、其他网络拓扑结构

这部分我就没有做实验了,直接搬用文档,放在这里容易查看。

1. 电脑和开发板直连同个路由器

1.1 准备工作

使用场景:电脑和路由器/交换机比较近,有两条网线。这种容易搭建。

设备:电脑(Windows)、正点原子 Linux 开发板(出厂系统) 、路由器、直通网线(2 条) 。网络拓扑结构: 电脑网口通过直通网线连接到路由器/交换机的 LAN 口,开发板网口通过直通网线连接到路由器/交换机的 LAN 口,路由器/交换机的 LAN 口接到外部宽带,从而实现上网。

image-20240828070429692

1.2 VMware 设置

Ubuntu 设置:打开 VMware Workstation Pro 的 虚拟机 → 设置 :

image-20240828070510372

在虚拟机设置中,将 网络适配器 修改为 桥接模式 ,点击确定。

image-20240828070527686

1.3 Ubuntu 设置

打开 Ubuntu16 系统, 点击任务栏的设置 → 网络。

image-20240828070604492

在 Ubuntu 的网络设置这里可以看到 Ubuntu 系统的 IP 和网关、 DNS 等信息。 如果没有的话就打开右下角的 选项 按键。

image-20240828070630227

打开 选项 按键后,就打开了编译网络设置的界面,在这里可以选择 IPv4 设置,选择使用自动(DHCP)的方式来获取路由器分配的 IP,设置完成点击右下角的保存。

image-20240828070652598

设置完成后,并不会更新网络信息,会返回到刚刚的 网络 界面,点击下图中的开关按键,关闭网络后重新打开,就会更新网络信息。如果不进行此操作就不会更新设置。

image-20240828070716645

1.4 Windows 设置

查看 Windows 主机的 IP:在 Windows 端按下 win + R 快捷键打开运行栏,输入 cmd 指令后按下回车。

image-20240828071548778

在打开的终端中输入 ipconfig 指令,查看电脑的 IP。

shell
ipconfig
image-20240828071611285

1.5 开发板设置

开发板设置:直通网线的一端接正点原子 Linux 开发板的网口,如果是阿尔法开发板就接 ENET2,另一端接路由器的 LAN 网口。 在串口终端输入 ifconfig 指令来查询开发板是否获取到路由器分配到的 IP。

shell
ifconfig
image-20240828071652401

1.6 ping 测试

在 ping 测试之前要关闭 Windows 和 Ubuntu 的防火墙。 综合前面的设置,这里的 IP 如下。

shell
Windows 主机 IP 192.168.3.6
Ubuntu 虚拟机 IP: 192.168.3.7
开发板 IP 192.168.3.9

接下来可以测试开发板和 Ubuntu、 Windows 互 ping。

  • 开发板 ping 虚拟机 Ubuntu 的 IP
shell
ping 192.168.3.7
image-20240828071824556
  • Ubuntu 虚拟机 ping 开发板 IP
shell
ping 192.168.3.9
image-20240828071911422
  • Ubuntu 虚拟机 ping 外网。
shell
ping www.baidu.com
image-20240828071948345
  • 开发板 ping 外网。
shell
ping www.baidu.com
image-20240828072053284
  • Windows 主机 ping 虚拟机 Ubuntu。
shell
ping 192.168.3.7
image-20240828072145728
  • 在 Ubuntu 终端执行以下指令 ping 主机 Windows 的 IP。
shell
ping 192.168.3.6
image-20240828072223732

1.7 小结

防火墙设置:关闭电脑和虚拟机的防火墙。

网络连接:开发板网口和电脑网口都通过网线直接连到同个路由器。

VMware 设置:设置网络适配器桥接模式,虚拟网络编辑器还原默认设置。

Ubuntu 设置:设置网络连接模式为自动(DHCP)。

Windows 设置:设置以太网 TCP/IPv4 属性为自动获取 IP 地址。

开发板设置:出厂系统默认会自动获取 IP,没有这个功能的话可以执行以下指令获取 IP。

shell
ifconfig eth0 up
udhcpc -i eth0

以上就是开发板、 Ubuntu 和 Windows 三者互 ping 测试,在开发板 uboot 命令行设置完开发板 IP 相关的信息后,也能 ping 虚拟机 Ubuntu。

shell
setenv ipaddr 192.168.3.9
setenv ethaddr 00:04:9f:04:d2:35
setenv gatewayip 192.168.3.1
setenv netmask 255.255.255.0
setenv serverip 192.168.3.7
saveenv
ping 192.168.3.7
image-20240828072502998

uboot 阶段时, Ubuntu 虚拟机 ping 开发板是没有反馈的。

2. 电脑和开发板直连同个交换机

2.1 准备工作

使用场景:宽带可以直连交换机,有两条网线,没有路由器,没有 WiFi 或者无线网卡。

设备:电脑(Windows)、正点原子 Linux 开发板(出厂系统)、交换机、直通网线(2 条)。网络拓扑结构:

image-20240828073323651

直连路由器和直连交换机的效果是差不多的,只不过路由器会一个单独的网段,而交换机的网段和宽带分配的网段是一样的。 也就是一个是以路由器为中心的局域网,一个是以宽带为中心的局域网。

2.2 VMware 设置

打开 VMware Workstation Pro 的 虚拟机→ 设置

image-20240828073414246

在虚拟机设置中,将 网络适配器 修改为 桥接模式 ,点击确定。

image-20240828073438474

2.3 Ubuntu 设置

打开 Ubuntu16 系统,点击任务栏的设置 → 网络。

image-20240828073536774

在 Ubuntu 的网络设置这里可以看到 Ubuntu 系统的 IP 和网关、 DNS 等信息。如果没有的话就打开右下角的 选项 按键。

image-20240828073618438

打开 选项 按键后,就打开了编译网络设置的界面,在这里可以选择 IPv4 设置,选择使用自动(DHCP)的方式来获取路由器分配的 IP,设置完成点击右下角的保存。

image-20240828073633430

设置完成后,并不会更新网络信息,会返回到刚刚的 网络 界面,点击下图中的开关按键,关闭网络后重新打开,就会更新网络信息。如果不进行此操作就不会更新设置。

image-20240828073653258

2.4 Windows 设置

查看 Windows 主机的 IP:在 Windows 端按下 win + R 快捷键打开运行栏,输入 cmd 指令后按下回车。

image-20240828073726227

在打开的终端中输入 ipconfig 指令,查看电脑的 IP。

shell
ipconfig
image-20240828073749805

2.5 开发板设置

开发板设置:直通网线的一端接正点原子 Linux 开发板的网口,如果是阿尔法开发板就接 ENET2,另一端接电脑的以太网网口。在串口终端输入 ifconfig 指令来查询开发板是否获取到路由器分配到的 IP。

shell
ifconfig
image-20240828073835700

2.6 ping 测试

在 ping 测试之前,要关闭 Windows 和 Ubuntu 的防火墙。这里的 IP 如下。

shell
Windows 主机 IP 192.168.1.158
Ubuntu 虚拟机 IP: 192.168.1.194
开发板 IP 192.168.1.192

这里和上面都是一样的,这里就不重复写了。

2.7 小结

防火墙设置:关闭电脑和虚拟机的防火墙。

网络连接:开发板网口和电脑网口都通过网线直接连到同个路由器。

VMware 设置:设置网络适配器桥接模式,虚拟网络编辑器还原默认设置。

Ubuntu 设置:设置网络连接模式为自动(DHCP)。

Windows 设置:设置以太网 TCP/IPv4 属性为自动获取 IP 地址。

开发板设置:出厂系统默认会自动获取 IP,没有这个功能的话可以执行以下指令获取 IP。

shell
ifconfig eth0 up
udhcpc -i eth0