家人们,又开始整活了,之前买了迷你龙MINILOOG PCOKET 1掌机之后一直认真玩游戏,有天上网看一个网友说迷你龙的RK3566性能比D40MAX的A133P强,实际上强不强我不知道,但是D40MAX是安卓的,我装了以太模拟器之后,也尝试着玩过一些PS2,虽然能玩的不多,比如我最喜欢的神之手就卡的不行,但是你既然说RK3566强一点,那我就真想试试在迷你龙这个机子上玩PS2了。
想法是好的,但是一上来就遇到难题了,迷你龙这个是linux的,我一直以为linux没有PS2模拟器,然后到处找迷你龙能刷的安卓系统,一直没找到,当然现在有了,那就是后话了。
后来买了老张的小金刚才知道linux也有PS2模拟器,那么都是开源掌机,那么我把老张这个移植到迷你龙不就行了,然后说干就干,复制粘贴,然后失败了,看来并不能简单的用,那么只能求助万能的AI了。
编程这些我不会啊,linux更是没有研究,让AI自己一顿研究,最开始用的kimi,屏幕刷刷的自己跑了好多内容,得出结论就是没办法,让我从头开始编译,自己从桌面式linux可用的PS2模拟器移植,也行吧,反正你自己给我鼓捣出来就行了。
第一步就是先监测迷你龙掌机的运行环境,然后迷你龙官方系统是没SSH的,kimi就建议我现在内存卡上弄,然后再插上机子测试,每修改一次就插拔一次内存卡,我心想这么搞,卡槽早晚要坏,我就问kimi,你就不能自己编一个SSH么,然后kimi好像恍然大悟一样,通过研究leaf启动的特点,发现可以通过内存卡直接启动服务,自己就鼓捣了一套类似SSH的东西,通过SOCAT来连接的,具体我也看不懂,反正是可以无线调试迷你龙掌机了,幸亏我没听它的弄什么内存卡插拔,有时候AI还是要逼一逼才能进步。
kimi可以连上迷你龙之后,就跑了很多测试,测试迷你龙系统的环境什么的,最后给我的结论就是没办法,这也不行那也不行的,像极了我上班的状态,我就提示它通过PORTS来弄,既然PORTS能运行这么多移植游戏,那运行个PS2模拟器有多难呢?
kimi马上做了一个PORST测试应用,大概就是实现在迷你龙主机上显示出方块,搞清楚掌机的渲染方式之类的,也是折腾了很久,什么SDL什么的,看不懂,反正最后是搞清楚了显示和按键之类的,到这一步,已经实现按A出现方块,按B方块消失之类的小功能,我估摸着让kimi搞个游戏也不是不行。
正想着继续,kimi提示我额度用完了,不能继续了,这真是绝了,然后我就转向用豆包,原来我是没用过豆包的,没啥,就是单纯不喜欢字节系的东西,那为啥我不用deepseek,不好意思,我一个股民实在不喜欢deepseek。
又是花了很长时间跟豆包沟通了一轮,让它明白目前是个什么情况,感觉AI编程对提升编程能力没啥用,但是提升沟通能力非常有用,有时候这些AI真的听不懂你在说什么,得换它们听得懂的方式说才行。
下一步就是电脑这里配置linux的编程环境,我直接用的win10自带的wsl,还挺好用的,然后就开始git源码,git了一晚上,本来git就被墙了,很多源都git不下来,好不容易git下来了,也不知道豆包自己弄了啥,一会又说缺这个包,一会又说缺这个SO,一会又说缺这个编译器,反正叫我弄啥我就弄啥,也是补了一晚上,终于是补齐了吧,然后就开始第一次编译。
一开始我感觉也就30M的小小程序,编译应该用不了多久,结果豆包问了一下我电脑的配置,告诉我预计需要4个小时,离了大谱,可能是因为我电脑实在太垃圾了,这是整个项目最地狱的开始。
怎么地狱能,就是第一次跑了三个小时,然后报错,跟我说缺这个,改好之后又跑2小时,又报错,又改,就是每次修改都是几个小时,最接近的一次是跑了4个小时,差不多成功了,又报错,就这样在报错和修改中,花了好多天时间。
最后终于跑通了,没有报错了,准备开香槟的时候,传到迷你龙掌机发现没法运行,豆包自己也懵逼了,怎么什么都没错,为什么运行不了,又研究了我机子上安装的其他PORTS,又在网上搜索了很久,然后豆包发现是迷你龙掌机系统里的某个东西版本太低,我们用的这个编译器的版本太高,很多东西不兼容之类的,反正我也看不太懂。
然后就尝试换编译器,也换了好几个,换完又是重跑4个小时,都没报错,但是就是运行不了,然后豆包就让我放弃,表示这个项目不可行,再弄下去也是浪费时间,不如买台安卓系统的掌机。
前面kimi也是,现在豆包也是,我真是服了这帮老6了,动不动就放弃,我一度怀疑屏幕对面不是AI,是哪个真人在跟我对话,然后我说不行,要继续弄。然后豆包就框框的又开始了一顿思考,研究了很久发现linux桌面端的PS2模拟器其实有很多分支,又一个老一点的分支有可能能用,于是我们就试着git这个版本来研究。
感觉一切又开始有进展了,结果这个时候豆包跟失忆了一样,完全不记得前面修改过的代码,开始答非所问了,不知道是对话量达到上限了还是怎样,就是直接傻掉了,就好像这几天没发生过一样。
这给我气的,电脑没差点砸了,想退回去用kimi还是提示没额度,也不知道什么时候才恢复免费额度,实在无奈,只能转向deepseek,还别说,deepseek是真的强,我稍微把前面的进度复述一下,它在看了一些源码,就顺利继续了,而且反应极快,尤其是深度思考的时候,平时都是显示中文的思考过程,如果出现的是英文,那简直有如神助,懂的都懂。
后面折腾了几天,终于是跑通了,连deepseek的语气都有一种非常喜悦的感觉,甚至称这是一个里程碑式的成功,都建议我上git单独给这个Linux版本的PS2模拟器开一个分支了。
跑通之后也还有很多问题,一个是屏幕旋转方向不对,二个是按键不能识别,三个就是迷你龙MINILOOG PCOKET 1插两张内存卡的时候,内存卡的挂载点经常交换,每次重启都会导致卡1变成卡2,这也导致中间总是出错,后来搞了好久才弄明白,解决完这些问题之后,就是第一次启动PS2的bios,启动成功后总体的功能总算就完工了。
后面就是改了一下UI,因为原版的是适配桌面端的,字都很小,其实改了也蛮久,本身源码就很怪,改个字体大小都分很多个地方,但是明明就是同一个界面,还有就是AI有点不太理解人类的审美,有时候改出来又不是我想要的效果。
界面这块改好之后就是功能上的优化,我增加了自动把PS2游戏生成POSRT链接的功能,这样就可以直接从POSRT菜单启动PS2游戏,然后就是封面下载的功能,虽然本身就有,但是不够只能,我做了一个本地图片兜底的策略,还有就是做了个汉化,本身原版汉化不是100%,我这次将汉化做到100%,虽然都是AI自己翻译,不过我感觉都还挺准确,再就是修了一些小BUG,总算是能到发版的阶段了。
至于性能也就这样了,PS2离谱的架构导致只吃CPU,但是RK3566性能又捉急,所以能玩的PS2游戏有限,大部分都是卡卡的,我感觉比A133P的没强多少,不过也算是体验了一次AI编程的乐趣了,尽管大多数时候都是复制粘贴,不过多反问AI确实有起效,AI最后的结论也是很搞笑,虽然我们这个项目可能没啥用,但是积累了宝贵的开发经验,这才是最有价值的。
最后就是项目总结:
项目从 2026-10-17 启动,到 2026-10-31 打包发版,跨 15 个自然日,实际有效开发约 8 天。
| 阶段 | 时间 | 主要实现 / 里程碑 |
|---|---|---|
| 1. 项目启动与交叉编译准备 | 2026-10-17 | 建立 ~/ps2-port/ 目录;确定目标 ARMSX2 → RK3566 / Leaf CFW;准备 aarch64 工具链、CMake、Ninja;逐个交叉编译 zlib / libpng / libjpeg-turbo / zstd / lz4 / libwebp / SDL3 / FreeType / plutovg / plutosvg;卡在 Shaderc 依赖 |
| 2. 首次 CMake 配置与编译 | 2026-10-18 凌晨—下午 | CMake 配置成功,确认 ARM64 JIT 全部启用(EE / IOP / VU0 / VU1);用 Clang 21 + LLD 编译出 armsx2-sdl(43MB,strip 后 14MB);解决 GCC → Clang 切换、libshaderc_combined.a 符号缺失、-lcurl 链接失败 |
| 3. GLIBC 兼容性攻坚 | 2026-10-18 晚间—10-19 凌晨 | 发现 WSL GLIBC 2.43 与设备 2.38 不兼容;放弃 shim / 字节替换;用 debootstrap 构建 Debian 12 sysroot(GLIBC 2.36);修复 usr-merge、libc.so ld script、15 个绝对路径 symlink;重编 SDL3 / plutovg / plutosvg / libcurl,GLIBC 需求降到 ≤2.38 |
| 4. Debian 12 重编与设备首次部署 | 2026-10-23 晚间—10-24 凌晨 | ARMSX2 用 Debian 12 重编成功(GLIBC 2.34,14MB);设备部署后 shaderc 加载失败;源码重编 shaderc,三处硬编码 VISIBILITY_PRESET hidden 改 default,43 个 UND 零 UNRESOLVED;部署 4 个新库(无 shim、无 LD_PRELOAD);停 weston 独占 DRM;PS2 BIOS 启动成功,进入系统菜单 |
| 5. 基础体验修复 | 2026-10-24 全天 | 屏幕旋转彻底修复(rotate_pixel 交换 Rot90/Rot270);菜单键退出修复(InitializeFullscreenUI 短路 + 主循环 HasActiveWindow);完成 launch.sh(停 weston → 跑 ARMSX2 → trap restore);PORTS 菜单集成;挂载点自动探测;游戏入口自动生成 |
| 6. PORTS 全自动管理 + 图标机制 | 2026-10-24 深夜—10-25 凌晨 | [PS2]xxx.sh 自动生成/删除;数据库 game_list 同步;PORTS/images/<基名>.png 图标机制确认;倒计时 5 秒 → 1 秒;PORTS 自包含部署(不依赖 /userdata) |
| 7. UI / 汉化 / 封面 / 电源键深度定制 | 2026-10-25 全天(多轮) | 中文字体加载(io.FontDefault);多 context 汉化 2537 条(FullscreenUI / Pad / Hotkeys / USB 等 13 个 context);设置界面 UI 优化(标签栏、summary、value 同行);大图模式 + Footer;About 弹窗重写;封面下载器 VKB 虚拟键盘(abc/ABC/符号三模式);封面下载 SSL 修复 + 本地兜底;电源键快速息屏(EVIOCGRAB + 游戏暂停 + 吞输入) |
| 8. 稳定性修复 | 2026-10-30 | 带 ISO 直接启动息屏死机修复(watcher 补 s_screen_off);自动下载封面 2 次立即重试;中文字体挂载点适配(优先 EmuFolders::AppRoot);TLS error 35 排查闭环:确认 ghfast.top TCP 不可达,换 gh-proxy.com + 强制 IPv4 + cacert.pem 内置,封面下载在线成功 |
| 9. 游戏列表 UI 放大 + 打包发版 | 2026-10-31 | PORTS 图标 ARMSX2.png(256×256)部署;List 模式左边列 1.5 倍放大(条目 / 图标 / 文字);标题 + 副标题超长循环滚动(RenderTextClipped pos 偏移 + fmod);Grid 模式列数 5 → 4,图片放大 31%,标题字号 ×1.3;清理 unused warning;组装 ARMSX2-port.tar.gz(34.5MB,嵌套结构),含 ARMSX2.sh + ARMSX2/,准备发版 |
累计成果速览
| 类别 | 成果 |
|---|---|
| 交叉编译 | 15+ 依赖,Debian 12 sysroot(GLIBC 2.36) |
| 核心编译 | ARMSX2 GLIBC 2.34,14MB,ARM64 JIT 全启用 |
| 设备启动 | PS2 BIOS → 系统菜单,Vulkan GS 正常 |
| 汉化 | 13 个 context,2537 条 |
| 封面 | 手动 + 自动 + 本地兜底 + SSL 内置 + IPRESOLVE_V4 |
| 电源键 | 瞬时息屏 + 游戏暂停 + 吞输入,零系统污染 |
| 虚拟键盘 | 三模式,方向键 / ABXY / L1R1 全映射 |
| 游戏列表 | List 1.5x + 标题/副标题循环滚动;Grid 4 列 + 图片放大 31% |
| 分发 | ARMSX2-port.tar.gz 34.5MB,嵌套结构,解压到 PORTS/ 即用 |
最后是下载链接:
链接: https://pan.baidu.com/s/1pZYH32saTVWHtrF42mvdHQ?pwd=6666
提取码: 6666
下面是演示视频: