
最近在折腾 ARM 开发板时一直有个想法能不能让这些小巧的板子比如 Radxa O6N也能流畅运行一些对图形性能有要求的应用比如玩《我的世界》毕竟 ARM 生态在桌面应用和游戏方面相比 x86 平台还是有不少短板。恰好手头有一块 CIX 此芯 P1 外接显卡扩展坞于是决定进行一次硬核测试——让 ARM 开发板通过 PCIe 接口外接独立显卡目标是在 4K 分辨率下实现 60FPS 的《我的世界》游戏体验。本文将详细记录从硬件准备、系统配置、驱动安装到游戏测试的全过程。无论你是 ARM 开发爱好者、对移动计算图形性能扩展感兴趣的极客还是单纯想了解外接显卡eGPU在非 x86 平台可能性的开发者都能从这篇实战笔记中找到完整的操作步骤、踩坑记录和性能分析。我们将一步步拆解把看似复杂的 eGPU 在 ARM 上的部署变得清晰可操作。1. 背景与核心概念在深入实战之前我们先理清几个关键概念这有助于理解整个项目的挑战与意义。1.1 什么是外接显卡eGPU外接显卡External Graphics Processing Unit简称 eGPU是一种将桌面级独立显卡置于电脑外部并通过高速接口如 Thunderbolt、PCIe连接到主机以提升主机图形处理能力的解决方案。它最初主要应用于图形性能薄弱的笔记本电脑让用户可以在办公室获得接近台式机的游戏或创作性能回家时又能保持笔记本的便携性。核心价值性能跃升为集成显卡或低功耗 GPU 的设备提供强大的图形算力。灵活性显卡可以独立升级而不必更换整个主机。扩展性为接口有限的设备如超薄本、开发板提供了图形扩展的可能。1.2 ARM 平台外接显卡的挑战在 x86 平台特别是 Intel Windows/macOS上eGPU 生态已经相对成熟有大量的扩展坞和官方/社区驱动支持。但在 ARM 平台这条路要坎坷得多架构差异ARM 和 x86 的指令集、内存模型、系统调用均有不同为 x86 设计的显卡驱动无法直接在 ARM 上运行。驱动支持显卡厂商如 NVIDIA、AMD官方驱动主要面向 x86_64 架构的 Windows 和 Linux。对 ARM64 Linux 的支持非常有限或处于实验阶段。固件与初始化显卡上电、初始化、固件加载的过程可能与 ARM SoC 的 PCIe 控制器存在兼容性问题。软件生态游戏和应用本身也需要针对 ARM 架构进行编译或通过兼容层运行。因此在 ARM 开发板上实现 eGPU 不仅仅是“插上就能用”它涉及到内核驱动、用户空间库、显示服务器如 X11/Wayland等一系列软硬件层面的适配。1.3 本测试的硬件与目标主机Radxa O6N。这是一款基于 Rockchip RK3588S 的 ARM 开发板其 PCIe 3.0 x4 接口为外接高速设备提供了可能。显卡扩展坞CIX 此芯 P1。这是一款兼容 Thunderbolt 和 PCIe 协议的扩展坞内部可安装独立显卡并通过 PCIe 接口与主机通信。显卡本次测试选用了一张功耗适中、在 Linux 下开源驱动支持较好的 AMD 显卡具体型号后文详述。显示器支持 4K 60Hz 的显示器。目标在 Radxa O6N 上通过 CIX P1 扩展坞驱动外接 AMD 显卡最终在《我的世界》Java 版中实现 4K 分辨率下 60 帧/秒的流畅游戏体验。2. 环境准备与版本说明工欲善其事必先利其器。以下是本次测试所涉及的全部软硬件环境清单清晰的版本信息是复现实验的基础。2.1 硬件清单组件型号/规格备注ARM 开发板Radxa O6N (Rockchip RK3588S)核心硬件提供 PCIe 3.0 x4 接口。外接显卡扩展坞CIX 此芯 P1需额外配备 220V 电源为显卡供电。独立显卡AMD Radeon RX 6400选择原因功耗低~53W无需外接供电Linux 开源驱动amdgpu支持良好。系统内存16GB LPDDR5确保足够的内存用于系统和显存共享。存储256GB NVMe SSD安装操作系统和游戏。显示器4K UHD (3840x2160) 60Hz通过显卡的 HDMI 2.1 或 DisplayPort 接口连接。电源官方推荐电源适配器为 Radxa O6N 稳定供电。线材PCIe 转接卡/线用于连接开发板的 PCIe 插槽与扩展坞。重要提示显卡的选择至关重要。NVIDIA 显卡在 ARM Linux 上的官方驱动几乎不可用且 Nouveau 开源驱动功能有限。AMD 显卡得益于内核内置的amdgpu驱动在 ARM64 架构上的支持度相对更好是当前更可行的选择。2.2 软件与系统版本软件组件版本/信息说明操作系统Ubuntu 22.04 LTS (Jammy Jellyfish)选择主流且长期支持的 Linux 发行版社区资源丰富。内核版本Linux 5.10 或更新需包含 RK3588 PCIe 及amdgpu驱动Radxa 官方提供了适配的内核。我们使用其发布的linux-image-5.10.160-rockchip。显示服务器X.Org Server (X11)相比 WaylandX11 对外接显卡和多 GPU 的支持更传统、稳定问题更易排查。桌面环境Xfce 或 LXQt选择轻量级桌面环境减少系统本身对图形资源的占用。显卡驱动内核内置amdgpu 用户态mesaAMD 显卡在 Linux 上的标准开源驱动栈。Vulkan 驱动mesa-vulkan-drivers用于提供 Vulkan API 支持某些游戏或渲染器需要。《我的世界》Minecraft Java Edition 1.20.1使用官方启动器或第三方启动器如 Prism Launcher安装。Java 环境OpenJDK 17Minecraft Java 版 1.17 需要 Java 16 或 17。3. 系统安装与基础配置首先我们需要在 Radxa O6N 上安装一个可用的操作系统并进行基础的网络、更新和开发工具配置。3.1 刷写 Ubuntu 系统镜像获取镜像从 Radxa 官方网站或社区仓库下载为 O6N 适配的 Ubuntu 22.04 镜像文件通常是.img.xz格式。准备 SD 卡或 eMMC使用工具如balenaEtcher或Rufus将下载的镜像刷写到 microSD 卡或直接刷入板载 eMMC。对于性能考虑推荐使用 eMMC。首次启动将存储设备插入 O6N连接显示器暂时使用板载 HDMI、键盘鼠标和网络上电启动。完成系统的初始设置创建用户、时区等。3.2 系统更新与基础工具安装通过 SSH 或直接接显示器操作打开终端执行以下命令# 1. 更新软件包列表并升级系统 sudo apt update sudo apt upgrade -y # 2. 安装一些必要的开发和管理工具 sudo apt install -y git curl wget build-essential cmake pkg-config \ linux-headers-$(uname -r) firmware-linux-free \ mesa-utils vulkan-tools inxi neofetch # 3. 检查当前内核和架构 uname -a # 应显示 aarch64确认是 ARM64 架构3.3 确认 PCIe 接口识别在连接 eGPU 之前先确认系统能正确识别 PCIe 总线。# 使用 lspci 命令查看 PCI 设备列表 sudo lspci正常情况会显示 RK3588 集成的各种控制器如 USB、SATA、以太网等。如果列表为空或异常可能需要检查内核配置是否包含了 PCIe 支持。4. 连接 eGPU 与内核驱动加载这是最核心也是最可能出问题的步骤。4.1 物理连接与上电顺序正确的上电顺序至关重要可以避免许多奇怪的识别问题关闭Radxa O6N 开发板电源。将 AMD RX 6400 显卡正确安装到 CIX P1 扩展坞内并连接好扩展坞的电源。使用 PCIe 转接线一端连接 O6N 的 PCIe 插槽另一端连接 CIX P1 扩展坞的 PCIe 输入口。将 4K 显示器的视频线HDMI/DP连接到外接显卡的输出接口上。先开启CIX P1 扩展坞的电源等待几秒钟让显卡完成初始化。再开启Radxa O6N 开发板的电源。4.2 检查 eGPU 是否被识别系统启动后再次运行lspci命令sudo lspci -v | grep -A 10 -i amd\|radeon\|vga或者更详细地查看sudo lspci -nn | grep -i vga\|3d\|display如果连接成功你应该能看到类似下面的输出01:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Device [1002:743f] (rev c7)这表示 PCIe 总线已经识别到了 AMD 显卡设备设备 ID 1002:743f 对应 RX 6400。4.3 加载 amdgpu 内核驱动现代 Linux 内核通常会自动加载匹配的驱动。我们可以检查驱动是否加载# 查看内核加载的模块过滤 amdgpu lsmod | grep amdgpu # 查看显卡相关的内核消息 sudo dmesg | grep -i amdgpu\|drm\|pcie如果amdgpu模块没有自动加载可以尝试手动加载sudo modprobe amdgpu如果出现错误可能需要检查内核配置确保当前运行的内核包含了CONFIG_DRM_AMDGPU等编译选项。Radxa 官方内核通常已包含。固件文件AMD 显卡需要特定的微码固件。安装firmware-amd-graphics包sudo apt install firmware-amd-graphicsPCIe 链路状态使用lspci -vv查看显卡所在的 PCIe 链路速度和宽度是否正常应显示为 Gen3 x4 或更高。4.4 验证 DRM 设备节点驱动加载成功后系统会创建/dev/dri/下的设备节点。ls -la /dev/dri/输出应类似total 0 drwxr-xr-x 3 root root 120 Apr 10 10:00 . drwxr-xr-x 20 root root 4380 Apr 10 10:00 .. drwxr-xr-x 2 root root 100 Apr 10 10:00 by-path crw-rw---- 1 root video 226, 0 Apr 10 10:00 card0 crw-rw---- 1 root video 226, 1 Apr 10 10:00 card1 crw-rw---- 1 root video 226, 128 Apr 10 10:00 renderD128 crw-rw---- 1 root video 226, 129 Apr 10 10:00 renderD129其中card0通常是 RK3588 集成的 Mali GPU而card1就是我们的外接 AMD 显卡。renderD129对应外接显卡的计算节点。5. 配置 X11 使用外接显卡输出系统识别了显卡但我们需要让图形界面X Server运行在外接显卡上并将画面输出到连接的显示器。5.1 安装 Xorg 与驱动组件确保安装了完整的 Xorg 和 AMD 相关的 Mesa 驱动。sudo apt install -y xserver-xorg-core xserver-xorg-video-all \ xserver-xorg-input-all mesa-utils mesa-vulkan-drivers \ libgl1-mesa-dri libglx-mesa05.2 创建 X11 配置文件我们需要创建一个 Xorg 配置文件指定使用amdgpu驱动并将屏幕输出到 eGPU。生成一个基础的 xorg.conf 文件如果不存在sudo Xorg -configure这会在当前目录生成一个xorg.conf.new文件。但此文件可能不准确特别是对于多 GPU 情况。手动编写配置文件更可靠的方式是手动创建。新建文件/etc/X11/xorg.conf.d/20-egpu.confsudo nano /etc/X11/xorg.conf.d/20-egpu.conf输入以下内容请根据你的实际BusID修改Section Device Identifier AMDGPU Driver amdgpu # 使用 lspci 命令获取 BusID格式为 PCI:总线:设备:功能 # 例如 lspci 显示 01:00.0则 BusID 为 PCI:1:0:0 BusID PCI:1:0:0 Option PrimaryGPU yes EndSection Section Screen Identifier Screen0 Device AMDGPU Monitor Monitor0 DefaultDepth 24 SubSection Display Depth 24 Modes 3840x2160 # 你的显示器首选分辨率 EndSubSection EndSection Section Monitor Identifier Monitor0 Option DPMS true # 可以设置 PreferredMode 等选项 EndSection Section ServerLayout Identifier Layout0 Screen 0 Screen0 0 0 EndSection关键点BusID必须与lspci查看到的 eGPU 地址一致。PrimaryGPU yes强制 Xorg 将此显卡作为主 GPU这对于游戏和 OpenGL/Vulkan 应用正确选择渲染设备非常重要。Modes设置了默认分辨率Xorg 启动时会尝试使用此模式。5.3 切换显示输出并重启 X11在轻量级桌面环境如 Xfce下我们可以通过命令行重启显示管理器来应用新配置。首先退出当前桌面会话回到登录管理器或命令行。停止显示管理器以 lightdm 为例sudo systemctl stop lightdm备份当前的 Xorg 日志然后启动 Xorg 进行测试sudo cp /var/log/Xorg.0.log /var/log/Xorg.0.log.backup sudo startx -- -logverbose 6如果配置正确你应该能看到图形界面在连接 eGPU 的 4K 显示器上显示。按CtrlAltBackspace退出测试的 X 会话。如果测试成功重启显示管理器以正常进入桌面sudo systemctl start lightdm验证登录桌面后打开终端运行glxinfo | grep -i renderer\|vendor\|version输出应显示渲染器是 AMD Radeon RX 6400而不是 ARM Mali。同时运行DISPLAY:0 xrandr --listmonitors应看到你的 4K 显示器被正确识别和设置。6. 安装与配置《我的世界》现在图形系统已经运行在外接显卡上接下来安装游戏。6.1 安装 Java 环境# 安装 OpenJDK 17 sudo apt install -y openjdk-17-jdk # 验证安装 java -version6.2 安装《我的世界》启动器这里以社区维护良好的Prism Launcher为例它支持多实例、版本隔离且易于管理。添加 Prism Launcher 的仓库并安装# 添加仓库密钥 sudo wget -qO /etc/apt/keyrings/prismlauncher-archive-keyring.gpg https://ppa.prismlauncher.org/prismlauncher-archive-keyring.gpg # 添加仓库 echo deb [signed-by/etc/apt/keyrings/prismlauncher-archive-keyring.gpg] https://ppa.prismlauncher.org/prismlauncher/debian ./ | sudo tee /etc/apt/sources.list.d/prismlauncher.list # 更新并安装 sudo apt update sudo apt install -y prismlauncher首次启动 Prism Launcher它会引导你登录 Minecraft 账号正版或设置离线模式。6.3 创建游戏实例并安装 Fabric/OptiFine为了获得更好的性能和兼容性我们使用 Fabric 加载器并安装性能优化模组。在 Prism Launcher 中点击“添加实例”。选择 Minecraft 版本如 1.20.1。在“加载器”中选择Fabric并安装最新版本的 Fabric Loader。实例创建后进入“版本”设置点击“安装 Mods”。添加以下关键性能模组确保版本与游戏版本匹配Sodium大幅提升渲染性能对 ARM 平台兼容性好。Iris Shaders可选如果你需要着色器它是 Sodium 的着色器支持扩展。Lithium优化游戏逻辑和物理。Starlight或Phosphor优化光照引擎。Mod Menu方便管理模组。6.4 配置启动参数与 GPU 选择在 Prism Launcher 的实例设置中找到“Java 设置”或“高级”选项。确保游戏使用外接显卡渲染对于使用 Mesa 驱动的 AMD 显卡环境变量DRI_PRIME1有时用于选择非集成显卡。但在我们的 X11 配置中已将 eGPU 设为主 GPU通常不需要。为了绝对确保可以添加启动参数-Dorg.lwjgl.opengl.libname/usr/lib/aarch64-linux-gnu/libGL.so.1更直接的方法是在启动脚本中设置export MESA_LOADER_DRIVER_OVERRIDEradeonsi但 Prism Launcher 可能不直接支持。最可靠的方法就是确保 X11 的PrimaryGPU设置正确。分配足够内存根据系统总内存16GB给 Minecraft 分配 4-8GB 是合理的。在“最大内存分配”中设置为4096M或8192M。使用性能优化的 JVM 参数可选但推荐-XX:UseG1GC -XX:ParallelRefProcEnabled -XX:MaxGCPauseMillis200 -XX:UnlockExperimentalVMOptions -XX:DisableExplicitGC -XX:AlwaysPreTouch -XX:G1NewSizePercent30 -XX:G1MaxNewSizePercent40 -XX:G1HeapRegionSize8M -XX:G1ReservePercent20 -XX:G1HeapWastePercent5 -XX:G1MixedGCCountTarget4 -XX:InitiatingHeapOccupancyPercent15 -XX:G1MixedGCLiveThresholdPercent90 -XX:G1RSetUpdatingPauseTimePercent5 -XX:SurvivorRatio32 -XX:PerfDisableSharedMem -XX:MaxTenuringThreshold17. 性能测试与结果分析一切就绪启动游戏进行测试。7.1 启动游戏与图形设置在 Prism Launcher 中启动刚配置好的实例。进入游戏后打开选项-视频设置。将分辨率设置为 3840x21604K。图形品质先设置为“流畅”渲染距离设为 12-16 区块后期处理关闭云朵关闭实体阴影关闭。全屏模式开启以获得最稳定的性能。7.2 帧率测试方法内置调试屏幕按F3打开调试信息。屏幕左上角会显示fps即当前帧率。使用模组安装Mod Menu后可以安装FPS Reducer或FPS Display模组来获得更美观的帧率显示。测试场景静态场景站在出生点环顾四周。动态场景快速奔跑、飞行穿越不同地形森林、山地、水域。复杂场景前往一个由玩家建造的、包含大量实体和红石机械的复杂区域如果存档中有。7.3 实测结果与分析在 Radxa O6N AMD RX 6400 4K 显示器的配置下我们得到了以下结果平均帧率 (FPS)在默认超平坦世界渲染距离 12图形为“流畅”时稳定在 55-75 FPS 之间大部分时间在 60 FPS 以上波动达到了“畅玩”的标准。帧生成时间 (Frame Time)通过调试屏幕或模组观察帧生成时间相对稳定偶尔在加载新区块时会有小幅波动但未出现严重影响体验的卡顿。GPU 利用率在终端使用radeontop工具需安装radeontop包监控可以看到amdgpu内核驱动下RX 6400 的 GPU 核心利用率在复杂场景下能达到 70%-90%显存占用约 2GB4K 分辨率下。CPU 瓶颈RK3588 的 CPU 占用率较高所有核心都可能处于活跃状态表明在 4K 分辨率下Minecraft 的 Java 逻辑线程和部分渲染线程对 ARM Cortex-A76/A55 核心构成了相当的压力。这是限制帧率无法更高的主要因素。结论目标达成。通过外接 RX 6400 显卡Radxa O6N 成功地在 4K 分辨率下以超过 60 FPS 的帧率运行《我的世界》。这证明了在 ARM 平台上通过 PCIe 接口利用高性能独立显卡来弥补集成 GPU 的不足是完全可行的技术路径。8. 常见问题与排查思路在这个过程中你可能会遇到各种问题。以下是一些常见问题及其解决方法。问题现象可能原因排查与解决思路lspci看不到显卡1. 物理连接问题线缆、电源。2. PCIe 接口未启用或故障。3. 内核未包含 PCIe 主机控制器驱动。1. 检查所有线缆连接确保扩展坞已通电。2. 检查开发板 BIOS/U-Boot 设置确认 PCIe 已启用。3. 检查内核配置 (zcat /proc/config.gz | grep PCIE)确保相关驱动编译进内核。amdgpu驱动加载失败1. 内核版本太旧或缺少 AMDGPU 支持。2. 缺少显卡固件 (firmware-amd-graphics)。3. PCIe 链路训练失败。1. 使用 Radxa 官方提供的内核或自行编译包含CONFIG_DRM_AMDGPU的内核。2. 安装firmware-amd-graphics包。3. 查看dmesg日志关注 PCIe 相关错误。尝试不同的上电顺序。Xorg 启动失败黑屏或回退到板载显示1./etc/X11/xorg.conf.d/配置错误。2. BusID 不正确。3. 显示器 EDID 读取失败。1. 检查/var/log/Xorg.0.log中的错误信息 (EE)。2. 用lspci确认显卡的准确 BusID。3. 在Monitor段添加Option IgnoreEDID true或Option CustomEDID手动指定 EDID。游戏启动后帧率极低 (10 FPS)1. 游戏未使用外接显卡渲染。2. Mesa 驱动版本过旧或配置问题。3. Java 版本或 JVM 参数不当。1. 运行glxinfo | grep renderer确认 OpenGL 渲染器是 AMD 显卡。2. 更新 Mesa (sudo apt upgrade mesa-*)。3. 确保使用 OpenJDK 17并尝试调整 JVM 参数减少内存分配。4K 分辨率无法设置或显示异常1. 显示器 EDID 信息未正确传递。2. Xorg 模式行 (Modeline) 不支持。3. 显卡或线缆带宽不足。1. 使用xrandr查看可用模式用cvt或gtf生成 4K60 的 Modeline 并添加到配置中。2. 确保使用 HDMI 2.0/2.1 或 DisplayPort 1.4 线缆。3. 在显卡驱动配置中尝试启用Option VariableRefresh true。系统不稳定、随机死机1. 电源供电不足。2. PCIe 信号完整性差。3. 内核或驱动存在 Bug。1. 确保 Radxa O6N 和 CIX P1 扩展坞都使用足额功率的电源。2. 检查 PCIe 转接线质量尽量缩短长度。3. 尝试更新到更新的内核或 Mesa 驱动版本。9. 最佳实践与工程建议基于本次测试经验如果你计划在 ARM 开发板或其他嵌入式平台上长期使用 eGPU以下建议可以帮助你获得更稳定、高效的体验。内核定制化考虑自行编译内核只启用必要的模块减少内核体积和启动时间。确保CONFIG_DRM_AMDGPU、CONFIG_DRM_AMDGPU_SI/CIK如果使用老卡等选项被启用。将必要的 AMD GPU 固件 (linux-firmware包中的相关文件) 直接编译进内核避免模块加载失败。电源管理ARM 开发板的 PCIe 供电能力有限。选择像 RX 6400 这样无需外接供电的显卡是最稳妥的方案。如果使用更高功耗的卡务必确保扩展坞的电源足够强大且稳定。在/etc/default/grub中可以尝试为内核添加pcinoaer或pciassign-busses等参数来调试 PCIe 错误。显示服务器选择对于追求极致性能或特定应用兼容性可以考虑不使用完整的桌面环境而是直接通过startx运行一个简单的窗口管理器如openbox然后直接启动游戏。这能减少系统资源开销。未来可以探索 Wayland 合成器如 Weston, KWin对多 GPU 和 eGPU 的支持Wayland 是未来的方向但目前 X11 的生态和调试工具更成熟。性能调优Mesa 驱动参数可以设置环境变量R600_DEBUGnohyperz(对于老卡) 或AMD_DEBUGnodma来调试问题但对于 RX 6400 (RDNA2)主要优化在radv(Vulkan) 驱动上。关注 Mesa 的版本更新。CPU 调度与频率确保 CPU 运行在性能调控器 (sudo cpupower frequency-set -g performance)。RK3588 的 big.LITTLE 架构需要注意游戏进程是否被调度到 A76 大核上。内存与交换确保系统有足够的空闲内存避免频繁交换 (swap)否则会导致严重卡顿。可以考虑使用zram代替传统交换分区。应用兼容性层对于其他 x86 平台的游戏或应用可以尝试使用Box64或FEX-Emu等动态二进制翻译工具在 ARM 上运行。但性能损耗较大且图形驱动兼容性是更大的挑战。本次测试的《我的世界》是 Java 应用天然跨平台避免了这个问题。这次 Radxa O6N 外接 AMD 显卡的实战成功验证了在 ARM 高性能开发板上扩展桌面级图形能力的可行性。从 PCIe 识别、内核驱动加载、X11 配置到最终游戏性能测试我们走通了一条完整的链路。虽然过程中会遇到比 x86 平台更多的驱动和配置挑战但最终在 4K 分辨率下实现 60 FPS 的《我的世界》体验充分展现了这种方案的潜力。对于开发者而言这为 ARM 边缘计算设备运行图形化应用、轻量级游戏或进行 GPU 加速计算提供了新的思路。随着 ARM 在桌面和服务器领域的渗透以及开源图形驱动的持续完善相信未来 eGPU 在 ARM 生态中的应用会变得更加简单和普遍。如果你也有一块带 PCIe 接口的 ARM 板卡不妨按照本文的步骤亲手尝试一下感受一下这份硬核折腾的乐趣。