- 嵌入式
- 固件
- 系统编程
【免费下载链接】hekate
hekate - A GUI based Nintendo Switch Bootloader
Nyx 是 hekate 图形界面(GUI)的自定义主题层,其视觉效果完全由 SD 卡上bootloader/res/目录中的资源文件驱动:一张 1280×720 的 32 位 BMP 背景图,加上若干 192×192 的 32 位 BMP 启动图标,即可在数分钟内把 Nyx 主页变成专属风格。本文将围绕 nyx/README_RES.md 的官方说明,结合仓库源码逐条拆解背景图规格、图标放置方式、_hue.bmp/_nobox.bmp/_hue_nobox.bmp三种后缀的着色与去边框行为,以及icon=与icon_*_custom.bmp的覆盖优先级,让你能安全、准确地制作和部署自己的 Nyx 主题资源。
Nyx 主题资源的核心事实
- 入口文档:nyx/README_RES.md(原文档,以下引用简称“原文档”);
- 配套模板:res/hekate_ipl_template.ini;
- 源码实现:nyx/nyx_gui/nyx.c(背景与默认图标加载)、nyx/nyx_gui/frontend/gui.c(启动图标解析与按钮绘制);
- 适用对象:使用 Nyx GUI(
nyx目录构建产物)的 hekate 用户,以及希望把 SD 卡界面定制成一致风格的主题作者。
背景图(background.bmp):1280×720、32 位、Alpha 必需
文件位置与命名
原文档明确:背景图必须放在
bootloader/res/background.bmp对应源码中,Nyx 在nyx_load_bg_icons()内通过
hekate_bg = bmp_to_lvimg_obj("bootloader/res/background.bmp");加载该文件(nyx/nyx_gui/nyx.c)。也就是说,主题作者把这张图放到该路径后,Nyx 启动主页(Home Tab)就会以它作为背景底图。
硬性规格:1280×720 且为 32 位 BMP
- 分辨率:必须是 1280×720。Nyx 的屏幕坐标系与按钮布局按 1280×720 设计(参见 nyx/nyx_gui/frontend/gui.c 中
btn_width = 200; btn_height = 200;等按钮尺寸与 592 像素高度的滚动区lv_page_set_scrl_height(parent, 592);),因此尺寸不符会被直接拉伸或裁切,产生错位。 - 位深:必须为 32 位 BMP(每像素含 8 位 Alpha)。原文档特别提醒:渲染时 Alpha 混合(alpha blending)是生效的;因此如果需要实底背景,Alpha 通道值必须设为
0xFF(完全不透明),否则背景会呈现半透明叠加在默认界面上。
原文档还提到“有网站可以生成正确的 BMP”。制作时可用常见图像软件导出“32-bit BMP / ARGB”格式,并确认导出选项包含 Alpha 通道。注意这与 Bootlogo 的规格不同——Bootlogo 的说明见 README_BOOTLOGO.md,它允许任意尺寸(最大 720×1280)、自动居中且只支持 32 位 ARGB BMP;背景图则是严格的 1280×720。
背景加载的源码级佐证
在 nyx/nyx_gui/nyx.c 中,nyx_load_bg_icons()依次完成三件事:
- 若存在
bootloader/res/icon_switch_custom.bmp则加载之,否则加载bootloader/res/icon_switch.bmp(nyx/nyx_gui/nyx.c); - 若存在
bootloader/res/icon_payload_custom.bmp则加载之,否则加载bootloader/res/icon_payload.bmp(nyx/nyx_gui/nyx.c); - 加载
bootloader/res/background.bmp(nyx/nyx_gui/nyx.c)。
可见这三类资源都集中在bootloader/res/下,命名固定,替换即生效,无需编译任何代码。
启动图标:192×192、32 位 BMP、自由使用透明度
图标规格
原文档给出:支持的图标为192×192 的 32 位 BMP,并且可以“随意使用透明度”,与按钮背景做漂亮的叠加效果。
之所以强调“32 位 + 透明度”,是因为 Nyx 会把这个 BMP 作为按钮上的lv_img对象渲染,Alpha 通道直接参与混合(参见 nyx/nyx_gui/frontend/gui.c 中lv_img_create/lv_img_set_src(img, bmp)的用法)。如果图标是纯白且带透明通道的“线稿”,还能配合下面的_hue机制被整体着色。
图标的两种放置方式
原文档给出两种方案:
- 按启动项名字命名:在
bootloader/res/下放置<boot entry name>.bmp,例如启动项名为CFW时放bootloader/res/CFW.bmp。 icon=键指定路径(推荐):在启动项的[section]内写icon={sd path},例如icon=bootloader/res/my_icon.bmp。
源码中的实际解析顺序如下(nyx/nyx_gui/frontend/gui.c):
- 解析
bootloader/ini下的配置文件(ini_parse(&ini_sections, "bootloader/ini", true)); - 遍历每个 boot entry 小节,查找
icon键(nyx/nyx_gui/frontend/gui.c); - 若没有
icon键,则依次尝试:bootloader/res/<entry>.bmpbootloader/res/<entry>_hue_nobox.bmpbootloader/res/<entry>_hue.bmpbootloader/res/<entry>_nobox.bmp(见 nyx/nyx_gui/frontend/gui.c)
- 若有
icon键,直接加载该路径,并按文件名后缀判断是否着色 / 去边框(见下节); - 若以上都没有,且该条目带
payload=键,则回退到默认的 payload 图标(icon_payload),否则回退到默认的 Switch 图标(icon_switch),且当不存在*_custom.bmp时默认图标会被着色(nyx/nyx_gui/frontend/gui.c)。
模板文件中也明确写了这一风格化键的用途:res/hekate_ipl_template.ini 中注释“like logopath= key which is for bootlogo and icon= key for Nyx icon.”。注意配置文件的语法约束也一并继承:不要在键名前后留空格、不要用#注释(用;),否则条目会解析失败(res/hekate_ipl_template.ini)。
三种后缀魔法:_hue、_nobox、_hue_nobox
这是原文档的核心“玩法”,源码给出了精确判定逻辑。
_hue.bmp:按主题色自动着色
原文档:图标名以_hue.bmp结尾时,图标会被着色(colorized);这只有在“白色布局 + 透明通道”的图标上效果才好看。
源码判定(nyx/nyx_gui/frontend/gui.c):
if (bmp && strlen(icon_path) > 8 && !memcmp(icon_path + strlen(icon_path) - 8, "_hue", 4)) img_colorize = true;着色在渲染层通过img_style实现:当img_colorize为真时,会调用lv_img_set_style(img, &img_style);(nyx/nyx_gui/frontend/gui.c)。也就是说,白色图形区域会被替换为当前主题/按钮的主色,透明区域保持透明——所以白底线稿能直接融入任意配色。
_nobox.bmp:去掉按钮底框
原文档:使用_nobox.bmp时,按钮背景被移除,适合追求特定视觉风格的主题。
源码判定(nyx/nyx_gui/frontend/gui.c):
if (bmp && strlen(icon_path) > 10 && !memcmp(icon_path + strlen(icon_path) - 10, "_nobox", 6)) img_noborder = true;当img_noborder为真时,按钮尺寸由图标尺寸推导(宽高 =bmp->header.w + 4,超过 200 则截断为 200),并使用无边框样式btn_home_noborder_rel渲染(nyx/nyx_gui/frontend/gui.c)。
_hue_nobox.bmp:着色 + 去边框组合
原文档:两种效果可组合,即文件名以_hue_nobox.bmp结尾。
源码优先判定组合(nyx/nyx_gui/frontend/gui.c):
if (bmp && strlen(icon_path) > 14 && !memcmp(icon_path + strlen(icon_path) - 14, "_hue_nobox", 10)) { img_colorize = true; img_noborder = true; }注意组合判断在前,因此_hue_nobox不会被误拆成“只有_hue”或“只有_nobox”。
后缀规则对两种放置方式都生效
原文档虽然没有逐条展开,但从源码可以看到:后缀判断在icon=路径分支内(nyx/nyx_gui/frontend/gui.c),而“按启动项名字命名”的分支也会尝试<entry>_hue_nobox.bmp、<entry>_hue.bmp、<entry>_nobox.bmp三个候选(nyx/nyx_gui/frontend/gui.c)。所以两种方式都能用后缀,推荐优先使用icon=指定路径,因为它在文件名上更自由(可放在 SD 任意位置),且语义更明确。
默认图标替换:icon_switch_custom.bmp与icon_payload_custom.bmp
原文档最后一段说明:默认系统图标icon_switch.bmp与icon_payload.bmp可被替换;如果存在icon_switch_custom.bmp或icon_payload_custom.bmp,则加载自定义版本。
源码佐证(nyx/nyx_gui/nyx.c):
if (!f_stat("bootloader/res/icon_switch_custom.bmp", NULL)) icon_switch = bmp_to_lvimg_obj("bootloader/res/icon_switch_custom.bmp"); else icon_switch = bmp_to_lvimg_obj("bootloader/res/icon_switch.bmp"); if (!f_stat("bootloader/res/icon_payload_custom.bmp", NULL)) icon_payload = bmp_to_lvimg_obj("bootloader/res/icon_payload_custom.bmp"); else icon_payload = bmp_to_lvimg_obj("bootloader/res/icon_payload.bmp");几点实战细节:
- 自定义版本存在时,该图标默认不做着色;只有当
icon_sw_custom/icon_pl_custom为假(即未加载到 custom 版本)时才会走img_colorize(nyx/nyx_gui/frontend/gui.c 与 nyx/nyx_gui/frontend/gui.c)。也就是说:想用默认图标配色,就放白底透明线稿的icon_switch.bmp/icon_payload.bmp;想用自己定义的多彩图标,就放icon_*_custom.bmp。 - 所有默认与自定义图标都应在
bootloader/res/目录下,规格同为 192×192 32 位 BMP。
配置文件中的icon=完整示例
结合 res/hekate_ipl_template.ini 的格式约定,一个可直接套用的启动项示例:
[CFW SysNAND] payload=bootloader/payloads/reboot_payload.bin icon=bootloader/res/cfw_hue_nobox.bmp logopath=bootloader/bootlogo_cfw.bmp说明:
icon=bootloader/res/cfw_hue_nobox.bmp:指定图标路径,且因文件名以_hue_nobox结尾,同时启用着色与去边框;logopath=为可选的启动 logo(见 README_BOOTLOGO.md 的加载顺序:先logopath=,缺失/格式错误再回退bootloader/bootlogo.bmp,最后回退默认 hekate logo);- 键名前后不要留空格,条目内不要用
#注释,以免解析失败(res/hekate_ipl_template.ini)。
若想让图标默认着色但不显示按钮底框,也可直接放bootloader/res/<entry_name>_hue_nobox.bmp,无需写icon=键——源码会按命名自动探测(nyx/nyx_gui/frontend/gui.c)。
排查清单与注意事项
- 背景不显示:确认路径为
bootloader/res/background.bmp且是 1280×720、32 位含 Alpha 的 BMP;若导出成了 24 位 RGB,Alpha 通道丢失,表现会异常。 - 背景偏透明:32 位 BMP 的 Alpha 通道未填满,需要将 Alpha 设为
0xFF以获得实底。 - 图标没生效:检查文件名是否与启动项名完全一致(大小写敏感),或
icon=路径是否可访问;SD 卡挂载失败时会直接提示错误(参见 nyx/nyx_gui/nyx.c 的错误分支)。 - 着色没生效:确认文件名以
_hue、_hue_nobox结尾(注意_hue判定要求文件名长度 > 8,_hue_nobox要求 > 14),且图标是白底透明线稿。 - 按钮框还在:
_nobox只对单个图标生效;若混用了自定义背景,参考 nyx/nyx_gui/frontend/gui.c 中被注释掉的按钮透明逻辑,可知当前版本下_nobox是控制按钮底框的最直接方式。 - 修改后生效:无需重新编译 hekate/Nyx,重启进入 Nyx 即重新加载
bootloader/res/下的资源。
结语
从 nyx/README_RES.md 出发,结合 nyx/nyx_gui/nyx.c 与 nyx/nyx_gui/frontend/gui.c 的源码逻辑,可以确认 Nyx 的定制体系非常“文件驱动”:背景图、默认图标、自定义图标与按条目命名的图标全部从bootloader/res/读取,icon=键提供最灵活的路径指定方式,_hue/_nobox/_hue_nobox三种后缀则精确控制着色与按钮底框。掌握这套规则后,制作一套风格统一、可复用的 Nyx 主题只需要准备好三样东西:一张 1280×720 的 ARGB 背景图、若干 192×192 的 ARGB 图标(其中可着色的做白底透明线稿),以及一条简洁的bootloader/hekate_ipl.ini配置。
- 嵌入式
- 固件
- 系统编程
【免费下载链接】hekate
hekate - A GUI based Nintendo Switch Bootloader
相关推荐
hekate背景图片设置:打造独特的引导界面视觉效果
hekate背景图片设置:打造独特的引导界面视觉效果 hekate作为一款基于GUI的Nintendo Switch引导程序(Bootloader),允许用户自
嵌入式固件系统编程hekate 引导加载器配置完全指南:hekate_ipl.ini 启动项、Payload 存储与 Nyx 界面详解
hekate 引导加载器配置完全指南:hekate_ipl.ini 启动项、Payload 存储与 Nyx 界面详解 hekate 是一款基于图形界面的 Nin
嵌入式固件系统编程Hekate引导选项图标定制完全指南:打造个性化Switch启动界面
Hekate引导选项图标定制完全指南:打造个性化Switch启动界面 想要让你的Nintendo Switch启动界面与众不同吗?Hekate作为一款基于GUI
嵌入式固件系统编程
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考