Atmosphère 定制固件架构解析:Nintendo Switch 多层组件体系与实现原理
2026/9/13 18:06:07 网站建设 项目流程

Atmosphère 定制固件架构解析:Nintendo Switch 多层组件体系与实现原理

【免费下载链接】AtmosphereAtmosphère is a work-in-progress customized firmware for the Nintendo Switch.项目地址: https://gitcode.com/GitHub_Trending/at/Atmosphere

Atmosphère 是一个面向 Nintendo Switch 的进行中(work-in-progress)定制固件(Custom Firmware,CFW)项目,其核心设计理念是"分层替换/修改":用多层组件分别接管系统引导、可信执行环境、内核、系统模块与应用层等不同层级。本文以仓库根目录 README.md 为骨架,结合 docs/main.md 与各组件文档、对应源码目录,系统梳理 Atmosphère 的整体架构、每个组件的职责边界、关键实现细节以及许可证约定,帮助读者快速建立对该项目源码组织方式的完整认知。

项目定位与分层设计哲学

Atmosphère is a work-in-progress customized firmware for the Nintendo Switch.

这是 README 对项目的唯一一句话定位:一个仍在持续开发中的 Nintendo Switch 定制固件。与"整体替换"的固件思路不同,Atmosphère 采用多层协同的架构,每一层负责替换或修改主机系统中不同层级的组件。docs 文档将这种设计与地球大气层的分层结构做了类比——fusée、exosphère、thermosphère、mesosphère、stratosphère、troposphère 六个核心组件由内向外逐层命名,含义上对应从最底层的引导加载到最顶层的应用层定制。

从源码仓库结构可以直观验证这一分层设计:

  • fusee/ —— 一级引导加载器
  • exosphere/ —— 定制 TrustZone / Secure Monitor
  • thermosphere/ —— EL2 虚拟化支持
  • mesosphere/ —— 内核重实现
  • stratosphere/ —— 系统模块层
  • troposphere/ —— 应用层定制

总体架构:六个核心组件与两个辅助组件

按照 docs/main.md 的划分,Atmosphère 提供六个核心组件,并附带两个辅助组件(emummc 与 libraries)。下表汇总了各组件对应的系统层级与核心职责:

组件对应系统层级核心职责
fuséePackage1loader / NX Bootloader一级引导加载器,加载并校验 stage 2 与 package2,按需打补丁
exosphèreTrustZone / Secure Monitor(EL3)定制可信执行环境,负责敏感密码学运算与 CPU 电源管理
thermosphèreEL2(Horizon OS 未使用的虚拟化层)EmuNAND 支持,即虚拟化/重定向 NAND 镜像
mesosphèreEL1 内核Horizon 内核的定制重实现
stratosphère系统模块(sysmodule)层内核扩展型与加载器重实现型自定义系统模块
troposphère应用层Horizon OS 应用级补丁,实现实用 CFW 功能

辅助组件方面,emummc 提供 eMMC 存储模拟能力,libraries 则是一组面向 Nintendo Switch 操作系统开发的公共库。此外 docs/main.md 还列出了两个特色功能文档(Cheats、Configurations)以及 构建指南、路线图、更新日志 和 FAQ,共同构成完整的项目文档体系。

fusée:一级引导加载器

职责与启动链路

fusée 是 Atmosphère 中最先在硬件上运行的代码。根据 fusée 组件文档,它被分发为一个独立 payload,通过滥用 CVE-2018-6242 漏洞经 RCM(Recovery Mode)启动,负责:

  • Nintendo Switch 所需的全部底层硬件初始化;
  • 搭建密码系统(cryptosystem);
  • 挂载/模拟 eMMC;
  • 注入/打补丁系统模块;
  • 启动 exosphère 组件。

README 进一步明确:fusée 负责加载并校验 stage 2(自定义 TrustZone)以及 package2(Kernel/FIRM 系统模块),并按需对它们打补丁,完整替代了 Package1loader/NX Bootloader 的全部功能

从源码看,fusee/program/source/ 目录完整承载了这些职责:fusee_main.cpp为程序入口,围绕它还有fusee_package2.cpp(package2 解析)、fusee_emummc.cpp(eMMC/emuMMC 挂载)、fusee_key_derivation.cpp(密钥派生)、fusee_secmon_sync.cpp(与 Secure Monitor 同步)、fusee_stratosphere.cpp(stratosphère 注入)、fusee_overlay_manager.cpp(overlay 管理)以及fusee_setup_horizon.cpp(Horizon 环境搭建)等模块,与文档描述一一对应。

Sept:运行时密钥派生支持

README 在 fusée 条目下特别标注了Sept子组件:它是用于在7.0.0 系统版本上启用运行时密钥派生(runtime key derivation)的 payload。这体现了 Atmosphère 对不同系统版本采取差异化引导策略的工程实践。

exosphère:定制 TrustZone / Secure Monitor

定位与运行层级

exosphère 是 Horizon OS Secure Monitor 的定制重实现。Secure Monitor 与 Arm TrustZone 遵循相同设计原则,两个术语在该语境下可互换使用。它运行在主处理器可用的最高特权级EL3,负责系统所需的全部敏感密码学运算以及每个 CPU 的电源管理(详见 exosphère 组件文档)。

从源码结构看,exosphere/program/source/smc/ 目录集中存放 Secure Monitor 调用(SMC)实现,配合secmon_setup.cppsecmon_key_storage.cppsecmon_page_mapper.cppsecmon_user_power_management.cpp等文件,构成完整的可信执行环境。

自定义 SMC 扩展

exosphère 通过提供自定义 SMC(Secure Monitor Call)扩展了原始 Secure Monitor 设计,以满足 homebrew 生态的需求。当前提供三个自定义 SMC:

uint32_t smc_ams_iram_copy(smc_args_t *args); uint32_t smc_ams_write_address(smc_args_t *args); uint32_t smc_ams_get_emummc_config(smc_args_t *args);

smc_ams_iram_copy:实现 DRAM 与 IRAM 之间最多一页的拷贝,参数约定如下:

参数含义与约束
args->X[1]DRAM 地址(由内核翻译),必须 4 字节对齐
args->X[2]IRAM 地址,必须 4 字节对齐
args->X[3]大小,必须 ≤ 0x1000 且 4 字节对齐
args->X[4]0 表示读,1 表示写

smc_ams_write_address:实现对 DRAM 页的写入:

参数含义与约束
args->X[1]虚拟地址,必须按 size 字节对齐且 EL0 可读
args->X[2]写入的值
args->X[3]大小,必须为 1、2、4 或 8

smc_ams_get_emummc_config:检索当前 emummc 上下文的配置:

参数含义与约束
args->X[1]MMC id,必须按 size 字节对齐且 EL0 可读
args->X[2]输出指针(用于 filebased 与 nintendo dir 的路径),至少 0x100 字节

自定义 CONFIGITEM 配置项

除了新增 SMC,exosphère 还扩展了 Horizon OS 提供的两个用于读取/设置配置项的 SMC,提供以下自定义配置项:

CONFIGITEM_EXOSPHERE_VERSION = 65000, /* 当前 exosphere 版本信息 */ CONFIGITEM_NEEDS_REBOOT = 65001, /* 借助次级漏洞,经 warmboot 进入 RCM 或指定 payload 的重启 */ CONFIGITEM_NEEDS_SHUTDOWN = 65002, /* 借助次级漏洞,经 warmboot 实现关机 */ CONFIGITEM_EXOSPHERE_VERHASH = 65003, /* exosphere 当前 git commit hash */ CONFIGITEM_HAS_RCM_BUG_PATCH = 65004, /* 设备是否已修补 CVE-2018-6242 */ CONFIGITEM_SHOULD_BLANK_PRODINFO = 65005, /* 是否模拟"清空"的 PRODINFO,详见配置文档 */ CONFIGITEM_ALLOW_CAL_WRITES = 65006, /* 是否允许写入校准分区 */

其中CONFIGITEM_SHOULD_BLANK_PRODINFO与隐私保护相关——它决定是否向系统模拟一个"已清空"的 PRODINFO,具体机制可参考 docs/features/configurations.md;CONFIGITEM_NEEDS_REBOOT/CONFIGITEM_NEEDS_SHUTDOWN则利用次级漏洞从 warm boot 路径获得代码执行能力,实现重启或关机控制。

内置小 payload:lp0fw、sc7fw、rebootstub

exosphère 还内置了三个小型 payload(详见 exosphere 组件文档):

  • lp0fw:负责 warm boot 时唤醒系统;
  • sc7fw:负责 warm boot 时让系统进入休眠;
  • rebootstub:提供将系统重启到任意所选 payload 的功能。

这三个组件在仓库中均有独立子工程:exosphere/program/sc7fw/、exosphere/program/rebootstub/。此外 exosphere 目录还包含mariko_fatal(Mariko 机型错误处理显示)、loader_stub(解压器存根)、sdmmc_test(SDMMC 测试)等工程,以及warmboot/(warm boot 实现,如warmboot_dram.cppwarmboot_cpu_cluster.cpp)等辅助代码。

thermosphère:EL2 虚拟化层

thermosphère 组件文档 将其定位为一个进行中的 hypervisor 实现:目标是在 Horizon OS 未使用的EL2 层级提供功能。这与 README 中"EL2 EmuNAND 支持,即备份并使用虚拟化/重定向的 NAND 镜像"的描述相呼应——在 EL2 引入虚拟化是 EmuNAND 能力在更底层实现的基础。

源码侧,thermosphere/src/ 是一个精悍的小型工程,仅包含main.cexceptions.cstart.sregs.h等文件,符合"hypervisor 雏形"的早期状态。

mesosphère:内核定制重实现

mesosphère 组件文档 指出,Horizon OS 的内核遵循微内核(microkernel)设计原则,运行在EL1层级,当前被细分为加载器(kernel_ldr)与主内核代码两部分。

仓库结构印证了这一划分:

  • mesosphere/kernel_ldr/:内核加载器,入口为 kern_init_loader.cpp,负责把主内核装载到 EL1;
  • mesosphere/kernel/:主内核实现,入口为 kern_kernel_instantiations.cpp,并通过kern_main.cpp完成内核初始化。

mesosphère 的内核功能大量依赖 libmesosphere(见下文 libraries 小节)这一 C++ 库实现,二者在命名与代码组织上保持严格对应。

stratosphère:系统模块定制层

stratosphère 在系统层级上定制 Horizon OS,既包含对若干系统模块的重实现,也包含新增的自定义系统模块,用于扩展或添加各种功能。根据 stratosphère 组件文档,当前提供的模块包括:

ams_mitm、boot、boot2、creport、dmnt、eclct.stub、erpt、fatal、jpegdec、loader、ncm、pgl、pm、ro、sm、spl

仓库侧 stratosphere/ 目录与上述模块一一对应(另含LogManagerTioServercsfshtc等模块)。其中 ams_mitm 是最具代表性的复合模块,其源码进一步划分为多个子模块,包括:

  • bpc_mitm(电源管理拦截)、dns_mitm(DNS 拦截,对应 DNS 劫持功能文档);
  • fs_mitm(文件系统拦截)、ns_mitm(ns 服务拦截)、set_mitm(设置服务拦截)、sysupdater(系统更新)等。

这类模块正是 README 中描述的"Rosalina 风格的内核扩展 / 新功能提供"与"加载器重实现风格的重要系统动作挂钩"两种形态的落地。

troposphère:应用层定制

troposphère 组件文档 定义其在应用层级定制 Horizon OS。文档给出的示例是reboot_to_payload——一个执行系统重启到指定 payload 的示例应用。

仓库 troposphere/ 下实际包含三个应用:

  • daybreak:基于 nanovg 渲染库构建的应用;
  • haze:带 OpenGL 着色器(.glsl)资源的应用;
  • reboot_to_payload:文档中提到的重启示例应用。

辅助组件:emummc 与 libraries

emummc:eMMC 存储模拟

emummc 组件文档 将其描述为提供eMMC 存储模拟的协作项目,详细使用说明指向其上游仓库。本仓库中 emummc/source/ 提供了该能力的实现,包括:

  • FS/:文件系统偏移与结构定义(FS.hFS_offsets.cFS_structs.h等),并按系统版本维护偏移量(FS/offsets/);
  • emmc/ 与 emuMMC/:真实 eMMC 驱动与模拟上下文(emummc.cemummc_ctx.h);
  • libs/fatfs/:FatFs 文件系统支持。

同时 exosphère 提供的smc_ams_get_emummc_config自定义 SMC 即为该组件服务,二者在功能上深度联动。

libraries:操作系统开发库集合

libraries 组件文档 将 libraries/ 定义为一组面向 Nintendo Switch 操作系统开发的库,文档明确列出:

  • libmesosphere:实现 Horizon 内核功能的进行中 C++ 库;
  • libstratosphere:面向 Nintendo Switch 系统模块开发的进行中 C++ 库;
  • libvapours:面向多种用途的通用样板代码。

仓库中还包含文档未列出的libexosphere(libraries/libexosphere/),其 include 头文件与源码(如se/tsec/pmic/clkrst/等子目录)与 exosphère 的底层硬件访问需求对应。这些库分别服务于 fusée/exosphère、mesosphère、stratosphère 各层的开发,是整条分层链路共用的基础设施。

许可证与豁免条款

README 的 Licensing 章节明确了项目的开源约定:

  • Atmosphère 采用GPLv2许可证,许可证全文见 LICENSE 文件;
  • 存在针对特定项目的豁免条款Nintendo(任天堂)豁免于 GPLv2 许可,可按其选择改用Zero-Clause BSD许可证授权 Atmosphère 项目中任天堂撰写的任何源代码。

此外,docs/licensing_exemptions/ 目录还保存有 MIT 许可证副本,供需要 MIT 许可的项目参考。许可证这类法律性条款在定制固件生态中尤为关键——它决定了代码可被谁以何种方式复用。

构建、配置与进一步阅读

  • 构建:整体构建指南见 docs/building.md,仓库根目录的 Makefile 与 atmosphere.mk 是构建入口,各子组件(如 fusee/Makefile、exosphere/Makefile、stratosphere/Makefile)均有独立构建脚本,可按组件单独编译;
  • 配置:运行期配置模板集中在 config_templates/ 目录(如exosphere.inistratosphere.inisystem_settings.inioverride_config.ini),配置项的完整说明见 docs/features/configurations.md;
  • 路线与变更:计划中的功能见 docs/roadmap.md,历史版本变更见 docs/changelog.md,常见问题解答见 docs/faq.md;
  • 文档总入口:docs/main.md 汇总了全部组件、功能、构建与问答文档,是深入了解项目细节的首选索引。

致谢与社区

README 的 Credits 章节说明,Atmosphère 目前由 SciresM、TuxSH、hexkyz 与 fincs 开发维护,并感谢了 switchbrew(libnx 及大量逆向研究)、devkitPro(devkitA64 工具链与 libnx 支持)、ReSwitched 团队、FatFs 作者 ChaN、bcl 库作者 Marcus Geelnard、hekate 项目的 naehrwert/st4rk 与 CTCaer、emuMMC 项目的 m4xw、提出项目命名的 Riley 以及设计图形资源的 jaames 等众多贡献者。这一致谢清单也侧面反映了 Atmosphère 建立在 Nintendo Switch 逆向工程社区多年积累之上——其分层架构中大量底层能力(如 FatFs 文件系统、hekate 的 hwinit 代码、emuMMC 的存储模拟)都直接复用或借鉴了社区既有成果。

【免费下载链接】AtmosphereAtmosphère is a work-in-progress customized firmware for the Nintendo Switch.项目地址: https://gitcode.com/GitHub_Trending/at/Atmosphere

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询