☰
树莓派5双2.5G网卡:PCIe Switch扩展与RTL8125驱动实践
2026/9/27 20:36:50 网站建设 项目流程

如果你手头有一块树莓派5,大概率第一件事就是给它塞一块NVMe硬盘,把原本SD卡带来的卡顿彻底解决。但树莓派5真正让我觉得“有意思”的地方,是那条PCIe 2.0 x1通道不仅能接SSD,还能拿来扩展高速网络。这篇文章要聊的就是我最近折腾的一套方案:用PCIe Switch把树莓派5唯一的PCIe通道扩展成两路,再接两块RTL8125芯片的2.5G网卡,最终做出一个双2.5G以太网口的ARM小主机。

这套方案适合三类人:一是想用树莓派5当软路由,需要WAN和LAN两个高速网口的朋友;二是手里正好有M.2 2.5G网卡,但不想用USB转接、不想忍受USB方案不稳定的朋友;三是纯粹喜欢挖PCIe生态玩法的折腾党。标题里的“双2.5G”不是噱头,真要做成需要吃透PCIe带宽、Switch芯片选型、RTL8125驱动编译这一连串问题,下面我把自己踩过的坑和关键步骤完整写下来。

1. 树莓派5的PCIe资源到底够不够用

1.1 树莓派5的PCIe接口规格与带宽事实

树莓派5和树莓派4最大的区别之一,就是从BCM2712 SoC里单独引出了一条PCIe 2.0 x1通道,而不是像树莓派4那样所有高速外设都挤在USB上。官方为了控制功耗和引脚数量,只给了x1 lane,所以很多人第一反应是:“才一条x1,能干什么?”

这就要先算清楚一条PCIe 2.0 x1到底有多少带宽。PCIe 2.0的单lane原始速率是5GT/s,但因为用了8b/10b编码,每传输8位有效数据就要附带2位校验信息,所以有效数据速率是5Gbps × 0.8 = 4Gbps,换算成字节就是500MB/s。很多朋友以为PCIe 2.0 x1是5Gbps,这个误差非常关键,后面计算双2.5G网卡是否够用,完全依赖这个数字。

如果是PCIe 3.0 x1,原始速率8GT/s,编码方式是128b/130b,有效载荷约7.88Gbps、也就是985MB/s,几乎是2.0的两倍。这也是为什么后面我会专门开一节讲“要不要硬上PCIe Gen3”,因为对双2.5G来说,Gen2和Gen3的体验差距是实实在在的。

1.2 双2.5G网卡需要多少带宽,请认真做这道数学题

一个2.5G网口,线速是2.5Gbps。单个口跑单向流量时,2.5Gbps的需求小于PCIe 2.0 x1的4Gbps有效带宽,所以能跑满,这也是很多人测单口2.5G网卡可以跑出2.3~2.4Gbps的原因。

但双口同时跑单向流量,比如两个网口分别从两台设备接收数据到树莓派,总需求就是 2.5Gbps + 2.5Gbps = 5Gbps。而PCIe 2.0 x1上行到SoC的有效带宽只有4Gbps,瓶颈立刻出现。实测结果通常就是两个口加在一起稳定在4Gbps上下,每个口只能分到2Gbps左右,距离各自的2.5Gbps上限都差一截。

如果再把全双工算进去,情况更夸张。两个2.5G口同时满双工收发,理论上需要双向各5Gbps,而PCIe 2.0 x1上行和下行各有4Gbps有效带宽,所以即使双向分开算,也还是不够。换句话说,在默认Gen2模式下,双2.5G网卡不是不能跑,而是别指望两个口同时跑满。这个结论不是坏事,因为大多数家用场景里,真正需要的往往是“一个口进、一个口出”的路由器模式,每个口各2.5Gbps,加起来上行和下行各2.5Gbps,完全不撞车。这一点放到第四章实测里再验证。

1.3 为什么必须引入PCIe Switch

树莓派5的硬件设计里,SoC只暴露了一个PCIe根端口,物理上只能接一个PCIe端点设备。你想接两块网卡,可插槽只有一个,怎么办?两条路:要么用USB转2.5G网卡凑合,要么用PCIe Switch把一条上游通道拆成多条下游通道。

PCIe Switch在电路板上扮演的角色很像一个PCIe“分线器”,但它不是简单并联,内部是基于数据包的路由和转发。上游口连接树莓派SoC,下游口可以接出多个PCIe端点设备,比如两块RTL8125网卡、一块NVMe SSD,甚至再接一个扩展卡。Switch本身不增加带宽,它只是让多个设备可以共享上游那4Gbps的有效带宽。这个认知很重要,不要指望加了Switch速度会变快,它解决的是“物理上只有一个口,但我想插多个设备”的问题。

市面上常见的PCIe Switch芯片有ASMedia的ASM1182e、ASM1184e,以及Diodes(原Pericom)的PI7C9X2G304GP等。ASM1182e是1进2出,ASM1184e是1进4出,PI7C9X2G304GP是3端口(1进2出)。做双2.5G网卡,1进2出刚好够用;如果想同时接NVMe和网卡,建议直接选1进4出,留足余量。

2. 硬件方案设计与选型

2.1 完整物料清单

在做这套方案之前,先把要用的东西列全,免得装到一半发现缺排线、缺转接卡,那很影响心情。

物料规格建议备注
树莓派54GB起步,8GB更好跑路由/NAT/桥接时内存越大越从容
PCIe扩展板双RTL8125一体板或PCIe Switch HAT一体板省事,分体板可玩性高
RTL8125网卡板载或M.2 A+E Key网卡注意Key类型,避免插不上
FPC排线16pin、0.5mm间距方向要看清,很多板子会附赠
电源官方27W或做工好的5V/5A电源双网卡加Switch对供电有要求
散热散热片、小风扇、机箱风道RTL8125和Switch芯片都是发热点

如果你买的是“树莓派5双2.5G网口HAT”这类一体板,那绝大多数硬件问题已经被厂家解决,你只需要关注供电和散热。如果你打算走“PCIe Switch HAT + 两张独立RTL8125 M.2网卡”的分体路线,那就要多留一个心眼:接口Key和物理空间。

2.2 PCIe Switch芯片怎么选

选PCle Switch芯片,主要看三个指标:端口数、上游带宽和功耗。

端口数很好理解。只拆双网口,1分2就够了;想以后在同一个扩展板上再接NVMe,那就上1分4。我自己选的是ASM1184e方案的板子,因为当时想着万一哪天想给它加一块SSD,不用重新换板。

上游带宽方面,这几颗芯片基本都是PCIe 2.0时代的产品,上游接口也多为x1,和树莓派5原生Gen2 x1匹配。如果你买的HAT宣称支持PCIe Gen3,那意味着Switch芯片本身或PCB走线经过了更严格的选型,后面可以通过config.txt开启Gen3模式。但注意,这不是树莓派官方承诺的稳定能力,属于“能上就上、不能上别勉强”的玩法。

功耗方面,ASM1182e这类芯片典型功耗在0.5W到1W之间,比想象中低,但它散热量集中在一个小封装上,温度不低。我建议选板子时优先看带散热片覆盖的版本,至少也要留出贴散热片的位置。

2.3 RTL8125网卡两种形态与注意事项

RTL8125是瑞昱很成熟的2.5G Ethernet控制芯片,市面上大量2.5G网卡和主板集成网口都是它。在树莓派5扩展方案里,RTL8125常见的形态有两种。

第一种是板载方案,厂家直接把两颗RTL8125芯片焊在HAT上,同时把PCIe Switch也集成进去,对外提供两个RJ45网口。这种一体板对动手能力要求最低,买回来插上排线就能用,基本不会出现PCIe Switch枚举问题,因为厂家已经把固件、配置和电源都调好了。

第二种是分体方案,你买一个PCIe Switch HAT,上面有两个M.2插槽,然后再买两张采用M.2 A+E Key封装、内置RTL8125BG芯片的2.5G网卡插上去。这种方案的灵活度高,以后网卡坏了可以单独换,但坑也多。最大的坑是Key不匹配:树莓派5的M.2 HAT多数是M Key插槽,主要给NVMe SSD用,而市售RTL8125网卡大多是A+E Key。要让它们兼容,你得额外买一块M Key转A+E Key的转接板,转接板本身又占空间又增加接触电阻,对散热和稳定性都不友好。所以我个人建议:如果只想要双2.5G网口,优先买一体板;如果想顺便做个M.2扩展坞一样的东西,再考虑分体方案。

另一个注意事项是驱动。RTL8125在内核里对应的驱动模块是r8125,不是r8169。有些新内核自带兼容驱动能识别它,但性能和稳定性不一定好,建议还是老老实实从瑞昱官网下载对应驱动源码编译安装。这部分放在第三章展开。

2.4 供电和散热细节

树莓派5官方电源是5V/5A、27W,本身给PCIe HAT留了余量,但双RTL8125加一颗PCIe Switch,整体功耗会比单NVMe HAT高出3~5W。如果你的电源有虚标,或者用第三方PD诱骗线,很容易在负载上去后出现电压跌落,表现为网卡随机断流或识别不到。我踩过一次这种坑,换回官方电源后问题消失。如果你还要外接USB硬盘或者风扇,建议想办法监控一下5V电压,至少准备一块支持USB电压电流检测的电源线。

散热更别忽视。RTL8125芯片满载时温度能到70度以上,PCle Switch芯片同样不凉快。在开放环境中还行,一旦装进塑料外壳或者NAS机箱,温度很容易冲破90度。我的做法是在两块网卡芯片上贴铜散热片,再用一颗5V小风扇对着扩展板区域吹,实测温度能压在60度上下。树莓派5本身的风扇只能照顾SoC,覆盖不到PCIe区域的发热。

3. 系统配置与驱动实战

3.1 系统准备与设备识别检查

先确保树莓派OS是最新状态,这个步骤不能省,因为树莓派5的PCIe支持和固件更新关系非常大。

sudo apt update sudo apt full-upgrade -y sudo rpi-eeprom-update -a sudo reboot

重启之后,把HAT的FPC排线接好,再检查系统是否识别到PCIe设备。用lspci确认,这是排查一切问题的第一步。

lspci -tv

正常状态下,你应该能看到PCI桥(PCIe Switch)以及两个Realtek设备。输出大致长这样:

-[0000:00]-+-00.0 ARM BCM2712 +-01.0 Bridge: ASMedia ASM1184e +-02.0 Realtek Semiconductor RTL8125 2.5GbE Controller +-03.0 Realtek Semiconductor RTL8125 2.5GbE Controller

如果只看到一个Realtek设备,大概率是PCIe Switch枚举或总线资源问题,先别急着装驱动,去第五章看排查方法。确认两个网卡都被识别后,用ip link看一下网络接口是否已经出现。默认命名可能是eth0、eth1,也可能是enx...这种基于MAC的命名。建议先把内核头文件装好,后面编译驱动要用。

sudo apt install raspberrypi-kernel-headers

头文件版本必须和当前内核一致,可以用uname -r确认。

3.2 RTL8125驱动编译与加载

如果系统没有自动加载r8125模块,或者网卡虽然识别但状态一直是“DOWN、no carrier”,多半要手动编译驱动。瑞昱官网上提供Linux版的r8125驱动源码,下载后解压到树莓派里。

wget https://www.realtek.com/Download/... # 以实际版本为例 tar -jxvf r8125-9.012.03.tar.bz2 cd r8125-9.012.03

编译安装有两种方式:走autorun脚本最省事,它会自动完成make、install和modprobe。

sudo ./autorun.sh

如果想手动控制,避免autorun反复报错,也可以用下面这套流程:

make clean make -j4 sudo make install sudo modprobe r8125 sudo dmesg | tail -20

看到类似r8125: probe success的日志就说明驱动加载成功。之后再用ethtool eth1查看网卡link状态,正常情况下Supported link modes里应该包含2500baseT。这里要提醒一句:每次树莓派OS内核升级后,第三方驱动模块可能会丢失,你需要重新编译安装。如果怕麻烦,可以在编译时启用dkms,让驱动自动跟着新内核重建。

sudo apt install dkms sudo ./dkms_install.sh # 视驱动包内脚本而定

3.3 双网卡命名与网络配置

两块RTL8125网卡的名字其实无所谓,但你要是打算长期使用,一定要把接口名固定下来,否则重启后顺序可能变化,软路由脚本全乱。我习惯用udev规则绑定MAC地址。

sudo nano /etc/udev/rules.d/70-persistent-net.rules

内容大致如下:

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="xx:xx:xx:xx:xx:xx", NAME="wan" SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="yy:yy:yy:yy:yy:yy", NAME="lan"

写完后保存,执行sudo udevadm control --reload-rules && sudo udevadm trigger,也可以直接重启验证。

网络配置方面,树莓派OS默认使用NetworkManager。常见的双网口玩法有三种:独立IP、桥接、链路聚合。

独立IP最简单,适合软路由。比如wan口接光猫、DHCP自动获取,lan口手动指定内网地址:

sudo nmcli con add con-name WAN type ethernet ifname wan ipv4.method auto sudo nmcli con add con-name LAN type ethernet ifname lan ipv4.method manual ipv4.addresses 192.168.50.1/24 sudo nmcli con up WAN sudo nmcli con up LAN

桥接模式适合把树莓派当内网二层设备用,两个口都塞进同一个br0:

sudo nmcli con add type bridge ifname br0 con-name br0 ipv4.method manual ipv4.addresses 192.168.1.2/24 sudo nmcli con add type ethernet con-name wan-br ifname wan master br0 sudo nmcli con add type ethernet con-name lan-br ifname lan master br0

链路聚合适合你有支持LACP的交换机,想把两个2.5G口合并成一条逻辑链路,提升总吞吐。RC8125驱动可以和NetworkManager配合,用balance-alb模式最省心,因为它不要求交换机端配置聚合协议:

sudo nmcli con add type bond ifname bond0 mode balance-alb ipv4.method manual ipv4.addresses 192.168.10.10/24 sudo nmcli con add type ethernet con-name bond-wan ifname wan master bond0 sudo nmcli con add type ethernet con-name bond-lan ifname lan master bond0

不过要再次提醒,聚合后的总带宽仍然受PCIe上游带宽限制,Gen2模式下大概率只能到4Gbps左右,并不等于5Gbps。换个角度想,树莓派5做这套双网口,更多是为了“两个独立千兆以上口”,而不是为了“突破5Gbps”。

3.4 网卡参数调优

RTL8125驱动默认参数能满足大多数使用场景,但跑到接近线速时,建议做一些小优化。

先看Ring Buffer大小:

ethtool -g wan

如果tx/rx当前值不到最大值,可以手动拉大:

ethtool -G wan rx 4096 tx 4096

这种调整在每次重启后会失效,想要永久生效可以写个systemd服务或rc.local脚本。然后检查一下中断分布,树莓派CPU有4个核,双网卡同时高负载时,中断绑到不同核上能减少争抢:

cat /proc/interrupts | grep r8125

如果两个网卡的中断都集中在CPU0,可以用irqbalance自动分发,或者手动写/proc/irq/{irq}/smp_affinity来分配。实际测试中,手动绑核带来的提升在2%~5%左右,不算大,但对强迫症有心理安慰。

最后,可以把网卡的EEE节能以太网关掉,这个功能在某些环境下会引发握手延迟和速度波动:

ethtool --set-eee wan eee off ethtool --set-eee lan eee off

4. 性能测试与结果分析

4.1 测试环境搭建

硬件都弄好之后,最激动人心的就是测速了。我先说测试环境的搭建:对端准备两台机器,都带2.5G网卡,通过两条独立网线分别连到树莓派的两个网口上。如果只有一台对端机器,也可以让这台机器插两张2.5G网卡分别连,效果差不多。

在树莓派上装iperf3:

sudo apt install iperf3

4.2 单口吞吐测试

先在树莓派上起一个服务端:

iperf3 -s

对端机器执行:

iperf3 -c 192.168.50.1 -P 4 -t 30

我这边单个RTL8125口通常能稳定跑到2.35~2.48Gbps,已经非常接近2.5G线速。CPU占用会有一些,但还没到吃满4核的程度。这一结果也说明PCIe Gen2的4Gbps有效带宽供单口使用完全没问题。

4.3 双口同时跑,PCIe瓶颈如期而至

双口同时测试的姿势要稍微讲究一点。我在树莓派的两个终端窗口分别起两个iperf3服务端,分别监听两个网口的地址:

iperf3 -s -B 192.168.50.1 -p 5201 iperf3 -s -B 192.168.60.1 -p 5202

两台对端设备同时开始打流。结果非常符合前面的带宽计算:两个口总吞吐稳定在4.0~4.2Gbps,两个口各自只能分到2.0Gbps左右。如果我把其中一个口先跑满2.5Gbps,另一个口的剩余可用带宽只有1.5Gbps左右。

这说明双2.5G方案在默认Gen2下的硬上限是4Gbps,不是网卡或者驱动的问题。如果你接受“每个口能跑到2Gbps左右”,那这套方案已经比千兆快了一倍,完全够用;如果你必须让两个口同时跑满2.5Gbps,那必须先解决PCIe 3.0的问题。

4.4 要不要开启PCIe Gen3模式

树莓派5的config.txt里有一个触发Gen3的开关,前提是你的扩展板PCB走线质量过关、Switch芯片也支持PCIe Gen3,否则可能直接启动失败或设备丢失。在/boot/firmware/config.txt里加一行:

dtparam=pciex1_gen=3

保存后重启,用下面命令确认协商速度:

sudo lspci -vv | grep -E "LnkSta:|LnkCap:"

如果看到LnkSta: Speed 8GT/s,说明成功跑在Gen3。这时再测双口同时打流,两个口合计可以到7Gbps以上,每个口都能跑到接近2.5Gbps,瓶颈彻底消除。

我自己的经验是:Gen3模式在支持良好的板子上非常稳,但确实有部分hAT在开了之后出现PCIe设备枚举不到或者系统死机的情况。所以我建议先做好系统备份,如果开了Gen3进不了系统,就在config.txt那行前加一个#注释掉,恢复到Gen2继续用。对于只跑软路由的朋友,Gen2其实已经完全够用,Gen3更适合做NAS或需要双口大流量互传的场景。

5. 常见问题与排查记录

5.1 插上PCIe Switch后只认到一个网卡

这个问题出现的概率很高,尤其是分体方案。先别急着怀疑硬件坏了,多数情况是PCIe总线资源分配问题。树莓派5的PCIe root complex默认可能没有给下游桥分配足够的bus号,导致Switch挂上后只枚举出第一个设备。解决办法很粗暴:在config.txt里给内核加pci=realloc参数。

pci=realloc

也可以用pci=assign-busses强制重新分配总线号,我自己试下来pci=realloc基本就够了。如果还不行,先更新bootloader(rpi-eeprom-update -a),再去查硬件是否虚接。另一个容易忽略的点是:有些Switch芯片在下游端口没插入设备时,整个下游bridge都不会出现在lspci里,所以你必须把两块网卡都插满再查。

5.2 r8125驱动编译报错

最常见的编译报错是找不到内核头文件。

fatal error: linux/version.h: No such file or directory

解决办法就是安装和当前内核匹配的头文件包,树莓派专用包名是raspberrypi-kernel-headers,装完再重新编译。

还有一种情况是内核升级后旧版驱动源码编译不通过,报错信息五花八门,比如unknown symbol pci_disable_link_state或者struct net_device has no member named 'mem_start'。这时候先确认驱动源码版本是否适配当前内核,不行就换更新版本的r8125驱动。瑞昱驱动源码的版本号和内核版本没有强绑定,我一般会找最近一年内的版本用,避免老版本和新内核API不兼容。

如果编译过程中报权限错误,记得先make clean,再用sudo make install,不要用root直接跑make。

5.3 协商速度只有1000Mbps或总是断流

先确认对端设备是不是也支持2.5G。2.5G这个标准对线材比较敏感,部分所谓超五类线在长距离下可能协商不到2.5G,只能回落到1000M。我建议至少用Cat6线,特别是网口旁边有强电干扰的时候。

如果是和某些交换机兼容性不好,可以手动把速率固定住:

sudo ethtool -s wan speed 2500 duplex full autoneg on

再说断流。断流先看温度:RTL8125满载后如果超过85度,驱动可能主动降速或丢包。把散热片贴好,风扇对着吹。其次看电源,树莓派5的PCIe口供电不足时,RTL8125会间歇性消失。我遇到过一种非常隐蔽的现象:两块网卡单独插都能正常工作,同时插上后其中一块工作几分钟就掉线,换了官方5V/5A电源后消失,明显是供电余量不够。第三看EEE,前面提到的ethtool --set-eee关掉可能能缓解特定交换机搭配下的掉速问题。

5.4 双网口在软路由场景下的特殊经验

如果你是把树莓派5当成双2.5G软路由,也就是wan和lan各一个口,那要补一句:由于流量通常是wan进lan出,PCIe总线上是上行和下行各走一路,虽然双口同向大流量会撞车,但一进一出时基本能各自跑满2.5Gbps。这个结论我自己实测过,很有意义,说明树莓派5做2.5G软路由是完全可行的,瓶颈在NAT转发性能而不是PCIe带宽。

软件方面,用NetworkManager配置双口之后,记得开启内核IP转发:

sudo sysctl -w net.ipv4.ip_forward=1

如果要永久生效,写入/etc/sysctl.d/99-router.conf。如果还要做NAT,就配合nftables或iptables做伪装,这部分网上资料很多,就不展开了。

6. 最后再分享一点个人体会

整套方案折腾下来,我最大的感悟是:“双2.5G”能不能跑满,完全取决于你对PCIe带宽账算得清不清楚。树莓派5原生PCIe Gen2 x1的4Gbps有效带宽,决定了它在默认状态下双口同时大流量必然受限。想突破,要么开Gen3,要么合理规划流量方向。对我个人而言,把它当作一个低功耗双2.5G软路由或者家庭NAS的存储节点,是目前体验最好的方向。

如果你正准备上手,我的建议是先买一体化的双RTL8125 HAT,把系统跑通、测完速,再考虑要不要玩分立元件和更复杂的PCIe Switch扩展。硬件折腾的乐趣不在于一次全上,而是每一环都知道自己为什么这么选。最后再放一个小技巧:FPC排线插拔次数多了会磨损,多备一根没坏处,某天突然找不到网卡,八成不是芯片坏了,而是排线松了。这套方案后续还可以加NVMe、接SATA扩展卡,玩法很多,慢慢折腾就行。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询