<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Switch on Time Friend</title><link>https://time-friend.com/zh/tags/switch/</link><description>Recent content in Switch on Time Friend</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Thu, 24 Sep 2026 14:00:00 +0000</lastBuildDate><atom:link href="https://time-friend.com/zh/tags/switch/index.xml" rel="self" type="application/rss+xml"/><item><title>骁龙 8 Gen 2 掌机跑 Switch 模拟器: 内存布局越大越不稳, 以及显存优化实测</title><link>https://time-friend.com/zh/archive/switch-emulation-snapdragon-tuning/</link><pubDate>Thu, 24 Sep 2026 14:00:00 +0000</pubDate><guid>https://time-friend.com/zh/archive/switch-emulation-snapdragon-tuning/</guid><description>&lt;p&gt;我的 AYN Thor 掌机用的是骁龙 8 Gen 2, 平时靠 Eden 玩 Switch。有一段时间《王国之泪》总是&amp;quot;退后台&amp;quot;或者干脆闪退, 稳定版和 nightly 两个构建都一样。我第一反应是内存不够——掌机有 15GB 内存, 那 Eden 的内存布局就该往大了给, 于是我把它从默认调到最高的 8GB。结果问题变得更频繁了。&lt;/p&gt;
&lt;p&gt;这篇就是从这个反直觉的结果往回查的过程。&lt;/p&gt;
&lt;h2 id="退后台和闪退-是两个独立的问题"&gt;退后台和闪退, 是两个独立的问题&lt;/h2&gt;
&lt;p&gt;一开始我把两个现象当成一件事, 后来看日志才发现根因完全不同。判断办法很简单: 看 Eden 进程还在不在。退后台的时候进程活着, 只是它的 &lt;code&gt;EmulationActivity&lt;/code&gt; 被停掉了; 闪退的时候进程直接没了, 留下 tombstone。&lt;/p&gt;


&lt;div class="mermaid-wrap"&gt;
&lt;pre class="mermaid" role="img" aria-label="Mermaid diagram"&gt;flowchart TB
 A[&amp;#34;游戏退后台或闪退&amp;#34;] --&amp;gt; B{&amp;#34;Eden 进程还在吗&amp;#34;}
 B --&amp;gt;|&amp;#34;进程在, 被顶到后台&amp;#34;| C[&amp;#34;lmkd 内存压力&amp;lt;br/&amp;gt;杀掉 iiSU 桌面&amp;lt;br/&amp;gt;桌面重启抢占前台&amp;#34;]
 B --&amp;gt;|&amp;#34;进程消失&amp;#34;| D[&amp;#34;GPU 管线崩溃&amp;lt;br/&amp;gt;着色器缓存与当前驱动不匹配&amp;#34;]
 C --&amp;gt; E[&amp;#34;内存布局 8GB → 6GB → 4GB&amp;#34;]
 D --&amp;gt; F[&amp;#34;删除驱动专属的着色器缓存&amp;lt;br/&amp;gt;确认加载的是 Turnip&amp;#34;]&lt;/pre&gt;
&lt;/div&gt;


&lt;script type="module"&gt;
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs';
mermaid.initialize({
 startOnLoad: false,
 theme: 'base',
 themeVariables: {
 background: '#1d1f21',
 primaryColor: '#282c34',
 primaryBorderColor: '#3e4147',
 primaryTextColor: '#c9cacc',
 lineColor: '#5a5f66',
 edgeLabelBackground: '#1d1f21'
 }
});
mermaid.run({ querySelector: 'pre.mermaid' });
&lt;/script&gt;


&lt;p&gt;分开之后, 每个问题都有了明确的证据链。&lt;/p&gt;</description></item><item><title>Eden 稳定版和 nightly 的存档为什么对不上: 用户档案 ID 与 UID 字节逆序</title><link>https://time-friend.com/zh/archive/eden-nightly-save-migration-profile-id/</link><pubDate>Sun, 20 Sep 2026 10:00:00 +0000</pubDate><guid>https://time-friend.com/zh/archive/eden-nightly-save-migration-profile-id/</guid><description>&lt;p&gt;我把 Eden 的主力版本从稳定版换成了 nightly。它和稳定版包名不同, 可以直接共存, 游戏也都能正常打开。但进去之后, 之前所有的存档一个都读不到, 每个游戏都像第一次玩。我第一反应是 nightly 把数据目录清了, 或者存档被覆盖了, 赶紧去翻文件。&lt;/p&gt;
&lt;p&gt;文件都在。少的不是存档, 是 nightly 去错了地方找。&lt;/p&gt;
&lt;h2 id="两个构建共用游戏-但不共用用户档案"&gt;两个构建共用游戏, 但不共用用户档案&lt;/h2&gt;
&lt;p&gt;Eden 把 Switch 的存档放在数据目录的 &lt;code&gt;nand/user/save/&lt;/code&gt; 下。这条路径不是只有一层, 它的结构大致是 &lt;code&gt;nand/user/save/0000000000000000/&amp;lt;用户档案ID&amp;gt;/&amp;lt;TitleID&amp;gt;/&lt;/code&gt;, 中间那层是&lt;strong&gt;用户档案&lt;/strong&gt;。稳定版和 nightly 是两个独立安装的应用, 各自的数据目录分开, 更关键的是: &lt;strong&gt;nightly 首次启动时会自己生成一个新的用户档案 ID&lt;/strong&gt;, 和稳定版那个没有任何关系。&lt;/p&gt;
&lt;p&gt;我这边稳定版的活动档案是 &lt;code&gt;D2AE7D815565D5C93F432C7C74A7DD6A&lt;/code&gt;, nightly 自动生成的是 &lt;code&gt;173CB8FB1F16348366B4CABB88A445D9&lt;/code&gt;。存档文件都在 nightly 的数据目录里(从稳定版拷过来之后), 但 nightly 只会去它自己那个活动档案目录里找游戏存档, 于是看不到。&lt;/p&gt;
&lt;h2 id="存档目录名从哪来"&gt;存档目录名从哪来&lt;/h2&gt;
&lt;p&gt;那个看起来像随机十六进制串的档案目录名, 其实不是随机的。日志里能观察到, 它来自用户档案的 UID, 并且是 UID 的&lt;strong&gt;字节逆序&lt;/strong&gt;排列——同一段身份数据, 换个字节序就成了目录名。两个构建只要各自生成了新 UID, 目录名就必然不同, 这也是为什么换构建、甚至 nightly 自己重新初始化之后, 存档会&amp;quot;对不上&amp;quot;。理解了这一点, 就不会再把它当成文件损坏。&lt;/p&gt;
&lt;h2 id="为什么直接拷存档会失效"&gt;为什么直接拷存档会失效&lt;/h2&gt;
&lt;p&gt;最容易踩的坑是: 把稳定版的 &lt;code&gt;save/&lt;/code&gt; 整个拷到 nightly 的 &lt;code&gt;save/&lt;/code&gt;, 以为就完事了。结果 nightly 里依然读不到。原因是稳定版拷贝过去的目录名是 &lt;code&gt;D2AE7D...&lt;/code&gt;, 而 nightly 的活动档案是 &lt;code&gt;173CB8FB...&lt;/code&gt;, 内容进了库, 但没进 nightly 真正会查的那个抽屉。所以迁移必须做&lt;strong&gt;两段覆盖&lt;/strong&gt;: 先把稳定版的存档根整体带过来, 再把稳定版活动档案里的内容, 再拷进 nightly 的活动档案目录。&lt;/p&gt;</description></item><item><title>从 emuMMC 里提取 Switch 存档: 非标准 AES-XTS、FAT32 与 DISF 的实现</title><link>https://time-friend.com/zh/archive/switch-emummc-save-extraction/</link><pubDate>Wed, 16 Sep 2026 10:00:00 +0000</pubDate><guid>https://time-friend.com/zh/archive/switch-emummc-save-extraction/</guid><description>&lt;p&gt;那台破解过的 Switch 已经不在我手上了, 只剩一张 512GB 的 SD 卡。我想做的事很具体: 把当年玩出来的游戏存档救出来, 导进 Android 上的 Eden(一个 yuzu 分支), 接着玩下去。&lt;/p&gt;
&lt;p&gt;我第一反应是插上读卡器去翻 &lt;code&gt;Nintendo/save/&lt;/code&gt;。里面确实有存档, 但只有两个, 文件名是 &lt;code&gt;8000000000000000&lt;/code&gt; 和 &lt;code&gt;8000000000000124&lt;/code&gt;, 都是 NAX0 加密的系统存档, 和游戏进度无关。整张卡能看到的目录翻了一遍, 找不到任何一处像游戏存档。这个结果很反直觉: 存档明明是这台机器产生的, 怎么会不在卡上。&lt;/p&gt;
&lt;p&gt;任天堂的说法是, 游戏存档只存在主机的内部存储 eMMC 里, 不能复制到 microSD; SD 卡上只有游戏本体、更新、DLC、截图和系统存档。那破解机的存档在哪——emuMMC。&lt;/p&gt;
&lt;h2 id="存档不在-sd-卡表面-而在-emummc-镜像里"&gt;存档不在 SD 卡表面, 而在 emuMMC 镜像里&lt;/h2&gt;
&lt;p&gt;破解常用&amp;quot;虚拟系统&amp;quot;emuMMC: 把主机整块 eMMC 完整复制到 SD 卡, 开机时引导到这份副本。于是卡里 &lt;code&gt;emuMMC/SD00/eMMC/&lt;/code&gt; 下的 &lt;code&gt;00&lt;/code&gt; 到 &lt;code&gt;07&lt;/code&gt; 不是八个文件, 是同一块内部存储被 4GB 切开的分片(受 FAT 单文件上限所迫), 旁边还有 &lt;code&gt;BOOT0&lt;/code&gt;、&lt;code&gt;BOOT1&lt;/code&gt; 两个引导分区。这张 SD 卡里因此藏着一整台 Switch 的内部存储, 大约 30GB, 游戏存档就在镜像的 &lt;code&gt;USER&lt;/code&gt; 分区。&lt;/p&gt;</description></item></channel></rss>