14 KiB
OmniNX Installer - Installation Process Documentation
This document provides a detailed, step-by-step breakdown of everything that is checked and done during the OmniNX installation/update process.
Overview
The OmniNX Installer Payload operates in two modes:
- Update Mode: When OmniNX is already installed, performs selective cleanup
- Clean Install Mode: When no OmniNX is detected, performs full wipe with backup/restore
Phase 1: Initialization & Detection
Step 1: Hardware Initialization
Location: main.c:185
- Initialize hardware via
hw_init() - Pivot stack to
IPL_STACK_TOP - Initialize heap at
IPL_HEAP_START
Step 2: Configuration Setup
Location: main.c:190
- Set default bootloader configuration:
- Autoboot: disabled
- Boot wait: 3 seconds
- Backlight: 100%
- SE keygen status: false
- Detect chip variant (T210B01 check)
- Check RCM patched status
Step 3: SD Card Mounting
Location: main.c:193
- Attempt to mount SD card filesystem
- Error Handling: If mount fails → reboot system (can't show error without display)
Step 4: System Initialization
Location: main.c:198-211
- Initialize Minerva memory controller (set to 800MHz)
- Initialize display and framebuffer (720x1280)
- Initialize graphics console
- Set display backlight to 100%
- Overclock BPMP (Boot and Power Management Processor)
Step 5: Installation Detection
Location: main.c:216, version.c:127
- Check for
sd:/config/omninx/manifest.inifile - If manifest exists:
- Parse manifest to extract
current_packvalue - Determine variant:
standard,light, oroc - Read version information
- Set
is_installed = true
- Parse manifest to extract
- Detection Method: Reads INI file with
[OmniNX]section containingcurrent_packkey
Step 6: Pack Variant Detection
Location: main.c:219, version.c:146
- Check for staging directories (in order of priority):
sd:/OmniNX Standard/sd:/OmniNX Light/sd:/OmniNX OC/
- Error Handling: If none found → display error message and wait for button input
Step 7: Installation Mode Determination
Location: main.c:287
- If
is_installed == true→INSTALL_MODE_UPDATE - If
is_installed == false→INSTALL_MODE_CLEAN
Phase 2: User Confirmation
Step 8: Information Display
Location: main.c:289-298
- Display installation mode: "Update" or "Saubere Installation" (Clean Install)
- Display pack variant to install: "Standard", "Light", or "OC"
- Display current installation variant (if any) or "Keine" (None)
Step 9: User Input Wait
Location: main.c:314-338
- Wait for user confirmation via:
- A button on right Joy-Con, OR
- Power button
- Blocks until button is pressed (checks every 50ms)
Phase 3: Update Mode Execution
Trigger: INSTALL_MODE_UPDATE (OmniNX already installed)
Step 1: Cleanup (Selective Deletion)
Location: install.c:321-380
10. Clean Atmosphere Subdirectories
Location: install.c:325-327, deletion_lists.h:9-34
Deletes 34 specific subdirectories:
atmosphere/config/atmosphere/crash_reports/atmosphere/exefs_patches/*(various patch directories)atmosphere/kip1/,atmosphere/kips/atmosphere/logs/- And more...
11. Clean Atmosphere Root Directories (Title IDs)
Location: install.c:330-331, deletion_lists.h:38-72
Deletes 29 title ID directories:
atmosphere/0000000000534C56/atmosphere/0100000000000008/atmosphere/010000000000000D/- And 26 more title ID folders...
12. Clean Atmosphere Contents Directories
Location: install.c:333-334, deletion_lists.h:75-110
Deletes 29 corresponding atmosphere/contents/ title ID directories
13. Clean Atmosphere Files
Location: install.c:336-337, deletion_lists.h:113-122
Deletes 7 specific files:
atmosphere/config/exosphere.iniatmosphere/config/override_config.iniatmosphere/config/stratosphere.iniatmosphere/hbl.nspatmosphere/package3atmosphere/reboot_payload.binatmosphere/stratosphere.romfs
14. Clean Bootloader Directories
Location: install.c:340-343, deletion_lists.h:125-134
Deletes 7 bootloader subdirectories:
bootloader/boot/bootloader/bootlogo/bootloader/ini2/bootloader/payloads/bootloader/reboot/bootloader/res/bootloader/sys/
15. Clean Bootloader Files
Location: install.c:345-346, deletion_lists.h:137-146
Deletes 7 specific files:
bootloader/ArgonNX.binbootloader/bootlogo.bmpbootloader/hekate_ipl.inibootloader/nyx.inibootloader/patches.inibootloader/update.binbootloader/ini/EmuMMC ohne Mods.ini
16. Clean Config Directories
Location: install.c:349-352, deletion_lists.h:149-160
Deletes 8 config subdirectories:
config/aio-switch-updater/config/blue_pack_updater/config/kefir-updater/config/nx-hbmenu/config/quickntp/config/sys-con/config/sys-patch/config/uberhand/,config/ultrahand/
17. Clean Switch Directories
Location: install.c:355-358, deletion_lists.h:163-226
Deletes 55+ switch application directories:
switch/.overlays/,switch/.packages/switch/aio-switch-updater/switch/DBI_810/,switch/DBI_810_DE/,switch/DBI_810_EN/switch/tinfoil/switch/EdiZon/,switch/JKSV/,switch/checkpoint/- And 40+ more application directories...
18. Clean Switch Files
Location: install.c:360-361, deletion_lists.h:229-278
Deletes 47+ NRO files and other files:
switch/tinfoil.nroswitch/DBI.nroswitch/DBI/DBI_810_*.nro(various versions)switch/daybreak.nro- And 40+ more files...
19. Clean Root Files
Location: install.c:364-367, deletion_lists.h:281-295
Deletes 12 root-level CFW files:
boot.dat,boot.iniexosphere.bin,exosphere.inihbmenu.nroloader.bin,payload.binupdate.bin,version- And more...
20. Clean Miscellaneous Directories
Location: install.c:369-370, deletion_lists.h:298-309
Deletes 9 miscellaneous directories:
argon/,games/,NSPs (Tools)/Patched Apps/,SaltySD/scripts/,tools/warmboot_mariko/switch/tinfoil/db/
21. Clean Miscellaneous Files
Location: install.c:372-373, deletion_lists.h:312-322
Deletes 8 miscellaneous files:
fusee-primary.bin,fusee.binSaltySD/*.elf(various bootstrap files)
22. Cleanup Old Version Markers
Location: install.c:308-318, deletion_lists.h:325-335
Deletes legacy version marker files:
1.0.0l,1.0.0s,1.0.0oc1.4.0-pre,1.4.0-pre-c,1.4.0-pre-d1.4.1,1.5.0
Note: Each deletion operation checks if path exists before attempting deletion.
Step 2: File Installation
Location: install.c:383-526
23. Copy Atmosphere Directory
Location: install.c:400-402
- Source:
{staging}/atmosphere/(e.g.,sd:/OmniNX Standard/atmosphere/) - Destination:
sd:/atmosphere/ - Progress: Recursively counts all files/directories, displays percentage
- Tracking: Updates progress every 10 items or when percentage changes
24. Copy Bootloader Directory
Location: install.c:404-406
- Source:
{staging}/bootloader/ - Destination:
sd:/bootloader/ - Same progress tracking as above
25. Copy Config Directory
Location: install.c:408-410
- Source:
{staging}/config/ - Destination:
sd:/config/ - Same progress tracking
26. Copy Switch Directory
Location: install.c:412-414
- Source:
{staging}/switch/ - Destination:
sd:/switch/ - Same progress tracking
27. Copy warmboot_mariko Directory
Location: install.c:416-418
- Source:
{staging}/warmboot_mariko/ - Destination:
sd:/warmboot_mariko/ - Only if directory exists in staging
28. Copy SaltySD Directory (OC Variant Only)
Location: install.c:421-425
- Source:
{staging}/SaltySD/ - Destination:
sd:/SaltySD/ - Condition: Only copied if
variant == VARIANT_OC - Note: This is a large directory (~2500 files), so progress tracking is important
29. Copy Root Files
Location: install.c:428-466
Copies individual files from staging root to SD root:
boot.dat→sd:/boot.datboot.ini→sd:/boot.iniexosphere.ini→sd:/exosphere.inihbmenu.nro→sd:/hbmenu.nroloader.bin→sd:/loader.binpayload.bin→sd:/payload.bin
Each file is only copied if it exists in staging.
30. Create manifest.ini
Location: install.c:468-516
Creates/overwrites sd:/config/omninx/manifest.ini:
Content Structure:
[OmniNX]
current_pack={variant} # "Standard", "Light", or "OC"
version={VERSION} # e.g., "1.0.0"
update_channel={0|1|2} # light=0, oc=1, standard=2
channel_pack={variant} # Same as current_pack
Directory Creation: Ensures sd:/config/omninx/ exists before creating file.
Step 3: Cleanup Staging Directory
Location: install.c:626-656
31. Remove Staging Directory
Location: install.c:634-652
- Recursively deletes the entire staging directory:
sd:/OmniNX Standard/ORsd:/OmniNX Light/ORsd:/OmniNX OC/
- Error Handling: Warns if deletion fails but continues (non-fatal)
Phase 4: Clean Install Mode Execution
Trigger: INSTALL_MODE_CLEAN (No OmniNX detected)
Step 1: Backup User Data
Location: backup.c:18-52
32. Create Backup Directory
- Creates
sd:/temp_backup/directory
33. Backup DBI
- Source:
sd:/switch/DBI/ - Destination:
sd:/temp_backup/DBI/ - Only if source exists
34. Backup Tinfoil
- Source:
sd:/switch/tinfoil/ - Destination:
sd:/temp_backup/tinfoil/ - Only if source exists
35. Backup prod.keys
- Source:
sd:/switch/prod.keys - Destination:
sd:/temp_backup/prod.keys - Only if source exists
Step 2: Wipe Directories
Location: install.c:543-602
36. Delete Entire Directories
Recursively deletes (if they exist):
sd:/atmosphere/(entire directory tree)sd:/bootloader/(entire directory tree)sd:/config/(entire directory tree)sd:/switch/(entire directory tree)
37. Delete Root Files
- Uses same deletion list as update mode (Step 19)
- Deletes
boot.dat,boot.ini,exosphere.ini, etc.
38. Delete Miscellaneous Items
- Uses same deletion lists as update mode (Steps 20-21)
- Deletes
argon/,games/,SaltySD/, etc.
39. Recreate Switch Directory
- Creates empty
sd:/switch/directory for restoration
Step 3: Restore User Data
Location: backup.c:55-95
40. Restore DBI
- Source:
sd:/temp_backup/DBI/ - Destination:
sd:/switch/DBI/ - Cleanup: After restoration, deletes old DBI NRO files:
sd:/switch/DBI/DBI_810_EN.nrosd:/switch/DBI/DBI_810_DE.nrosd:/switch/DBI/DBI_845_EN.nrosd:/switch/DBI/DBI_845_DE.nrosd:/switch/DBI/DBI.nro
41. Restore Tinfoil
- Source:
sd:/temp_backup/tinfoil/ - Destination:
sd:/switch/tinfoil/ - Cleanup: After restoration, deletes
sd:/switch/tinfoil/tinfoil.nro
42. Restore prod.keys
- Source:
sd:/temp_backup/prod.keys - Destination:
sd:/switch/prod.keys
43. Cleanup Backup Directory
Location: backup.c:98-103
- Deletes
sd:/temp_backup/directory after restoration
Step 4: Install Files
Location: install.c:620-623
- Same as Update Mode Step 2 (Steps 23-30)
- Copies all directories and files from staging
- Creates
manifest.ini
Step 5: Cleanup Staging
- Same as Update Mode Step 3 (Step 31)
- Removes staging directory
Phase 5: Completion & Launch
Step 44: Installation Summary
Location: main.c:363-377
- Display success message if
result == FR_OK && total_errors == 0 - Display error count if errors occurred
- Show completion status
Step 45: Payload Launch Wait
Location: main.c:382-454
- Wait for A button or Power button
- Check if
sd:/bootloader/update.binexists - If payload exists:
- Launch payload (relocates and executes)
- If payload doesn't exist:
- Display error message
- Wait for button again
- Reboot system
Technical Details
Progress Tracking
- File Counting: Recursively counts all files and directories before copy
- Progress Updates: Updates display every 10 items or when percentage changes
- Screen Management: Automatically clears and reprints header when approaching bottom of screen
Error Handling
- Path Existence Checks: Every operation checks if source exists before attempting
- File System Errors: Logged with descriptive error messages
- Fallback Methods: Some operations have fallback copy methods if primary fails
- Non-Fatal Errors: Staging directory cleanup failures are warned but don't abort installation
File Copy Mechanism
- Buffer Size: 1MB (
FS_BUFFER_SIZE = 0x100000) - Read/Write Verification: Verifies bytes read/written match expected amounts
- Attribute Preservation: Copies file attributes (via
f_chmod) - Recursive Copy: Handles nested directory structures automatically
Memory Management
- Dynamic Allocation: Uses heap for file buffers and path strings
- Cleanup: Frees allocated memory after use
- Stack Pivot: Switches to dedicated stack area for payload execution
Detection Logic
- Installation Detection: Based on
manifest.inifile, not version marker files - Variant Detection: Parses
current_packfrom manifest INI format - Pack Detection: Simple directory existence check (in priority order)
Summary
Update Mode Flow
- Detect existing installation → Update mode
- Selective cleanup (Steps 10-22)
- Copy new files (Steps 23-30)
- Create manifest (Step 30)
- Cleanup staging (Step 31)
Clean Install Mode Flow
- No installation detected → Clean install mode
- Backup user data (Steps 32-35)
- Full wipe (Steps 36-39)
- Restore user data (Steps 40-43)
- Copy new files (Steps 23-30)
- Create manifest (Step 30)
- Cleanup staging (Step 31)
Result: In both modes, the SD card ends up with a fresh OmniNX installation while preserving user data and savegames.