logicog/RTLPlayground

GitHub: logicog/RTLPlayground

为 RTL8372/RTL8373 芯片的 2.5G 交换机提供替代固件,让非网管设备获得 VLAN、IGMP、端口聚合等管理功能。

Stars: 206 | Forks: 61

# RTLPlayground 这是一个为基于 RTL8372/RTL8373 的 2.5G 交换机的高级用户提供固件开发的 Playground。 对于这些设备的每种硬件配置,通常会出售非网管版和网管版,它们的硬件基本相同。其目的是为非网管设备也提供管理功能,以及附加功能,例如管理 VLAN、DHCP 服务器、多语言支持、IPv6 和 TLS 加密的网页。然而,目前仅提供以下功能: - 现代化的 Web 界面,支持鼠标悬停以显示更多信息 - 用于配置所有功能的串行控制台界面 - 用于配置 Multicast 流的 IGMP - 端口配置显示关于自身和 Link-partner 通告的速度设置的详细信息 以及本地端这些设置的配置 - 针对每端口的帧大小 (MTU) 配置,支持 Jumbo-Frame 或限制特定设备的 MTU - EEE (Energy Efficient Ethernet) 可以按端口进行配置。提供有关 link partner 提供的支持以及端口的 EEE 状态的详细信息。 - VLAN 配置 - 显示插入模块的 SFP 信息,当前传感器值(例如温度、RX 和 TX 功率)会显示在 CLI 中,并在 Web 界面上通过鼠标悬停显示 - 镜像配置 - 可以设置 Link Aggregation Groups - 详细的端口数据包统计信息 - 通过 Web 界面将配置保存到 flash - 通过 Web 进行固件更新 - 从原始 Web 界面作为固件升级进行安装 GUI 虽然该固件比原始网管固件提供了相当大的改进,但该固件仍然缺乏对 STP 和专有环路预防协议以及 DHCP 的支持。如果您需要这些功能,请勿在您的网管设备上安装此 Playground。无论如何,强烈建议不要安装,除非您至少能够通过 SOIC 夹具(例如也用于 BIOS 备份的夹具)备份原始 flash 内容,并且在出现问题时能够重新安装该固件。这不需要任何焊接技能。 该固件支持具有以下硬件功能的设备: - 4 个 2.5G 端口 + 2 个 SFP+ 端口 - 5 个 2.5G 端口 + 1 个 SFP+ 端口 - 8 个 2.5G 端口 + 1 个 SFP+ 端口 出售的设备通常具有相当普遍的设计,但是 LED 配置可能存在差异(交换机具有不同颜色和不同类型 LED 的 LED)。已测试设备的列表可以在[受支持的设备](doc/supported_devices.md)中找到。 要进行有意义的开发,您将需要使用串行控制台,因此需要具备焊接技能。刷写必须通过 SOIC-8 PatchClamp 或通过焊接 flash 芯片的插座来完成。 如果您不想打开您的设备,您可以使用项目的代码,例如通过 Ghidra 查看镜像来了解这些设备。如果您想为 Web 界面的设计做出贡献,或者想先了解一下该界面,这里提供了一个独立的设备模拟器,它完全作为本地 Web 服务器在 Linux 下运行。 ## (0) 编译要求 安装以下特定的构建先决条件 (Debian 12/13),请注意 Ubuntu 24.04 仍然使用的是较旧版本的 sdcc,但您需要 sdcc 版本 4.5 才能编译代码: ``` sudo apt install make gcc sdcc xxd python-is-python3 libjson-c-dev ``` ## (1) 编译用于直接刷写芯片并升级已运行 RTLPlayground 的设备 使用 vi 或 nano 等编辑器编辑 machine.h。选择固件应为其构建的正确机器型号。 现在,构建固件镜像应该可以正常工作了: ``` make ``` 请注意,生成的镜像以 .bin 结尾,而不是 .img,这是为了兼容 IMSProg。 镜像位置存储在 `RTLPlayground/output/rtlplayground_version_machine.bin` 中 例如 ``` rtlplayground-v0.1.0-12c98ba-dirty-LIANGUO_ZX_SWTGW215AS.bin ``` ## (2) 编译用于带管理选项的 OEM 运行设备 (Web 升级) 可以使用特定的升级镜像从现有的原始固件升级网管交换机。 您首先需要构建用于直接刷写芯片的固件:请参见下文 (1) 然后 ``` cd installer make ``` 镜像位置存储在 `RTLPlayground/installer/output/rtlplayground_oem_upgrade.bin` 中 编译控制台输出示例 ``` RTLPlayground/installer$ make mkdir -p output gcc updatebuilder.c -o output/updatebuilder sdas8051 -plosgff -o output/crtstart.rel crtstart.asm sdcc -mmcs51 --code-loc 0x1000 -o output/installer.rel -c installer.c sdcc -mmcs51 -Wl-bHOME=0x1100 -Wl-r -o output/rtlinstaller.ihx output/crtstart.rel output/installer.rel ./output/updatebuilder -i output/rtlinstaller.ihx -o output/rtlplayground_oem_upgrade.bin ../output/rtlplayground.bin Input file size: 524288 Bytes read: 524288 EOF Payload sum 1 is: 0x25100 Payload sum 2 is: 0x25100 Payload sum with header is: 0x264ec Payload sum is: 0xf8fe94 Header checksum is: 0x5a1 ``` ## (3) 使用 Ghidra 进行沙盒测试(可选) 您可以使用 ghidra 测试镜像,或者刷写真实的 Switch 硬件。有关 ghidra 的更多信息,请参见关于 [Ghidra 镜像](ghidra.md)的信息。 ## (4) 通过 Web 界面安装(软件方式) 网管交换机(OEM 固件或 RTLplaygroud 固件)可以通过 Web 界面进行升级。 非网管交换机无法通过这种方式刷写(见 5)。 转到“Firmware update”选项卡,选择正确的文件。 最后,点击“Upload File”按钮即可完成! ## (5) 直接刷写 ROM(硬件方式,也是唯一的救援方式) 如果 ROM 芯片足够大,此程序是刷写非网管交换机的唯一方法。 如果出现问题,这也是使您的设备变砖后恢复的唯一方法。 - 断开交换机的电源。 - 打开交换机。 - 将夹子连接到 flash 芯片上(红线对应 Pin 1,Pin 1 有一个圆点标记)。 - 连接 USB 刷写编程器,交换机上的电源指示灯会亮起,如果不亮请检查线缆。 - 不要惊慌,接反 GND 和 3.3V 通常不会烧毁交换机。 - 使用 IMSProg、Flashrom 或任何其他 Programmer 来检测芯片。 - 备份(DUMP)现有固件! - 擦除(BLANK)ROM! - 将固件加载到 IMSProg 中。 - 将其刷写到 ROM 芯片中。 - 断开 ROM 芯片上的夹子。 - 大功告成,准备首次启动。 ## (6) 连接串行界面(可选) 您可以将串行线缆连接到所有设备上都有的 UART 端口,设置 8N1 @ 115200 baud。 ## (7) 通电 当您给交换机通电时,设备将执行一些示例并提供一个最小化的控制台(如果已连接到串行接口),其文档可以在源代码 `rtlplayground.c` 中找到。 ## (8) Web 界面 除非您在编译前在 config.txt 中指定了 IP 地址,否则可以通过 [默认的 192.168.10.247](http://192.168.10.247) 访问 Web 界面。 ## (9) 命令行 命令行非常基础,主要用于测试目的。 以下是带有一些示例的启动日志: ``` Detecting CPU RTL8373 detected Starting up... Flash controller NIC reset rtl8372_init called RTL837X_REG_SDS_MODES: 0x00000bed phy_config_8224 called phy_config_8224 done rtl8224_phy_enable called rtl8224_phy_enable done rtl8372_init done A minimal prompt to explore the RTL8372: CPU detected: RTL8373 Clock register: 0x00001101 Register 0x7b20/RTL837X_REG_SDS_MODES: 0x00000bed Verifying PHY settings: Port State Link TxGood TxBad RxGood RxBad 1 On Down 0x00000000 0x00000000 0x00000000 0x00000000 2 On Down 0x00000000 0x00000000 0x00000000 0x00000000 3 On Down 0x00000000 0x00000000 0x00000000 0x00000000 4 On Down 0x00000000 0x00000000 0x00000000 0x00000000 5 On 2.5G 0x00000008 0x00000000 0x00000000 0x00000000 6 On Down 0x00000000 0x00000000 0x00000000 0x00000000 7 On Down 0x00000000 0x00000000 0x00000000 0x00000000 8 On Down 0x00000000 0x00000000 0x00000000 0x00000000 9 NO SFP Down 0x00000000 0x00000000 0x00000000 0x00000000 > port 5 1g CMD: port 5 1g PORT 04 1G > stat CMD: stat Port State Link TxGood TxBad RxGood RxBad 1 On Down 0x00000000 0x00000000 0x00000000 0x00000000 2 On Down 0x00000000 0x00000000 0x00000000 0x00000000 3 On Down 0x00000000 0x00000000 0x00000000 0x00000000 4 On Down 0x00000000 0x00000000 0x00000000 0x00000000 5 On 1000M 0x00000035 0x00000000 0x00000017 0x00000000 6 On Down 0x00000000 0x00000000 0x00000000 0x00000000 7 On Down 0x00000000 0x00000000 0x00000000 0x00000000 8 On Down 0x00000000 0x00000000 0x00000000 0x00000000 9 NO SFP Down 0x00000000 0x00000000 0x00000000 0x00000000 > Rate: 67 Encoding: 01 Lightron Inc. WSPXG-ES3LC-IHA 0000 > stat CMD: stat Port State Link TxGood TxBad RxGood RxBad 1 On Down 0x00000000 0x00000000 0x00000000 0x00000000 2 On Down 0x00000000 0x00000000 0x00000000 0x00000000 3 On Down 0x00000000 0x00000000 0x00000000 0x00000000 4 On Down 0x00000000 0x00000000 0x00000000 0x00000000 5 On 1000M 0x00000065 0x00000000 0x0000003b 0x00000000 6 On Down 0x00000000 0x00000000 0x00000000 0x00000000 7 On Down 0x00000000 0x00000000 0x00000000 0x00000000 8 On Down 0x00000000 0x00000000 0x00000000 0x00000000 9 SFP OK 10G 0x00000000 0x00000000 0x0000001c 0x00000000 > sfp CMD: sfp Rate: 67 Encoding: 01 Lightron Inc. WSPXG-ES3LC-IHA 0000 ``` ## (10) 高级配置 您无需使用控制台模式即可对交换机进行更深度的配置。 在编译部分,您可以直接在制作二进制固件之前写入 config.txt 文件 ``` nano config.txt ``` 如果您想在刷写完成后修改设置,请转到“System Settings”中的“Advanced Settings”选项卡 ADVANCED SETTINGS ``` ip xxx.xxx.xxx.xxx = IP adress of the switch gw yyy.yyy.yyy.yyy = IP adress of the gateway netmask zzz.zzz.zzz.zzz = Network mask of the switch port x name xxx = Name xxx the port number x port z 1g = Set 1g speed for port z igmp on/off = Turn IGMP on or off ``` [待续] 享受玩耍的乐趣! ## (11) 其他文档 以下文档提供了有关 RTL837x SoC 特定功能的更多说明: - [RTL8372/3 功能支持](doc/hardware.md) - [CPU 端口](doc/CpuPort.md) - [L2 学习](doc/l2.md) - [IGMP (IP-MC 流)](doc/igmp.md) - [SFP+ 端口](doc/sfp.md) - [Trunking(即端口聚合)](doc/trunking.md) - [VLAN](doc/vlan.md) - [修改与 Flash 替换](doc/mods.md)
标签:RTL8372, RTL8373, Web界面, 固件, 客户端加密, 嵌入式开发, 网络交换机, 网络配置, 逆向工具