>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
C

如何在 Arm 和 RISC-V 处理器上运行重型 x86 游戏和软件

想象一下,你购买了一台全新的 Arm 单板计算机或一台强大的 RISC-V 服务器,安装了 Linux,然后……撞墙了。你最喜欢的 Steam 游戏、专有工作软件,或者老旧的 Wine 都无法运行。它们是为 x86_64 编译的,但你使用的是完全不同的架构。通常人们在这种情况下会建议使用 QEMU,但通过它来玩游戏是一种相当难忘的体验:延迟严重到你宁愿直接关掉它。

box64 项目优雅地解决了这个问题。它不仅仅是一个模拟器,而是一个可以向被模拟的应用程序"投喂"系统原生库的中间层。

Official logo

这个模拟器有什么特别之处

大多数模拟器都试图忠实地翻译每一条 CPU 指令。这很可靠,但速度非常慢。box64 的开发者( known as ptitSeb)采取了不同的方法。

当一个 x86_64 程序调用系统函数时——例如,想通过 OpenGL 渲染图形或通过 libc 分配内存——box64 不会在虚拟环境中模拟这个调用。相反,它直接将调用重定向到你设备的原生库(Arm64 或 RISC-V)。

因此,重型计算任务落在"原生"硬件的肩上,只有应用程序的逻辑被模拟。这带来了巨大的速度提升。根据作者的基准测试,结合动态重编译器(DynaRec)的组合比常规解释器快 5-10 倍。

你可以运行什么

该项目的兼容性列表非常庞大。首先,它面向游戏玩家和使用专业软件的用户。

  1. Steam 游戏。是的,你可以在树莓派 4 或 5 上运行从未移植到 Arm 的游戏。
  2. Wine 和 Proton。这为运行 Windows 应用程序开辟了道路。如果你同时拥有 box64 和它的"小兄弟"box86(用于 32 位程序),你几乎可以让任何软件工作。
  3. Unity 游戏。这里有一个细节:它们通常需要较新的 OpenGL。在某些开发板上,你需要使用环境变量来"欺骗"驱动程序,让游戏能够运行。

有趣的是,该项目甚至支持 LoongArch 等特定架构。很明显,社区在硬件方面给予了积极帮助:致谢列表包括 Adlink、Pine64,甚至还有深度科技开发团队。

实际使用中它是如何工作的

使用这个工具出人意料地简单。如果你已经编译了项目(仓库中的说明很详细,虽然需要安装一堆依赖项),启动起来是这样的:

box64 ./my_x86_64_program

如果你需要运行整个安装脚本(例如来自 GOG 的),它通过 uname -m 检查架构,你可以这样做:

box64 script.sh

在内部,box64 会伪造系统响应,脚本会以为它正在普通的 x86 处理器上运行。

对于不想每次都输入命令的人,有 box64-bash——一个熟悉的 shell,其中所有可执行文件都会自动被模拟器接管。

细节和陷阱

不要指望所有东西都能"开箱即用"并获得完美的帧率。

首先是缓存。第一次运行时,box64 会生成优化代码并保存到 ~/.cache/box64。这会加快后续运行速度,但可能"吃掉"多达 2 GB 的磁盘空间。如果空间紧张,你需要通过配置来限制这种行为。

其次是图形。在树莓派上,你经常需要设置变通方案,比如:

MESA_GL_VERSION_OVERRIDE=3.2 BOX64_DYNAREC_STRONGMEM=1 box64 ./game

这是为了避免因 x86 和 Arm 处理内存方式的差异而导致的冻结。

第三,32 位应用程序。Box64 只能处理 64 位二进制文件。如果你需要运行老游戏,就必须安装 box86。box32 的工作目前正在进行中,但作者坦诚地表示该项目仍处于实验阶段。

值得一试吗

如果你是一名想要切换到 Arm Linux 笔记本电脑的开发者,或者是一个拥有 RISC-V 开发板的爱好者——绝对值得一试。它是这个领域中最活跃、性能最高的项目。

Box64 并不试图取代完整的虚拟化,它只是让你能够在原本不应该存在的地方使用熟悉的软件。该项目用 C 语言编写,非常紧凑,配置灵活。

当然,文档分散在不同的文件中,你得翻阅手册来配置 Wine,但结果是值得的。当本应为强大台式机设计的软件能在几十美元的小开发板上运行时,感觉就像一点小魔法。

你可以在官方仓库 ptitSeb/box64 查看源代码和构建说明。还有游戏兼容性列表的链接,几乎每天都在更新。

相关项目