尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
RK3568设备树配置RMII百兆以太网:从原理图到DTS完整指南
最近调一块基于RK3568的底板RMII百兆以太网的DTS节点配置前前后后折腾了一整天。说真的这个需求在嵌入式项目里太常见了——核心板加一颗便宜的百兆PHY想跑一个业务网口不想上复杂布线也不愿意承担千兆方案的成本。但很多人就在设备树这一步卡住照着别人的板子抄dts抄完发现不工作又不知道从哪里查。这篇文章我打算把手上的完整过程写出来包括硬件上要注意什么、pinctrl引脚怎么填、gmac节点每个属性是什么意思、mdio/phy子节点怎么挂、编译验证怎么做以及我实际踩过的几个坑。目标就一个你看完能自己配通RK3568的RMII百兆以太网而不是靠试错碰运气。1. 先捋清楚硬件关系RMII信号、REF_CLK三种供给方式1.1 RK3568的两个GMAC和RMII到底什么关系RK3568这颗SoC内部有两个MAC控制器TRM里叫GMAC0和GMAC1各自都能工作在RGMII或RMII模式。RGMII通常接千兆PHY数据线更多RMII就是精简版接口信号少、速率低对应百兆PHY。RMII的全称是Reduced Media Independent Interface中文常翻译成精简媒体独立接口。它和RGMII的核心差异可以看这个表项目RGMIIRMII支持速率10/100/1000M10/100M数据线TX4根2根数据线RX4根2根数据采样125MHz DDR双沿50MHz SDR单沿控制/状态线TX_CTL、RX_CTLTX_EN、RX_ER时钟线TX_CLK、RX_CLK独立共享一根REF_CLK典型PHYRTL8211F、KSZ9031LAN8720A、YT8512C、IP101GRI注意最后一行的共享一根REF_CLK这是RMII和RGMII在设备树配置上最大的分水岭。RGMII的收发时钟是独立的而RMII所有信号都对齐到一根50MHz的REF_CLK上这根时钟从哪来、方向朝哪走直接决定你DTS里clock_in_out怎么写。1.2 50MHz REF_CLK的三种供法这是RMII配置里最值得先搞明白的东西。REF_CLK可以来自三个方向方式APHY外接25MHz无源晶振PHY内部PLL倍频到50MHz然后从REF_CLK引脚输出给SoC。这种情况下SoC侧的REF_CLK是输入方向DTS里配clock_in_out input。LAN8720A这类PHY最常见的用法就是这个很多RK3568底板也是这么接的。方式BSoC的GMAC直接输出50MHz给PHY。这种情况下REF_CLK是输出方向DTS里配clock_in_out output同时要让CRU里对应的输出时钟工作。PHY这边不需要接晶振或者晶振只作为备用。方式C外部直接用一个50MHz有源晶振同时供给PHY和SoC。两边都是输入DTS照样配clock_in_out input。这种设计相对少见一般在时钟质量要求高或者PHY不支持输出REF_CLK的场合才用。调试时最常见的翻车现场就是把方式A配成了output或者方式B没给输出时钟开rate导致PHY和MAC各等各的时钟链路死活起不来。1.3 什么项目适合选RMIIRS说一句实在话如果你的业务只是远程配置、数据采集、Modbus TCP、MQTT这类流量百兆完全够用。RMII节省的引脚数量很可观RGMII要12根信号线RMII只要7根左右省下来的IO可以给UART、GPIO、PWM用。再加上LAN8720A这种PHY单价很低整机BOM成本能压下来不少。但如果你要处理高清视频回传、高速文件传输老老实实上RGMII千兆。设备树配置也可以参考其他帖子但引脚分配、pinctrl节点完全是另一套别套错了。2. pinctrl引脚复用怎么填从原理图和TRM到DTS节点2.1 rockchip,pins四字段的填写规则在瑞芯微的DTS里pinctrl子节点的核心格式是这样的gmac0_rmii_pins: gmac0-rmii-pins { rockchip,pins 3 RK_PB0 2 pcfg_pull_none, 3 RK_PB1 2 pcfg_pull_none, 3 RK_PA6 2 pcfg_pull_none; };每个条目有4个字段顺序不能乱GPIO bank编号。RK3568有GPIO0到GPIO4共5组这里写3就是GPIO3。引脚在bank内的位置。RK_PA0到RK_PD7这些宏对应A组第0脚、D组第7脚等。mux功能号。这个数字决定该引脚复用成哪种功能比如GPIO本身是0UART可能是1GMAC可能是2或者3。必须查TRM确认不能猜。上下拉配置。pcfg_pull_none、pcfg_pull_up、pcfg_pull_down三个选项按电气设计选。我在实际项目里见过不止一次第3个字段随手写了个1结果引脚复用成了别的外设功能网口完全没反应。这个字段没有任何捷径TRM里IOMUX表写的是几就是几。2.2 从原理图到pinctrl节点的完整动作假设你手里的底板用的是LAN8720A这颗PHYRMII接口接到RK3568。操作步骤是这样的第一步打开底板原理图找到RMII接口的网络标号一般是ETH0_TXD0、ETH0_TXD1、ETH0_TX_EN、ETH0_RXD0、ETH0_RXD1、ETH0_RX_ER、ETH0_REF_CLK、MDIO、MDC这类名字。每个信号对应主控的某个引脚原理图上都会标比如GPIO3_B1。第二步打开RK3568 TRM手册找到Pin Mux也就是IOMUX那一章。在表格里定位GPIO3_B1看它有哪些可选功能。如果可复用成GMAC0_TXD0并且mux值是2那pinctrl条目就是3 RK_PB1 2 pcfg_pull_none。第三步把一路的信号按这个方式都查完写进pinctrl子节点。我给一个基于常见SDK的示例注意不同板卡引脚编号会有差异但格式是通用的pinctrl { gmac0 { gmac0_rmii_pins: gmac0-rmii-pins { rockchip,pins 3 RK_PB0 2 pcfg_pull_none, /* MAC0_TXD1 */ 3 RK_PB1 2 pcfg_pull_none, /* MAC0_TXD0 */ 3 RK_PA6 2 pcfg_pull_none, /* MAC0_TXEN */ 3 RK_PB3 2 pcfg_pull_none, /* MAC0_RXD0 */ 3 RK_PB2 2 pcfg_pull_none, /* MAC0_RXD1 */ 3 RK_PA5 2 pcfg_pull_none, /* MAC0_RXER */ 3 RK_PA1 1 pcfg_pull_none; /* MAC0_CLK */ }; gmac0_miim: gmac0-miim { rockchip,pins 3 RK_PB4 2 pcfg_pull_none, /* MAC0_MDC */ 3 RK_PB5 2 pcfg_pull_up; /* MAC0_MDIO */ }; }; };提示我这里写的bank和pin编号是基于我手头SDK里的示例。不同核心板、不同底板RMII信号可能连到不同的GPIO一定以你的原理图和TRM为准。格式看明白字段含义看明白剩下的就是查表的体力活。2.3 引脚冲突的排查方法配置好pinctrl之后如果probe阶段报错或者引脚功能异常优先怀疑是不是跟其他外设占用了同一组引脚。排查命令有两个很实用cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins cat /sys/kernel/debug/gpio第一个能看到当前所有引脚被哪个设备申请、复用什么功能第二个能看到GPIO方向、占用者。如果发现某个Pin的owner不是你预期的gmac0就去dts里全局搜索这个gpio看有没有其他节点把它占了。常见情况是底板把某些引脚同时留给了UART调试串口和以太网dts里两个节点都statusokay结果冲突。解决办法就是把不需要的那个节点status改成disabled。3. gmac节点关键属性拆解phy-mode、clock_in_out与assigned-clocks3.1 一个完整的gmac0节点模板下面是我在做RK3568 RMII百兆以太网时用的节点模板PHY是LAN8720AREF_CLK走的是方式A也就是PHY输出50MHz给SoCgmac0 { phy-mode rmii; clock_in_out input; assigned-clocks cru SCLK_GMAC0; assigned-clock-rates 50000000; snps,reset-gpio gpio3 RK_PB7 GPIO_ACTIVE_LOW; snps,reset-active-low; snps,reset-delays-us 0 10000 50000; pinctrl-names default; pinctrl-0 gmac0_rmii_pins gmac0_miim; phy-handle phy0; status okay; };每个字段我逐个说清楚。3.2 phy-mode和clock_in_out为什么是一对phy-mode rmii是告诉内核的GMAC驱动这套接口工作在RMII模式。驱动会根据这个模式调整收发路径和时钟逻辑。关键来了RMII模式下所有数据的采样时钟都是50MHz REF_CLK而clock_in_out这个属性决定了REF_CLK的方向。clock_in_out inputSoC从外部接收50MHz也就是方式A或者方式C。clock_in_out outputSoC向外输出50MHz也就是方式B。很多第一次配置的人只改了phy-mode忘了配clock_in_out或者配反了。结果就是MAC在等时钟PHY也在等时钟两边干瞪眼。链路层永远起不来。3.3 assigned-clocks和assigned-clock-rates的作用瑞芯微的时钟框架里GMAC控制器本身需要一个工作时钟这个时钟在CRU里的名字一般是SCLK_GMAC0。RMII模式下它必须被设置成50MHz。如果这个rate不对控制器内部逻辑就会乱表现就是收发数据全错或者根本link不上。所以模板里的这段是必须的assigned-clocks cru SCLK_GMAC0; assigned-clock-rates 50000000;如果你用的是方式B也就是SoC输出50MHz给PHY那么还需要额外配置输出时钟SCLK_MAC0_OUTassigned-clocks cru SCLK_GMAC0, cru SCLK_MAC0_OUT; assigned-clock-rates 50000000, 50000000;注意不同的SDK版本对SCLK_MAC0_OUT这个时钟名的定义可能略有差异以你SDK里include的dt-bindings头文件为准。但总的原则不变控制器工作时钟50MHz输出给PHY的时钟也必须是50MHz。两种模式的完整差异对比如下配置项方式APHY供时钟方式BSoC供时钟clock_in_outinputoutputassigned-clocksSCLK_GMAC0 即可SCLK_GMAC0 SCLK_MAC0_OUT50MHz来源PHY从25MHz晶振倍频后给出SoC CRU直接输出3.4 PHY复位脚和本地MAC地址两个容易被忽略的点snps,reset-gpio指定PHY复位引脚snps,reset-active-low表示低电平复位snps,reset-delays-us的三个值依次是复位前延时、复位低电平保持时间、复位后等待时间。LAN8720A这类PHY上电后需要一小段时间稳定复位时序没给够MDIO经常读不到PHY或者PHY状态异常。调试期建议把第三个值调大一些比如给到50000微秒也就是50毫秒稳一点。还有local-mac-address这个属性如果你的bootloader没有给GMAC传MAC地址Linux启动后会用随机MAC表现为每次重启网卡MAC地址都变DHCP获取的IP也可能跟着变。产品阶段一般由bootloader写入但调试阶段可以直接在dts里临时指定一个local-mac-address [00 11 22 33 44 55];注意这只是调试用正式产品不建议这么做容易造成多台设备MAC重复。4. mdio与phy子节点地址、compatible、复位这些细节4.1 mdio节点两种常见写法GMAC控制器管理PHY是通过MDIO总线MDC是时钟MDIO是数据。在DTS里PHY设备可以挂在两个位置。第一种写法老版本SDK常见直接在gmac0节点内部写mdio子节点gmac0 { ... mdio { compatible snps,dwmac-mdio; #address-cells 1; #size-cells 0; phy0: ethernet-phy0 { reg 0; }; }; };第二种写法新版本SDK常见把mdio独立成节点mdio0 { phy0: ethernet-phy0 { compatible ethernet-phy-ieee802.3-c22; reg 0x0; }; }; gmac0 { ... phy-handle phy0; ... };两种方式内核都支持具体用哪种取决于你SDK里的dtsi和dwmac驱动版本。如果你手里的SDK本身就定义了单独的mdio0节点就用第二种然后在gmac0里通过phy-handle引用它。如果你在某个参考dts里看到gmac0下既有mdio子节点又有对phy0的引用也别慌这是不同内核版本代码演进留下的差异确认自己的驱动实际走哪条路径就行。4.2 PHY地址是怎么来的reg该填什么PHY在MDIO总线上的地址是由PHY芯片的strap引脚决定的不是软件随便指定的。比如LAN8720A的PHYAD0引脚接低电平地址就是0x0接高电平地址就是0x1。有些PHY的地址由多个引脚组合决定要看datasheet里的strap表格。所以dts里reg 0或者reg 1必须以原理图上PHYAD引脚的实际接法为准。如果PHY地址和实际不符内核在MDIO总线上扫不到设备dmesg会报Cannot access PHY之类的错误。同一根MDIO总线上如果挂了多个PHY地址冲突会导致两个PHY都异常这个尤其注意。4.3 compatible写标准C22还是具体PHY ID绝大多数的RMII百兆PHY都是IEEE 802.3 C22标准寄存器接口内核通过读取PHY的寄存器0x02和0x03也就是PHY ID寄存器自动识别厂商和型号。所以compatible用标准写法就够了compatible ethernet-phy-ieee802.3-c22;内核会通过PHY ID匹配到对应的PHY驱动。LAN8720A在dmesg里会出现类似PHY ID 0007c0f1这样的打印这就是它通过标准MDIO读出来的ID。不需要在DTS里手动指定具体芯片型号。4.4 max-speed属性加不加如果产品设计上铁定只用百兆可以在phy节点里加一行max-speed 100;让PHY在自动协商时不往上协商千兆。但严格来说百兆PHY本身就只能协商到100M所以这个属性不是必须的。我个人建议调试阶段不要加等整个链路通了、确认PHY确实按百兆协商再考虑是否固定。加早了反而可能掩盖问题。LAN8720A这类PHY即使不加ethtool eth0看到的Speed一样是100Mb/s。5. 完整可用的DTS示例与编译验证流程5.1 一份完整的gmac0mdio0配置把前面所有内容合并起来我给你一份在RK3568上做RMII百兆以太网时可以直接参考的完整配置。前提是你的PHY挂在gmac0上PHY地址是0REF_CLK由PHY提供即方式A。gmac0 { phy-mode rmii; clock_in_out input; assigned-clocks cru SCLK_GMAC0; assigned-clock-rates 50000000; snps,reset-gpio gpio3 RK_PB7 GPIO_ACTIVE_LOW; snps,reset-active-low; snps,reset-delays-us 0 10000 50000; pinctrl-names default; pinctrl-0 gmac0_rmii_pins gmac0_miim; phy-handle phy0; status okay; }; mdio0 { phy0: ethernet-phy0 { compatible ethernet-phy-ieee802.3-c22; reg 0x0; status okay; }; };这段加到你的产品dts文件里比如rk3568-custom-board.dts然后在内核的Makefile里确认这个dts文件已经被编译。5.2 编译DTS和烧录验证RK的SDK编译设备树通常跟着内核一起走。在SDK根目录执行./build.sh kernel也可以单独编dtb。假设你已经配置好了交叉编译环境在kernel目录下执行export ARCHarm64 export CROSS_COMPILEaarch64-none-linux-gnu- make dtbs或者直接编译你那个dts对应的dtbmake rk3568-custom-board.dtb编译完成后dtb文件一般在kernel/arch/arm64/boot/dts/rockchip/目录下。烧录方式取决于你的SDK如果SDK把dtb打包进了boot.img那就烧boot.img。如果SDK有单独的dtb分区或者resource.img就单独烧对应分区。用RKDevTool或者upgrade_tool烧录都行。烧完开机先用dmesg确认设备有没有被识别dmesg | grep -iE stmmac|eth0|mdio正常情况下能看到类似下面的输出stmmaceth 10010000.ethernet: no reset GPIO stmmaceth 10010000.ethernet: device MAC address ... stmmaceth 10010000.ethernet: probed mdio_bus 10010000.ethernet-1: MDIO bus started再检查网络接口是否存在ifconfig -a应该能看到eth0。然后查看PHY的链接状态cat /sys/class/net/eth0/phy如果PHY正常这里能看到PHY的名字和地址。接着用ethtool看速率ethtool eth0正常会显示Speed: 100Mb/s和Duplex: Full。最后插上网线做一次ping测试ip link set eth0 up ping -I eth0 192.168.1.1通了整套配置就算落地了。5.3 快速验证DTS是否真的改进去有时候改了dts但编译出来的镜像没包含进去排查起来很浪费时间。建议开机后在板子上执行dtc -I fs /proc/device-tree -O dts或者直接查看gmac0节点cat /proc/device-tree/eth0/phy-mode 2/dev/null cat /proc/device-tree/f7030000.ethernet/phy-mode 2/dev/nullRK3568的gmac0寄存器基地址我记得是0xfe2a0000附近不同SDK里节点名可能是ethernetfe2a0000或者eth0。直接看/proc/device-tree下gmac节点里的phy-mode属性值是不是rmii就能确认当前运行的内核到底加载了哪一版配置。这个习惯很值得养成我碰到过不少改了dts没生效的求助最后都是烧录流程的问题。6. 我实际踩过的三个坑现象、排查思路与修复6.1 坑一dmesg一直报Cannot access PHY现象配置好DTS后开机dmesg出现类似Cannot access PHY、mdio_bus: probe of mdio0 failed的报错ifconfig -a看不到eth0。排查链路先用万用表量PHY供电LAN8720A一般需要3.3V供电部分芯片内部还有1.2V/1.8V LDO如果供电不对直接放弃。量PHY的25MHz晶振示波器看频率是否在25MHz附近并且起振。晶振没起来REF_CLK就出不来SoC那边自然无法访问PHY。检查MDC/MDIO两根线的电平。MDIO是双向数据线一般需要上拉电阻到3.3V如果板上漏了上拉读PHY ID会不稳定。确认reg地址和原理图PHYAD strap一致。当时我那个板子的根因是PHY地址。原理图上PHYAD0接了高电平地址应该是1但dts里写的是reg 0。改成reg 1后dmesg立刻就看到了PHY ID。这个坑最气人的地方在于MDIO总线上存在无响应设备时内核报错信息很通用不会直接告诉你地址不匹配只能自己逐个排查。6.2 坑二PHY能读到但link始终起不来现象dmesg能正常读取PHY IDethtool eth0能看到PHY的信息但插上网线后Link detected: no一直起不来。排查链路先确认REF_CLK的50MHz时钟是否存在。用示波器量SoC侧和PHY侧的REF_CLK引脚看频率到底是多少。确认时钟方向。如果硬件是PHY提供时钟给SoC但dts里把clock_in_out配成了outputSoC就会尝试往外输出而PHY也在往外输出两边对顶。表现就是REFC_CLK信号异常或者根本没有稳定的50MHz。确认RX_ER引脚。RMII模式必须有RX_ER这条状态线有的PHY把它叫CRS_DV/RX_DV有些简化板上把这根线直接接地或者悬空导致MAC永远认为链路有错误。当时我调的一块板子硬件参考设计里把RMII的RX_ER省略了结果MAC一直误判链路错误。最后确认dts里pinmux配了RX_ER但引脚实际没接。解决办法是跟硬件确认走线把RX_ER补上或者明确PHY是以RMII模式工作的情况下RX_ER必须存在。另一个常见根因是clock_in_out配反。这个属性配错时链路会非常诡异PHY的LED可能都亮了但驱动就是报link down。为什么因为MAC和PHY的时钟不是一个源数据采样时刻对不上链路层根本无法建立。6.3 坑三引脚复用冲突probe时pinctrl直接失败现象开机后dmesg里有pin 128 already requested by xxx类似的报错或者GMAC节点probe不完整eth0偶尔出现偶尔消失。排查链路在板子上执行cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins看对应引脚当前被谁占着。如果报错信息指向另一个外设去dts里搜索那个外设节点看它是否占用了GMAC需要的引脚。把冲突的那个节点status改成disabled或者调整引脚分配。我遇到的一个具体案例底板把调试UART的一根TX和GMAC的MDIO用在了同一个GPIO上。UART的pinctrl先初始化占了引脚GMAC probe时申请MDIO失败。因为UART在启动早期打印日志所以GMAC总是争不过它。最后在dts里把这个UART节点在正式产品配置中disable掉网口才稳定。这里有个经验不要只看dts里写了什么要用debugfs验证当前实际生效的引脚配置。dts里的status字段是一回事pinctrl驱动实际申请有没有成功是另一回事。6.4 关于PHY寄存器调试的一点补充如果上面的排查都做完了还不行建议直接用工具读写PHY寄存器比反复改dts重烧快得多。Linux下可以用内核自带的mdio-tools或者在板子上用devmem直接操作GMAC的MDIO控制器寄存器。一般先读PHY的寄存器0和寄存器1mdio_read eth0 0 mdio_read eth0 1如果能正常返回0x3100和0x786d这类基础值说明MDIO通信正常问题大概率在时钟方向或者pinctrl。如果返回全F或者全是0基本就是硬件或者MDIO访问链路的问题。一些个人经验RK3568的RMII配置本身并不神秘无非是设备树里把pinctrl、phy-mode、clock_in_out、phy-handle这几件事对清楚。但网上能找到的完整案例确实不多很多帖子只贴了dts片段不讲硬件前提照抄必须出问题。我这几次调下来的体感是你需要的不是记住某几个属性而是把原理图、TRM的引脚表、PHY的datasheet三份资料摆在桌面上对齐。原理图告诉你怎么连的TRM告诉你引脚复用该怎么写PHY datasheet告诉你50MHz REF_CLK谁提供、地址strap怎么配置。三份资料对上号DTS基本一遍过。调试阶段建议优先检查dmesg其次看debugfs的pinctrl信息最后再动代码。网络这种跟硬件耦合很深的外设软件上反复试错效率最低。希望这篇能让你少走点弯路。
RELATED

相关推荐

基于DeepSeek-MoE的垂直领域微调实战:LoRA、数据准备与开源生态建设

基于DeepSeek-MoE的垂直领域微调实战:LoRA、数据准备与开源生态建设

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/5 1:03:38
Java Swing 实现超级马里奥小游戏:主循环、碰撞检测与帧率解耦

Java Swing 实现超级马里奥小游戏:主循环、碰撞检测与帧率解耦

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/5 1:03:38
单片机控制板故障排查六步法:上电无反应、死机与偶发故障定位指南

单片机控制板故障排查六步法:上电无反应、死机与偶发故障定位指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/5 1:03:38
MORE NEWS

更多资讯

📰

基于Matlab的雷达干扰与目标跟踪对抗仿真

1. 项目概述1.1 核心需求解析雷达干扰与目标跟踪对抗,这个方向放到今天依然是电子战领域最硬核的“矛与盾”博弈。做这个项目的初衷很直白:现代战场上,航空器(无论是战斗机、无人机还是预警机)的生存力已经不再单纯取决…

📰

插件系统深度解析:plugin.json、TypeScript SDK与CLI加载失败排查

1. 从“plugins”这个词说起:为什么它值得单独拎出来聊“plugins”这个词,放在任何技术栈里都不算新鲜。但如果你最近在折腾 Cursor、Codex CLI、Zcode CLI 这类工具,或者被plugin.json、TypeScript SDK、failed to load plugins这类报错反复…

📰

DeepSeek构建酒店服务知识库:投诉处理缩短75%的项目拆解

简介:面向酒店管理者、AI应用工程师及数字化转型从业者的专业方案文档,聚焦DeepSeek在酒店服务知识库中的实际落地。文档针对客户投诉处理效率低、服务响应慢等痛点,给出从需求分析、技术原理到系统实现的完整路径,核心成果是将投…

📰

计算机网络实验报告汇总:Wireshark抓包与Socket编程实战指南

简介:计算机网络课程实验报告汇总.doc 是一份面向计算机网络课程学生的实验报告合集,内容覆盖数据链路层PPP协议、单台及跨交换机VLAN划分与互访、RIP/OSPF动态路由协议、NAT内部源地址转换、子网划分等实验,适合用于课程设计、报告撰写或考前…

📰

OpenShell 命令环境框架:从脚本散乱到可编程命令编排的工程实践

1. 从零认识 OpenShell:它到底解决什么问题第一次听到 OpenShell 这个名字,很多人会下意识以为它又是一个“终端美化工具”或者“命令行增强插件”。但真正用过一段时间之后你会发现,它的定位远比一个 shell 提示符要宽——OpenShell 更像是一…

📰

CCNA经典笔记拆解:网络基础与排错实战核心知识

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬