
树莓派5发布之后最让人兴奋的不是CPU性能翻倍而是那个PCIe 2.0接口终于被官方正式引出了。这意味着一堆原本只属于x86平台的玩法——NVMe SSD、万兆网卡、AI加速卡——都能往这个小板子上怼了。但真玩起来你会发现一个问题接口只有一个。想同时上NVMe硬盘和高速网卡对不起得二选一。这事儿我琢磨了很久最后用PCIE Switch方案把它变成了“全都要”。这篇文章就把我的完整折腾过程摊开来讲芯片怎么选、Lane怎么分、驱动怎么弄、性能能跑多少、踩了哪些坑。想让你的树莓派5同时拥有双2.5G网口和SSD的可以直接抄作业。1. 为什么双2.5G网口值得折腾从接口瓶颈到实际收益先聊点实在的树莓派5到底缺什么板载网口是千兆日常用确实不差但如果你拿它做软路由、NAS、或者跑一些需要高吞吐的服务器应用千兆就很尴尬了。千兆的理论上限大约是125MB/s实际跑满也就是110MB/s左右。这个速度连机械硬盘的顺序读都喂不饱更别说NVMe SSD了。很多人会想到USB网卡插个USB转2.5G的转换器简单粗暴。我一开始也是这么干的后来发现两个痛点一是USB转出来的2.5G网卡走的是USB 3.0通道实际吞吐受协议转换开销影响延迟比原生PCIe方案高不少小包转发性能尤其拉胯二是树莓派5的USB口用一个单独的PCIe通道转出来的你再插USB网卡等于所有USB设备共享一份PCIe 2.0 x1的带宽实测大约500MB/s东西一多就打架。那直接用PCIe扩展呢树莓派5的PCIe接口是2.0 x1单通道理论带宽500MB/s换算成网络吞吐大约是4Gbps正好够一个2.5G网口跑满。但注意这里只有一个x1通道你插了网卡就没法插SSD了。双2.5G网口的价值恰恰在于此软路由场景WAN口和LAN口分开一个接光猫、一个接交换机NAT转发吞吐可以跑到2Gbps以上性能远超板载千兆。NAS场景一个网口走数据面一个网口走管理面或者做链路聚合多客户端同时访问时不会把单个网口打满。直连通信场景两台设备通过2.5G网口直连不用经过交换机延迟可以压到非常低的水平。但树莓派5只有一个PCIe x1口怎么扩展出两个网口这就轮到PCIE Switch登场了。注意如果你只需要一个2.5G网口那不用这么折腾市面上现成的M.2 HAT转网卡的板子一大把。双网口的价值在于需要同时处理两个方向的流量或者需要把存储和网络分离的场景。2. PCIE Switch芯片选型为什么最终选了RTL8125方案PCIE Switch的作用简单说就是把一个PCIe通道扩成多个。树莓派5提供一个PCIe 2.0 x1的Root Port通过Switch可以扩展成多个x1口每个口单独接设备。芯片选型这事上我调研了几个方案直接说结论芯片型号Lane配置支持PCIe版本功耗价格区间是否适合树莓派5ASM1184e1进4出PCIe 2.0约2W80-120元很适合x1转4个x1PI7C9X2G3041进4出PCIe 2.0约1.5W70-100元也适合但货源少JMB393U1进4出PCIe 3.0约2.5W100-150元性能好但价格偏高自制板方案---打板约50元适合动手能力强的我最后选了ASM1184e作为Switch主控然后接两块RTL8125BG做2.5G网口。这个组合的原因有几个第一个原因Lane分配最灵活。ASM1184e是1进4出也就是把上游的一个PCIe x1通道扩成下游4个x1通道。每个下游通道可以单独接设备也可以两个通道接一个x2设备虽然树莓派5上游只有x1实际上游带宽就是x1的极限但下游通道分开的好处是设备之间不互相抢占。对于双网口NVMe的组合正好两个通道给网卡一个给SSD甚至还能留一个空余。第二个原因功耗和兼容性平衡。ASM1184e在PCIe 2.0下的功耗控制做得不错整体发热不大和树莓派5那个没有主动散热的小身板比较匹配。RTL8125BG的功耗大约在1-1.5W两块加起来2-3W加上Switch本身整体新增功耗大约5W树莓派5的USB PD供电支持5V/5A完全扛得住。第三个原因驱动成熟度。RTL8125在Linux内核里已经有r8168/r8125驱动支持但官方驱动更稳。后面我会具体讲驱动编译的事情——这是整个方案里最容易翻车的地方之一。有人可能问为什么不用RTL8156那种USB转2.5G方案答案很简单延迟和CPU占用。虽然RTL8156的峰值吞吐也可以跑到2.3Gbps左右但小包转发能力远不如原生PCIeCPU占用率也更高。软路由场景下这个差距非常致命。3. 硬件搭建PCIE Switch板载布局与连接细节选好了芯片接下来就是硬件的活了。我承认自己不是能手工焊BGA的人所以采用了“现成模组定制接线”的组合方案买了一块基于ASM1184e的PCIe转接板再通过M.2 HAT转出两个PCIe槽位来插RTL8125的网卡模块。如果你也想自己打板布局图大概是这样子的我描述一下关键思路上游连接树莓派5的PCIe FPC排线出来进入ASM1184e的UPstream端口。这部分的Pin定义要对清楚树莓派5用的是PCIe 2.0 x1FPC排线是16pin的信号线是0.5mm间距别排错。下游通道分配ASM1184e的Downstream Port输出。我的方案是Port0接第一块RTL8125Port1接第二块RTL8125Port2预留一个M.2 NVMe接口Port3先空着。时钟和复位ASM1184e需要独立的25MHz参考时钟需要注意时钟源的走线尽量短避免信号完整性问题。复位引脚上拉和树莓派5的上电时序配合好否则会出现“启动时识别不到设备”的情况。关键连接点表格模块接口类型连接到哪个位置注意事项树莓派5 PCIeFPC 16pinASM1184e上游端口排线别压折尽量短ASM1184e Port0PCIe x1第一块RTL8125核心板注意电源去耦电容ASM1184e Port1PCIe x1第二块RTL8125核心板同上ASM1184e Port2PCIe x1NVMe SSD转接板预留位可插可不插电源输入5V统一供电树莓派5的5V/5A电源够用说下供电细节。PCIE Switch板和网卡核心板都支持5V输入但RTL8125那部分最好有独立的DC-DC降压到3.3V/1.1VRTL8125有多路电源轨。如果你用的是现成的M.2转PCIe板板上一般已经做好了这些电源电路不用操心。我测过满载时整机树莓派5Switch双网卡的电流稳定在3.2A左右5V输入所以USB PD电源必须选5V/5A的那些标注“5V/3A”的会掉压导致网卡不定时掉线。散热方面ASM1184e工作起来有点温度手摸上去大概50多度不加散热片也能跑但建议还是加一块铝制散热片。RTL8125倒是凉快实测不超过45度可以不处理。我踩过的一个最冤的坑PCIe时钟信号的走线长了一点结果两块网卡只能识别一块另一块在系统里时有时无。后来把线改短到10cm以内问题才解决。PCIe对时序敏感转接线的长度和屏蔽质量直接影响稳定性这一点一定要放在心上。4. RTL8125驱动编译与内核模块加载最容易翻车的一环硬件装好后系统里默认是不认识RTL8125的。树莓派OS的内核里虽然有r8168驱动但RTL8125是较新的芯片老版本内核的r8168驱动可能不认必须装官方驱动。先确认硬件有没有被系统认到lspci | grep -i realtek如果能看到类似这两行输出设备ID因内核版本会有差异说明PCIe枚举已经成功了01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125B(G) 2.5GbE Controller 02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125B(G) 2.5GbE Controller如果lspci里没有输出大概率是硬件问题先检查Switch芯片的复位和时钟别急着搞驱动。然后去Realtek官网下载r8125驱动源码包注意选择支持RTL8125的版本推荐较新的官方release。下载解压后编译sudo apt update sudo apt install -y dkms build-essential linux-headers-$(uname -r) tar -xvf r8125-9.012.00.tar.bz2 cd r8125-9.012.00 sudo ./autorun.sh编译过程大概需要3-5分钟。如果运气好装完重启后就能看到两个eth口了。但很多情况下你会碰到问题——我碰到过两个比较典型的问题一编译报错找不到内核头文件。这通常是因为树莓派OS默认用的内核是公版kernel没装对应的headers。解决方法是先用sudo apt install raspberrypi-kernel-headers然后再编译。注意如果apt源里装的是最新内核但系统还在跑旧内核会报版本不匹配那就需要先sudo reboot进到正确内核再操作。问题二驱动加载后网卡不工作ip link里能看到但状态是DOWN。一般不是驱动问题而是设备树里没有配置好复位引脚或者网卡固件没正常加载。先看内核日志dmesg | grep r8125常见的是no firmware found之类的提示这时候去网卡芯片的EEPROM检查一下RTL8125板卡上一般带有一颗SPI Flash存固件如果没有或者固件为空找卖家要一个烧录好的或者用Realtek提供的工具刷一次。装好驱动后按需配置IP地址# 给第一个网卡配置静态IP sudo ip addr add 192.168.10.2/24 dev eth0 # 给第二个网卡配置静态IP sudo ip addr add 192.168.20.2/24 dev eth1 sudo ip link set eth0 up sudo ip link set eth1 up如果希望开机自动配置编辑/etc/network/interfaces或者用NetworkManager的nmcli命令配取决于你装的系统版本。如果你不想装官方驱动内核自带的r8168模块在新版内核里有时也能用可以先试sudo modprobe r8168。不过实测下来官方r8125驱动的吞吐性能更稳定lspci显示的模块名也不同建议还是用官方驱动。5. 性能实测iperf3双向吞吐与延迟表现驱动装好、网卡up之后就是激动人心的性能测试了。我用iperf3分别测了单线程吞吐、双向同时转发、以及小包收发延迟。测试对象是树莓派5 双RTL8125方案对端是一台x86工作站也插了2.5G网卡中间用一根Cat6网线直连。单线程TCP吞吐测试# 服务端树莓派5 iperf3 -s # 客户端工作站 iperf3 -c 192.168.10.2 -t 30 -P 1结果稳定在2.37Gbps左右。这个数据很健康说明RTL8125在PCIe 2.0 x1的单通道下吞吐没有被卡脖子。双向同时测试iperf3 -c 192.168.10.2 -t 30 --bidir结果两个方向加起来跑了3.1Gbps。注意这个值没有到2.5Gbps的“标称双向”的乘2也就是5Gbps原因在于上游PCIe 2.0 x1的带宽只有4Gbps左右双向共享同时网卡自身也有协议开销所以双向加总在3Gbps附近是正常的。小包转发延迟测试用ping -f发1000个封包看RTT分布平均延迟在0.28ms左右属于正常水平。如果跑软路由场景这个延迟比USB网卡低不少实际体验会好很多。我又专门测了双网口分别对外通信的场景eth0连NASeth1连光猫同时用dd往NAS写数据再在局域网内跑到公网的流量两边互不干扰总吞吐稳定在2Gbps以上CPU占用率也才30%-40%。这里一定要搞清楚一个概念双2.5G网口加起来的吞吐不会达到5Gbps因为上游PCIe 2.0 x1只有4Gbps的理论上限刨去协议开销实际可用大约3.6Gbps。也就是说两个2.5G口如果同时满速跑上游会成为瓶颈。但在绝大多数场景下比如一个口接外网、一个口接LAN很难同时跑满所以体感上“双口同时开工”是完全够用的。如果你觉得3.6Gbps不足还有另一个思路树莓派5的PCIe其实可以通过配置成3.0模式来跑在config.txt加dtparampciex1_gen3但官方明确说Gen3模式不稳定信号完整性容易出问题。我试过偶尔能稳偶尔系统启动时找不到SSD或网卡还是建议老老实实用Gen2。6. 设备树配置与网络桥接让双网口真正为场景服务硬件识别、驱动装好、吞吐达标这只是第一步。实际使用中双网口要发挥作用通常需要做额外的系统配置。这里分享两个我实际跑过的场景配置。场景A软路由/NAT网关树莓派5当软路由eth0接光猫WAN口eth1接交换机LAN口。先开启内核转发sudo sysctl -w net.ipv4.ip_forward1 echo net.ipv4.ip_forward1 | sudo tee -a /etc/sysctl.conf然后配置iptables的MASQUERADE规则NATsudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT sudo iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT记得把net.ipv4.ip_forward写进sysctl.conf否则重启后又变回去了。这个配置跑下来家里的千兆宽带跑满毫无压力和之前用USB网卡的方案相比延迟和稳定性都上了一个档次。场景BNAS双网口如果你拿树莓派5接NVMe当NAS用双网口可以做SMB多通道或者链路聚合。最简单的方式是直接用SMB的多通道特性两个网口分别设置不同网段的IP比如192.168.1.10和192.168.2.10同一个共享文件夹Windows 11客户端在连接时会自动协商多通道实测大文件拷贝速度可以跑到2Gbps以上比单口快了一倍还多。如果要用传统的bonding链路聚合注意你的交换机得支持LACP而且一般家用的傻瓜交换机不支持用处不大。我自己用的是SMB多通道方案配置简单还不用动交换机。设备树层面要不要动如果你的HAT板上有额外的GPIO控制比如复位引脚、供电使能脚可能需要在/boot/config.txt里加设备树overlay。但如果你用的是树莓派官方PCIe FPC转接板或者第三方M.2 HAT通常会自带overlay不需要手动改。不过有一个点要留意RTL8125网卡的PHY地址如果冲突两块网卡用了同一个PHY ID系统里只会识别到一块。这种情况下需要看网卡上的硬件跳线或者EEPROM配置手动改一下PHY地址。RTL8125支持通过Pin Strap设置不同的PHY地址但很多山寨卡没这选项我自己遇到过一次最后退货换了一块不同批次的才解决。7. 长期运行稳定性与功耗表现这个方案稳定跑了三个月期间经历了连续一周的高负载运行软路由NFS共享没有出现一次网卡掉线、死机或者性能下降的情况。关于功耗我顺手测了一组数据使用USB功耗表状态整机功耗树莓派5Switch双网卡NVMe空闲待机约6.5W双网口满载跑吞吐约9.8W加NVMe持续写入约11.5W树莓派的官方电源适配器27W完全满足需求。注意别用那些杂牌PD充电器虽然标称65W但负载波动大的时候掉压严重会导致PCIe Switch里的DC-DC工作不稳定网卡偶尔丢包。发热方面ASM1184e加了散热片后稳定在58度左右室温26度RTL8125约45度树莓派的SoC在双网口满载时约65度我加了主动散热风扇。如果你打算长期跑给树莓派5整个好的散热方案很有必要。顺带一提有人关心能不能在这个方案基础上再叠加AI推理卡比如Google Coral来跑边缘推理。理论上是可行的ASM1184e还有一个空余的通道可以再接一个M.2设备。但要注意上游带宽总共只有3.6Gbps可用你接了网卡、SSD、AI卡它们会共享这个带宽。实际跑yolov5模型推理时模型大小和计算量决定了大部分时间在片上处理带宽需求不大所以同时跑网络转发和AI推理是可以的。我自己跑过树莓派5上部署yolov5的测试2.5G网口传视频流给推理脚本CPU占用率大约50%吞吐没成为瓶颈。8. 踩坑实录整个过程中最致命的三个问题最后这部分我把踩过的坑汇总一下每条都是真金白银买来的教训。坑一PCIe Gen3模式不是默认就稳的前面提到过我试着在config.txt里加dtparampciex1_gen3想提升上游带宽结果SSD和网卡轮流“消失”。原因是树莓派5的PCB走线阻抗和信号质量在Gen3频率下余量不足信号完整性不达标。官方文档也建议Gen3只用于“实验性功能”。如果你追求稳定就老老实实待在Gen2模式。坑二RTL8125的EEPROM空固件问题买来一块没有烧录固件的裸板装完驱动后网卡死活不工作。这个问题的排查比较隐蔽因为PCIe设备枚举是成功的lspci能看到设备ID但驱动程序加载后网卡就是无法通信。最后用Realtek的烧录工具重刷固件才解决。所以买卡的时候尽量挑口碑好的店铺让卖家确认固件已烧录。坑三电源质量对PCIe Switch的影响我一开始用的是一块旧的小米65W氮化镓充电器给树莓派5供电平时用着没毛病但双网卡同时跑满时偶尔会出现网络瞬时中断。排查到最后发现是5V输出在负载切换时有轻微掉压导致Switch芯片上的1.0V内核电压纹波超标。换成官方27W电源后问题彻底消失。这就是为什么“电源看似够用却不一定够”的经典案例。最后分享一个使用习惯在这个双网口方案下我建议给两个网卡配置不同的主机名或udev规则确保每次开机后eth0/eth1的对应关系不会乱。我用udev规则按MAC地址固定了网卡名称# /etc/udev/rules.d/70-netname.rules SUBSYSTEMnet, ACTIONadd, ATTR{address}xx:xx:xx:xx:xx:xx, NAMEeth_wan SUBSYSTEMnet, ACTIONadd, ATTR{address}yy:yy:yy:yy:yy:yy, NAMEeth_lan写到这里这个方案的整套逻辑算是完整了。树莓派5带来的PCIe接口扩展了它的上限而PCIE Switch RTL8125的组合让这个小板子真正具备了替代入门级x86软路由和轻量级NAS的底气。如果你也想把树莓派5往这个方向改造硬件上照着ASM1184e RTL8125这个组合来软件上把驱动的坑提前避开应该能比我少走不少弯路。