CTCaer/hekate
GitHub: CTCaer/hekate
一个功能强大的Nintendo Switch图形化引导加载程序及工具箱,支持自定义固件引导、emuMMC管理、系统备份与多系统启动。
Stars: 8110 | Forks: 638
# hekate - Nyx

自定义图形化 Nintendo Switch 引导加载程序、固件补丁工具及更多功能。
- [功能特性](#features)
- [引导加载程序文件夹和文件](#bootloader-folders-and-files)
- [引导加载程序配置](#bootloader-configuration)
* [hekate 全局配置键/值](#hekate-global-configuration-keysvalues-when-entry-is-config)
* [启动项键/值组合](#boot-entry-keyvalue-combinations)
* [Exosphère 启动项键/值组合](#boot-entry-keyvalue-combinations-for-exosphère)
* [Payload 存储](#payload-storage)
* [Nyx 配置键/值](#nyx-configuration-keysvalues-nyxini)
## 功能特性
- **完全可配置且图形化**,支持触摸屏和 Joycon 输入
- **启动器风格、背景和颜色主题**
- **HOS (Switch OS) 引导加载程序** -- 用于 CFW Sys/Emu、OFW Sys 和 Stock Sys
- **Android & Linux 引导加载程序**
- **Payload 启动器**
- **eMMC/emuMMC 备份/恢复工具**
- **SD 卡分区管理器** -- 为 HOS (Sys/emuMMC)、Android 和 Linux 的任意组合准备和格式化 SD 卡
- **emuMMC 创建与管理器** -- 还可以迁移和修复现有的 emuMMC
- **Switch Android & Linux 刷写工具**
- **SD/eMMC/emuMMC 的 USB 大容量存储 (UMS)** -- 将 Switch 变为 SD 卡读卡器
- **USB 手柄** -- 将带有 Joycon 的 Switch 变为 USB HID 手柄
- **硬件和外设信息** (SoC、熔丝、RAM、显示屏、触摸、eMMC、SD、电池、PSU、充电器)
- **许多其他工具**,如归档位修复器、触摸校准、SD/eMMC 基准测试、AutoRCM 启用器等
## 引导加载程序文件夹和文件
| 文件夹/文件 | 描述 |
| ------------------------ | --------------------------------------------------------------------- |
| bootloader | 主文件夹。 |
| \|__ bootlogo.bmp | 如果未找到 `logopath` 键,则使用此项。由用户提供。可以跳过。 |
| \|__ hekate_ipl.ini | 主引导加载程序配置和 `Launch` 菜单中的启动项。 |
| \|__ nyx.ini | Nyx GUI 配置 |
| \|__ patches.ini | 添加外部补丁。可以跳过。可在 [此处](./res/patches_template.ini) 找到模板 |
| \|__ update.bin | 如果版本较新,则在启动时加载。通常用于芯片。首次启动时自动更新并创建。 |
| bootloader/ini/ | 用于单个 ini 文件。`More configs` 菜单。支持 Autoboot。 |
| bootloader/res/ | Nyx 用户资源。图标等。 |
| \|__ background.bmp | Nyx - 自定义背景。由用户提供。 |
| \|__ icon_switch.bmp | Nyx - CFW 的默认图标。 |
| \|__ icon_payload.bmp | Nyx - Payload 的默认图标。 |
| bootloader/sys/ | hekate 和 Nyx 系统模块文件夹。!重要! |
| \|__ emummc.kipm | emuMMC KIP1 模块。 |
| \|__ libsys_lp0.bso | LP0 (休眠模式) 模块。 |
| \|__ libsys_minerva.bso | Minerva 训练单元。用于 DRAM 频率训练。 |
| \|__ nyx.bin | Nyx - hekate 的 GUI。 |
| \|__ res.pak | Nyx 资源包。 |
| \|__ thk.bin | Atmosphère Tsec Hovi Keygen。 |
| \|__ /l4t/ | 与 L4T (Linux/Android) 相关固件的文件夹。 |
| bootloader/screenshots/ | Nyx 截图保存的文件夹 |
| bootloader/payloads/ | 用于 `Payloads` 菜单。支持所有 CFW 引导加载程序、工具、Linux payload。仅当包含在 ini 中时才支持 Autoboot。 |
| bootloader/libtools/ | 保留 |
## 引导加载程序配置
引导加载程序可以通过 'bootloader/hekate_ipl.ini' 进行配置(如果 SD 卡上存在该文件)。每个 ini 节代表一个启动项,但控制全局配置的特殊节 'config' 除外。
有四种可能的条目类型。"**[ ]**":启动项,"**{ }**":标题,"**#**":注释,"*换行符*":.ini 格式换行。
**你可以在 [这里](./res/hekate_ipl_template.ini) 找到一个模板**
### hekate 全局配置键/值 (当条目为 *[config]* 时):
| 配置选项 | 描述 |
| ------------------ | -------------------------------------------------------------- |
| autoboot=0 | 0:禁用,#:自动启动的启动项编号。 |
| autoboot_list=0 | 0:从 hekate_ipl.ini 读取 `autoboot` 启动项,1:从 ini 文件夹读取(ini 文件按 ASCII 顺序排列)。 |
| bootwait=3 | 0:禁用(同时也禁用启动图标。如果在注入后一直按住 **VOL-** 可进入菜单。),#:等待 **VOL-** 以进入菜单的时间。最大值:20s。 |
| noticker=0 | 0:在自定义启动图标期间绘制动画线条,表示跳转到菜单的剩余时间。1:禁用。 |
| autohosoff=1 | 0:禁用,1:如果是通过 RTC 闹钟从 HOS 唤醒,显示图标,然后完全关机,2:无图标,立即关机。|
| autonogc=1 | 0:禁用,1:如果发现未熔断的熔丝且启动 >= 4.0.0 的 HOS,自动应用 nogc 补丁。 |
| bootprotect=0 | 0:禁用,1:通过禁止在 HOS 中读取或编辑来保护 bootloader 文件夹免受损坏。 |
| updater2p=0 | 0:禁用,1:强制更新(如果需要)reboot2payload 二进制文件为 hekate。 |
| backlight=100 | 屏幕背光亮度等级。0-255。 |
### 启动项键/值组合:
| 配置选项 | 描述 |
| ---------------------- | ---------------------------------------------------------- |
| warmboot={FILE path} | 替换 warmboot 二进制文件 |
| secmon={FILE path} | 替换 security monitor 二进制文件 |
| kernel={FILE path} | 替换内核二进制文件 |
| kip1={FILE path} | 替换/添加内核初始进程。可设置多个。 |
| kip1={FOLDER path}/* | 加载文件夹内的每个 .kip/.kip1。兼容单个 kip1 键。 |
| pkg3={FILE path} | 获取 Atmosphere `package3` 二进制文件并从中 `提取` 所有需要的部分。kips、exosphere、warmboot 和 mesophere。 |
| fss0={FILE path} | 同上。!已弃用! |
| pkg3ex=1 | 启用从 PKG3/FSS0 存储加载实验性内容 |
| pkg3kip1skip={KIP name} | 跳过从 `pkg3`/`fss0` 加载某个 kip。允许多个,使用 `,` 作为分隔符。名称必须与 `PKG3` 中的名称完全匹配。 |
| exofatal={FILE path} | 替换 Mariko 的 exosphere fatal 二进制文件 |
| ---------------------- | ---------------------------------------------------------- |
| kip1patch=patchname | 启用 kip1 补丁。允许多个,使用 `,` 作为分隔符。如果未找到实际补丁,将显示警告。 |
| emupath={FOLDER path} | 强制 emuMMC 使用选定的路径。(=emuMMC/RAW1, =emuMMC/SD00, 等)。emuMMC 必须由 hekate 创建,因为它使用 raw_based/file_based 文件。 |
| emummcforce=1 | 强制使用 emuMMC。如果 emummc.ini 被禁用或未找到,则会导致错误。 |
| emummc_force_disable=1 | 禁用 emuMMC(如果已启用)。 |
| stock=1 | 通过 hekate 引导加载程序启动 OFW。运行 stock 时禁用不需要的内核补丁和 CFW kips。`如果启用了 emuMMC,则需要 emummc_force_disable=1`。stock 不支持 emuMMC。如果除了 OFW 之外还需要额外的 KIP,可以使用 `kip1` 键定义它们。不应使用依赖于 Atmosphère 补丁的 kip,因为它会挂起。如果需要 `NOGC`,请使用 `kip1patch=nogc`。 |
| fullsvcperm=1 | 禁用 SVC 验证(完全服务权限)。不适用于以 Mesosphere 为内核的情况。 |
| debugmode=1 | 启用调试模式。与 exosphere 作为 secmon 一起使用时已过时。 |
| kernelprocid=1 | 启用 stock 内核进程 id 发送/接收补丁。使用 `pkg3`/`fss0` 时不需要。 |
| ---------------------- | ---------------------------------------------------------- |
| payload={FILE path} | Payload 启动。工具、Android/Linux、CFW 引导加载程序等。与此一起使用时,上述任何键都不予考虑。 |
| ---------------------- | ---------------------------------------------------------- |
| l4t=1 | L4T Linux/Android 原生启动。 |
| boot_prefixes={FOLDER path} | L4T 启动堆栈目录。 |
| ram_oc=0 | L4T RAM 超频。查看 README_CONFIG.txt 获取更多信息。 |
| ram_oc_vdd2=1100 | L4T RAM VDD2 电压。设置 VDD2 (T210B01) 或 VDD2/VDDQ (T210) 电压。1050-1175。 |
| ram_oc_vddq=600 | L4T RAM VDDQ 电压。设置 VDDQ (T210B01)。550-650。 |
| uart_port=0 | 启用 L4T uboot/kernel 的串口日志记录。 |
| sld_type=0x31444C53 | 控制无缝显示支持的类型。0x0:禁用,0x31444C53:L4T 无缝显示。 |
| Additional keys | 每个发行版支持更多键。查看 README_CONFIG.txt 获取更多信息。 |
| ---------------------- | ---------------------------------------------------------- |
| bootwait=3 | 覆盖 `[config]` 中的全局 bootwait。 |
| id=IDNAME | 标识启动项以通过 id 强制启动。最多 7 个字符。 |
| logopath={FILE path} | 如果存在,将加载指定的位图。否则,如果存在 `bootloader/bootlogo.bmp` 将使用该文件 |
| icon={FILE path} | 强制 Nyx 使用此处定义的图标。如果未找到,将检查名为启动项的 bmp([Test 2] -> `bootloader/res/Test 2.bmp`)。否则将使用默认值。 |
**注意1**:当在 `kip1` 中使用通配符 (`/*`) 时,你仍然可以在之后使用普通的 `kip1` 来加载额外的单个 kip。
**注意2**:使用 PKG3/FSS0 时,它会解析 exosphere、warmboot 和所有核心 kip。你可以通过在定义 `pkg3`/`fss0` 之后使用 `secmon`/`warmboot` 来覆盖前两者。
你可以定义 `kip1` 来加载额外的 kip,或通过通配符 (`/*`) 加载多个。
**警告**:使用 `kip1` 覆盖 *pkg3/fss 核心* kip 时请小心。
这是因为 kip 之间可能不兼容。如果兼容,你可以毫无问题地覆盖 `pkg3`/`fss0` kip(对于中间 kip 更改的测试很有用)。在这种情况下,`kip1` 行必须位于 `pkg3`/`fss0` 行**之后**。
### Exosphère 启动项键/值组合:
| 配置选项 | 描述 |
| ---------------------- | ---------------------------------------------------------- |
| nouserexceptions=1 | 与 Exosphère 配对时禁用用户模式异常处理程序。 |
| userpmu=1 | 与 Exère 配对时启用用户对 PMU 的访问。 |
| cal0blank=1 | 覆盖 Exosphère 配置 `blank_prodinfo_{sys/emu}mmc`。如果该键不存在,将使用 `exosphere.ini`。 |
| cal0writesys=1 | 覆盖 Exosphère 配置 `allow_writing_to_cal_sysmmc`。如果该键不存在,将使用 `exosphere.ini`。 |
| usb3force=1 | 覆盖系统设置 mitm 配置 `usb30_force_enabled`。如果该键不存在,将使用 `system_settings.ini`。 |
**注意**:`cal0blank`、`cal0writesys`、`usb3force` 如上所述会覆盖 `exosphere.ini` 或 `system_settings.ini`。0:禁用,1:启用,键缺失:使用原始值。
**注意2**:`exosphere.ini` 和 `system_settings.ini` 中的 `blank_prodinfo_{sys/emu}mmc`、`allow_writing_to_cal_sysmmc` 和 `usb30_force_enabled` 分别是唯一可以外部影响 hekate 启动配置的 atmosphere 配置键,**如果** hekate 配置中缺少等效的键。
### Payload 存储:
hekate 在二进制文件中有一个启动存储,帮助其在 BPMP 环境之外进行配置:
| 偏移量 / 名称 | 描述 |
| ----------------------- | ----------------------------------------------------------------- |
| '0x94' boot_cfg | bit0:`强制自动启动`,bit1:`显示启动日志`,bit2:`从 ID 启动`,bit3:`启动到 emuMMC`。 |
| '0x95' autoboot | 如果 `强制自动启动`,0:强制进入菜单,否则启动该项。 |
| '0x96' autoboot_list | 如果 `强制自动启动` 且 `autoboot`,则从 ini 文件夹启动。 |
| '0x97' extra_cfg | 当菜单被强制时:bit5:`运行 UMS`。 |
| '0x98' xt_str[128] | 取决于设置的配置位。 |
| '0x98' ums[1] | 当设置 `运行 UMS` 时,将启动选定的 UMS。0:SD,1:eMMC BOOT0,2:eMMC BOOT1,3:eMMC GPP,4:emuMMC BOOT0,5:emuMMC BOOT1,6:emuMMC GPP, |
| '0x98' id[8] | 当设置 `从 ID 启动` 时,它将自动搜索所有 ini 并找到具有该 id 的启动项并启动。必须以 NULL 终止。 |
| '0xA0' emummc_path[120] | 当设置 `启动到 emuMMC` 时,它将覆盖当前的 emuMMC(启动项或 emummc.ini)。必须以 NULL 终止。 |
### Nyx 配置键/值 (nyx.ini):
| 配置选项 | 描述 |
| ------------------ | ---------------------------------------------------------- |
| themebg=2d2d2d | 以 HEX 格式设置 Nyx 背景颜色。实验性。 |
| themecolor=167 | 设置 Nyx 文本高亮颜色。 |
| entries5col=0 | 1:将 Launch 启动项列数从每行 4 个设置为 5 个。总共 10 个条目。 |
| timeoffset=100 | 以 HEX 格式设置时间偏移量。必须是 epoch 格式 |
| timedst=0 | 启用自动夏令时调整 |
| homescreen=0 | 设置主屏幕。0:主菜单,1:所有配置(合并 Launch 和 More configs),2:Launch,3:More Configs。 |
| verification=1 | 0:禁用备份/恢复验证,1:稀疏(基于块,快速且基本可靠),2:完整(基于 sha256,慢速且 100% 可靠)。 |
| ------------------ | ------- 以下选项只能在 nyx.ini 中编辑 ------- |
| umsemmcrw=0 | 1:eMMC/emuMMC UMS 默认将以可写方式挂载。 |
| jcdisable=0 | 1:完全禁用 Joycon 驱动程序。 |
| jcforceright=0 | 1:强制使用右 Joycon 作为主鼠标控制。 |
| bpmpclock=1 | 0:自动,1:589 MHz,2:576 MHz,3:563 MHz,4:544 MHz,5:408 MHz。如果 Nyx 挂起或某些功能(如 UMS/备份验证)失败,请使用 2 到 5。 |
```
hekate (c) 2018, naehrwert, st4rk.
(c) 2018-2026, CTCaer.
Nyx GUI (c) 2019-2026, CTCaer.
Thanks to: derrek, nedwill, plutoo, shuffle2, smea, thexyz, yellows8.
Greetings to: fincs, hexkyz, SciresM, Shiny Quagsire, WinterMute.
Open source and free packages used:
- Littlev Graphics Library,
Copyright (c) 2016-2018 Gabor Kiss-Vamosi
- FatFs R0.13c,
Copyright (c) 2006-2018, ChaN
Copyright (c) 2018-2022, CTCaer
- bcl-1.2.0,
Copyright (c) 2003-2006, Marcus Geelnard
- blz,
Copyright (c) 2018, SciresM
- elfload,
Copyright (c) 2014 Owen Shepherd,
Copyright (c) 2018 M4xw
___
.-' `'.
/ \
| ;
| | ___.--,
_.._ |0) = (0) | _.---'`__.-( (_.
__.--'`_.. '.__.\ '--. \_.-' ,.--'` `""`
( ,.--'` ',__ /./; ;, '.__.'` __
_`) ) .---.__.' / | |\ \__..--"" """--.,_
`---' .'.''-._.-'`_./ /\ '. \ _.--''````'''--._`-.__.'
| | .' _.-' | | \ \ '. `----`
\ \/ .' \ \ '. '-._)
\/ / \ \ `=.__`'-.
/ /\ `) ) / / `"".`\
, _.-'.'\ \ / / ( ( / /
`--'` ) ) .-'.' '.'. | (
(/` ( (` ) ) '-; [switchbrew]
```
标签:Android启动, Bootloader, CFW, emuMMC, GUI, hekate, Linux启动, Nintendo Switch, Nyx, Payload, Switch破解, USB大容量存储, 分区管理, 固件补丁, 图形化界面, 客户端加密, 嵌入式系统, 引导程序, 数据备份, 游戏主机, 硬件检测, 硬件黑客, 系统破解, 自动回退, 自定义固件