环境
系统:win11
wsl2:Ubuntu 24.04.3 LTS
网络拓扑分析 :
第一步搞清楚物理连接 在开始配置之前,我们先搞清楚网络是怎么连的。这听起来简单,但很多人第一步就搞错。
Windows 网卡情况 打开 Windows 的 PowerShell,运行 ipconfig:
这里有两条关键信息:

网桥:IP 是 192.168.60.1,这是开发板实际连接的网卡
若以太网 2:媒体状态是"已断开",说明没插网
网桥设置步骤:
控制面板打开网络连接,点以太网 的属性进行ipv4修改(TCP/IPv4),因为是网线直连,网段可以随意设置,在uboot需setenv对应
这里的以太网2就是要配置的端口,右键以太网2,双击ipv4设置静态ip
**
开发板网络配置
在 U-Boot 命令行中,先 ping 一下网关:


如果看到 is alive,说明物理链路是通的。如果超时,检查:
- 网线是否插好
- 开发板和 Windows 是否在同一网段
- Windows 防火墙是否允许
ping(ICMP)
WSL2 网络模式:NAT vs Mirrored
WSL2 有两种网络模式:NAT(默认)和 Mirrored。理解它们的区别是关键。
NAT 模式的问题
WSL2 默认是 NAT 模式,它的网络结构是这样的:
bash
开发板 (192.168.60.x)
↓
Windows 网桥 (192.168.60.1)
↓
Windows NAT (虚拟交换机)
↓
WSL2 (172.x.x.x)
在 NAT 模式下,WSL2 处于一个独立的虚拟网段(通常是 172.x.x.x),和开发板的 192.168.60.0/24 网段完全隔离。这就导致:
- 开发板无法直接访问 WSL2
- WSL2 的 TFTP 服务对开发板不可见
- 每次重启 WSL2,IP 可能会变化
Mirrored 模式的优势
Mirrored 模式让 WSL2 直接镜像 Windows 的所有网卡:
bash
开发板 (192.168.60.x)
↓
Windows 网桥 (192.168.60.1)
↓
WSL2 (能看到 192.168.60.1/24)
在 Mirrored 模式下,WSL2 可以直接访问 Windows 的每一块网卡,包括 192.168.60.1 这个网桥。
切换到 Mirrored 模式
在 Windows 用户目录下创建或编辑 .wslconfig 文件:
文件位置:C:\Users\<你的用户名>\.wslconfig 内容:
内容:
bash
# Settings apply across all Linux distros running on WSL 2
[wsl2]
networkingMode=mirrored # 开启镜像网络
dnsTunneling=true # 开启 DNS Tunneling
firewall=true # 开启 Windows 防火墙
autoProxy=true # 开启自动同步代理
[experimental]
hostAddressLoopback=true
保存后,重启 WSL
验证网络模式
重启 WSL 后,在 WSL 中运行:
bash
ip addr
能看到类似这样的网卡:
bash
7: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 8e:3d:ed:06:7d:af brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
9: eth4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether c8:17:f5:cf:88:d4 brd ff:ff:ff:ff:ff:ff
inet 192.168.60.1/24 brd 192.168.60.255 scope global noprefixroute eth4
valid_lft forever preferred_lft forever
inet6 fe80::ef5b:8623:c3e5:d66/64 scope link nodad noprefixroute
valid_lft forever preferred_lft forever
关键点是 inet 192.168.60.1/24,这说明 WSL2 现在能看到开发板所在的网段了。
经验 :
.wslconfig是全局配置,会影响到机器上所有 WSL2 发行版。但对于普通开发使用,这通常没有副作用,上网也不受影响。
TFTP 服务搭建
现在网络通了,我们来搭建 TFTP 服务。
安装 tftpd-hpa
bash
sudo apt update
sudo apt install tftpd-hpa
配置 TFTP
编辑配置文件:
bash
sudo nano /etc/default/tftpd-hpa
修改为:
bash
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/itcai/tftp"
TFTP_ADDRESS="192.168.60.1:69"
TFTP_OPTIONS="--secure"
配置说明:
TFTP_USERNAME:运行 TFTP 服务的用户TFTP_DIRECTORY:TFTP 根目录,存放可传输的文件TFTP_ADDRESS:监听地址,必须绑定到 192.168.60.1(开发板能访问的地址)TFTP_OPTIONS:
--secure:安全模式,限制访问范围在TFTP_DIRECTORY内
可选:--create:允许上传文件(如果需要)
准备 TFTP 目录
bash
# 创建目录
mkdir ~/tftp
# 设置权限
sudo chmod 777 ~/tftp
sudo chmod o+x /home/itcai
创建测试文件
bash
echo "Hello from TFTP!" > ~/tftp/test.txt
sudo chmod 777 ~/tftp/test.txt
**踩坑提醒:**文件本身也要有读权限!很多人改了目录权限忘记改文件权限,导致 TFTP 传输 Abort。
启动 TFTP 服务
bash
sudo service tftpd-hpa start
或
bash
sudo systemctl restart tftpd-hpa
验证 TFTP 服务
首先确认服务在监听正确的端口:
bash
sudo ss -ulnp | grep 69
输出类似:
bash
UNCONN 0 0 192.168.60.1:69 0.0.0.0:* users:(("in.tftpd",pid=xxxx,fd=...))
关键是 192.168.60.1:69,说明服务绑定到了正确的网卡。
然后在 WSL 内部测试一下:
bash
# 安装 tftp 客户端(如果没安装)
sudo apt install tftp-hpa
# 测试
echo "get test.txt" | tftp 192.168.60.1
cat test.txt
如果能看到 "Hello from TFTP!",说明 TFTP 服务本身没问题。
Windows 防火墙配置(最隐蔽的坑!)
好,TFTP 服务在 WSL 里测试通过了。现在在开发板 U-Boot 里测试:
bash
=> tftp 0x80800000 test.txt
Using ethernet@20b4000 device
TFTP from server 192.168.60.1; our IP address is 192.168.60.200
Filename 'test.txt'.
Load address: 0x80800000
Loading: T T T T T T T T T T
Retry count exceeded; starting again
添加防火墙规则
以管理员身份打开 PowerShell,运行:
bash
New-NetFirewallRule -DisplayName "WSL TFTP" `
-Direction Inbound `
-Protocol UDP `
-LocalPort 69 `
-Action Allow
参数说明:
• -DisplayName:规则名称,方便识别
• -Direction Inbound:入站规则(允许外部访问内部)
• -Protocol UDP:TFTP 使用 UDP 协议
• -LocalPort 69:TFTP 端口
• -Action Allow:允许通过
验证防火墙规则
bash
Get-NetFirewallRule -DisplayName "WSL TFTP" | Format-List
或者查看防火墙日志(如果启用了日志):
bash
Get-NetFirewallRule -DisplayName "WSL TFTP" | Get-NetFirewallPortFilter
再次测试
现在回到 U-Boot,再试一次:
bash
=> tftp 0x80800000 test.txt
Using ethernet@20b4000 device
TFTP from server 192.168.60.1; our IP address is 192.168.60.200
Filename 'test.txt'.
Load address: 0x80800000
Loading: #
1.5 KiB/s
Bytes transferred = 6 (6 hex)
U-Boot 网络配置
现在 TFTP 通了,我们来完整配置 U-Boot 的网络参数。
配置网络参数
在 U-Boot 命令行中:
bash
setenv ipaddr 192.168.60.200
setenv ethaddr 00:04:9f:04:d2:35
setenv netmask 255.255.255.0
setenv gatewayip 192.168.60.1
setenv serverip 192.168.60.1
saveenv
参数说明:
• ipaddr:开发板的 IP 地址
• netmask:子网掩码
• gatewayip:网关地址(通常和 serverip 相同)
• serverip:TFTP 服务器地址(即 WSL/Windows 的 IP)
bash
printenv serverip
验证网络连接
bash
=> ping 192.168.60.1
Using ethernet@20b4000 device
host 192.168.60.1 is alive
如果 ping 不通,检查:
- 网线是否连接
- IP 地址是否在同一网段
- Windows 防火墙是否允许 ICMP(ping)
若还是不行,手动关闭电脑的专用网络和公用网络

开发板设置
接下来设置下开发板的 IP。
这里我们将开发板 IP 设置为 192.168.10.50,和WSL2在同一网段即可。进入开发板文件系统,设置开发板 IP。
bash
ifconfig eth0 up
ifconfig eth0 192.168.60.200
ifconfig
永久配置ip方式:
bash
vi /etc/rc.local
加入下面这三行
bash
ifconfig eth0 up
ifconfig eth0 192.168.60.200 netmask 255.255.255.0
route add default gw 192.168.60.1 eth0
正点原子阿尔法板子改完,配置文件如下:
bash
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# 开机自动配置 eth0 静态IP(我加的)
ifconfig eth0 up
ifconfig eth0 192.168.60.200 netmask 255.255.255.0
route add default gw 192.168.60.1 eth0
echo 30000 > /proc/sys/vm/min_free_kbytes
source /etc/profile
# 旧版叫QDesktop,新版UI叫systemui
/opt/ui/systemui >/dev/null 2>&1 &
exit 0
改完重启生效:
bash
reboot

ping 测试
开发板ping WSL2
bash
ping 192.168.60.1

WSL2 ping开发板
bash
ping 192.168.60.200

Windows ping 开发板
bash
ping 192.168.60.200

WSL2 ping Windows
bash
ping 192.168.64.1

Windows ping WSL2
bash
ping 192.168.60.1

若上述测试均成功,则网络设置完毕!