Difference between revisions of "Boot2"

From Nintendo Switch Brew
Jump to navigation Jump to search
 
(25 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 
boot2 is the first non-built-in sysmodule. It's hardcoded to be the first sysmodule launched by PM.
 
boot2 is the first non-built-in sysmodule. It's hardcoded to be the first sysmodule launched by PM.
  
On retail systems, the boot2 title installed is named "boot2.prodBoot" while on debug systems, the boot2 title installed is named "boot2". During [[Factory Setup|the factory setup process]], the installed boot2 title is "boot2.manuBoot".
+
On retail systems, the boot2 title is called [[#boot2.prodBoot|boot2.prodBoot]] while on debug systems it's called [[#boot2|boot2]]. Debug systems also have a version called [[#boot2.SafeMode|boot2.SafeMode]] installed in SAFE for safe mode. During [[Factory Setup|the factory setup process]] the boot2 title is called [[#boot2.manuBoot|boot2.manuBoot]] instead.
  
 
= boot2.prodBoot =
 
= boot2.prodBoot =
It connects to "pm:shell" service and launches the following titles in this order:
+
It opens the [[Process_Manager_services#pm:shell|pm:shell]] service and prior to [[10.0.0|10.0.0]] launches the following titles in order:
 
* 0100000000000021 (psc)
 
* 0100000000000021 (psc)
 
* 0100000000000009 (settings)
 
* 0100000000000009 (settings)
Line 13: Line 13:
 
* 010000000000001A (pcv)
 
* 010000000000001A (pcv)
  
Then it connects to "set:sys" and reads a bool from "boot" section called "force_maintenance" with default value true.
+
All processes are launched with [[Process_Manager_services|pm:shell]] LaunchProgram and launch_flags=0, Abort is used if the returned Result matches certain errors.
  
If the value reads successfully as false, it initializes "gpio" and opens sessions for GPIOs 26 and 25.
+
It then opens the [[Settings_services#set:sys|set:sys]] service and reads a bool from the "boot" section called "force_maintenance" with default value set to "true".
If both GPIOs read as zero, then [[Recovery_Mode|maintenance mode]] is forced despite the setting being false. This probably checks if both volume up and down keys are held down at the same time?
 
  
If it's in maintenance mode then it opens a session to "pm:bm" and calls cmd1.
+
If the value reads successfully as "false", it opens the [[Bus_services#gpio|gpio]] service and opens sessions for GPIOs 26 and 25.
 +
If both GPIOs read as zero, then [[Recovery_Mode|maintenance mode]] is forced despite the setting being false. This checks if both volume up and down keys are held down at the same time.
  
Then depending on maintenance mode or not it launches the following titles in this order:
+
If it's in maintenance mode then it opens the [[Process_Manager_services#pm:bm|pm:bm]] service and calls [[Process_Manager_services#pm:bm|SetMaintenanceBoot]].
 +
 
 +
Prior to [[10.0.0|10.0.0]] it then launches the following titles in order:
 
* 0100000000000023 (am)
 
* 0100000000000023 (am)
 
* 0100000000000019 (nvservices)
 
* 0100000000000019 (nvservices)
Line 27: Line 29:
 
* 010000000000001F (ns)
 
* 010000000000001F (ns)
 
* 0100000000000015 (lm)
 
* 0100000000000015 (lm)
* 010000000000001B (ppc)
+
* 010000000000001B (ppc) [1.0.0-8.1.0]
 
* 0100000000000010 (ptm)
 
* 0100000000000010 (ptm)
 
* 0100000000000013 (hid)
 
* 0100000000000013 (hid)
Line 38: Line 40:
 
* 0100000000000018 (ldn)
 
* 0100000000000018 (ldn)
 
* 010000000000001E (account)
 
* 010000000000001E (account)
* 010000000000000E (friends) [skipped in maintenance]
+
* 010000000000000E (friends) [skipped in maintenance mode]
 
* 0100000000000020 (nfc)
 
* 0100000000000020 (nfc)
 
* 010000000000003C (jpegdec) [4.0.0+]
 
* 010000000000003C (jpegdec) [4.0.0+]
Line 44: Line 46:
 
* 0100000000000024 (ssl)
 
* 0100000000000024 (ssl)
 
* 0100000000000025 (nim)
 
* 0100000000000025 (nim)
* 010000000000000C (bcat) [skipped in maintenance]
+
* 010000000000000C (bcat) [skipped in maintenance mode]
 
* 010000000000002B (erpt)
 
* 010000000000002B (erpt)
 
* 0100000000000033 (es)
 
* 0100000000000033 (es)
 
* 010000000000002E (pctl)
 
* 010000000000002E (pctl)
 
* 010000000000002A (btm)
 
* 010000000000002A (btm)
* 0100000000000030 (eupld) [skipped in maintenance]
+
* 0100000000000030 (eupld) [skipped in maintenance mode]
 
* 0100000000000031 (glue)
 
* 0100000000000031 (glue)
 
* 0100000000000032 (eclct)
 
* 0100000000000032 (eclct)
* 010000000000002F (npns) [skipped in maintenance]
+
* 010000000000002F (npns) [skipped in maintenance mode on 1.0.0-6.2.0]
 
* 0100000000000034 (fatal)
 
* 0100000000000034 (fatal)
 
* 0100000000000037 (ro) [3.0.0+]
 
* 0100000000000037 (ro) [3.0.0+]
Line 59: Line 61:
 
* 010000000000003A (migration) [4.0.0+]
 
* 010000000000003A (migration) [4.0.0+]
 
* 0100000000000035 (grc) [4.0.0+]
 
* 0100000000000035 (grc) [4.0.0+]
 +
* 010000000000003E (olsc) [6.0.0+]
 +
* 0100000000000041 (ngct) [9.0.0+]
 +
 +
In [[10.0.0|10.0.0]] the order was switched up a bit
 +
 +
It now starts by launching the following titles in order:
 +
* 0100000000000021 (psc)
 +
* 0100000000000009 (settings)
 +
* 0100000000000006 (usb)
 +
* 010000000000001D (pcie)
 +
* 010000000000000A (bus)
 +
* 010000000000001A (pcv)
 +
* 0100000000000007 (tma)
 +
 +
Then it launches the following titles in order:
 +
* 0100000000000045 (omm) [14.0.0+]
 +
* 0100000000000023 (am)
 +
* 0100000000000019 (nvservices)
 +
* 010000000000001C (nvnflinger)
 +
* 010000000000002D (vi)
 +
* 0100000000000042 (pgl)
 +
* 010000000000001F (ns)
 +
* 0100000000000015 (lm)
 +
* 0100000000000010 (ptm)
 +
* 0100000000000013 (hid)
 +
* 0100000000000014 (audio)
 +
* 0100000000000016 (wlan)
 +
* 010000000000000B (bluetooth)
 +
* 0100000000000012 (bsdsockets)
 +
* 0100000000000046 (eth) [15.0.0+]
 +
* 010000000000000F (nifm)
 +
* 0100000000000018 (ldn)
 +
* 010000000000001E (account)
 +
* 0100000000000020 (nfc)
 +
* 010000000000003C (jpegdec)
 +
* 0100000000000022 (capsrv)
 +
* 010000000000001B (capmtp) [11.0.0+]
 +
* 0100000000000024 (ssl)
 +
* 0100000000000025 (nim)
 +
* 010000000000002B (erpt)
 +
* 0100000000000033 (es)
 +
* 010000000000002E (pctl)
 +
* 010000000000002A (btm)
 +
* 0100000000000031 (glue)
 +
* 0100000000000032 (eclct)
 +
* 010000000000002F (npns)
 +
* 0100000000000034 (fatal)
 +
* 0100000000000037 (ro)
 +
* 0100000000000038 (profiler) (doesn't exist on retail systems)
 +
* 0100000000000039 (sdb)
 +
* 010000000000003A (migration) [10.0.0-11.0.1]
 +
* 0100000000000035 (grc) [10.0.0-11.0.1]
 +
* 010000000000003E (olsc)
 +
* 0100000000000050 (ngc) [16.0.0+]
 +
* 0100000000000041 (ngct)
 +
* 010000000000000E (friends) [skipped in maintenance mode]
 +
* 010000000000000C (bcat) [skipped in maintenance mode]
 +
* 0100000000000030 (eupld) [skipped in maintenance mode]
 +
 +
[16.0.0+] After launching pcv and before tma, it uses [[NCM_services|ncm]] cmd15 with input value 0, Aborting on failure (service init/exit is also done in nnMain now).
 +
 +
After launching all titles, it'll check the "boot!boot_devmenuapp_installer" setting and attempt to launch 01000000000020f0 (devmenuapp_installer) if it's set to true.
  
 
This list is probably optimized for boot-time. It launches display-related things first presumably to make sure it displays something as soon as possible.
 
This list is probably optimized for boot-time. It launches display-related things first presumably to make sure it displays something as soon as possible.
Line 65: Line 129:
  
 
= boot2 =
 
= boot2 =
Depending on maintenance mode, boot2 boots titles in the following order:
+
Just like [[#boot2.prodBoot|boot2.prodBoot]], it opens the [[Process_Manager_services#pm:shell|pm:shell]] service and prior to [[10.0.0|10.0.0]] launches the following titles in order:
 
* 0100000000000021 (psc)
 
* 0100000000000021 (psc)
 
* 0100000000000009 (settings)
 
* 0100000000000009 (settings)
Line 73: Line 137:
 
* 0100000000000007 (tma)
 
* 0100000000000007 (tma)
 
* 010000000000001A (pcv)
 
* 010000000000001A (pcv)
 +
 +
It then launches the following titles in order:
 
* 0100000000000023 (am)
 
* 0100000000000023 (am)
 
* 0100000000000019 (nvservices)
 
* 0100000000000019 (nvservices)
Line 78: Line 144:
 
* 010000000000002D (vi)
 
* 010000000000002D (vi)
 
* 010000000000001F (ns)
 
* 010000000000001F (ns)
* 0100000000003003 (???)
+
* 0100000000003003 (DebugMonitor0) [1.0.0-4.1.0]
 
* 010000000000000D (dmnt)
 
* 010000000000000D (dmnt)
 
* 0100000000000015 (lm)
 
* 0100000000000015 (lm)
* 010000000000001B (ppc)
+
* 010000000000001B (ppc) [1.0.0-8.1.0]
 
* 0100000000000010 (ptm)
 
* 0100000000000010 (ptm)
 
* 0100000000000017 (cs)
 
* 0100000000000017 (cs)
Line 94: Line 160:
 
* 0100000000000018 (ldn)
 
* 0100000000000018 (ldn)
 
* 010000000000001E (account)
 
* 010000000000001E (account)
* 010000000000000E (friends) [skipped in maintenance]
+
* 010000000000000E (friends) [skipped in maintenance mode]
 
* 0100000000000020 (nfc)
 
* 0100000000000020 (nfc)
 +
* 010000000000003C (jpegdec) [4.0.0+]
 
* 0100000000000022 (capsrv)
 
* 0100000000000022 (capsrv)
 
* 0100000000000024 (ssl)
 
* 0100000000000024 (ssl)
 
* 0100000000000025 (nim)
 
* 0100000000000025 (nim)
* 010000000000000C (bcat) [skipped in maintenance]
+
* 010000000000000C (bcat) [skipped in maintenance mode]
 +
* 010000000000002B (erpt)
 +
* 0100000000000033 (es)
 +
* 010000000000002E (pctl)
 +
* 010000000000002A (btm)
 +
* 0100000000000030 (eupld) [skipped in maintenance mode]
 +
* 0100000000000031 (glue)
 +
* 0100000000000032 (eclct)
 +
* 010000000000B120 (nvdbgsvc)
 +
* 010000000000002F (npns) [skipped in maintenance mode on 1.0.0-6.2.0]
 +
* 0100000000000034 (fatal)
 +
* 0100000000000037 (ro) [3.0.0+]
 +
* 0100000000000038 (profiler)
 +
* 0100000000000039 (sdb) [3.0.0+]
 +
* 010000000000003A (migration) [4.0.0+]
 +
* 0100000000000035 (grc) [4.0.0+]
 +
* 010000000000003E (olsc) [6.0.0+]
 +
* 0100000000000041 (ngct) [9.0.0+]
 +
 
 +
In [[10.0.0|10.0.0]] the order was switched up a bit
 +
 
 +
It now starts by launching the following titles in order:
 +
* 0100000000000021 (psc)
 +
* 0100000000000009 (settings)
 +
* 0100000000000006 (usb)
 +
* 010000000000001D (pcie)
 +
* 010000000000000A (bus)
 +
* 010000000000001A (pcv)
 +
* 0100000000000007 (tma) or 010000000000B240 (htc)
 +
* 0100000000000051 (dmgr) [17.0.0+]
 +
* 010000000000000D (dmnt) or 010000000000D609 (dmnt.gen2)
 +
 
 +
If the "boot!use_htc_gen2" setting is set to "true", htc and dmnt.gen2 are used, otherwise tma and dmnt are used.
 +
 
 +
Then it launches the following titles in order:
 +
* 0100000000000045 (omm) [14.0.0+]
 +
* 0100000000000023 (am)
 +
* 0100000000000019 (nvservices)
 +
* 010000000000001C (nvnflinger)
 +
* 010000000000002D (vi)
 +
* 010000000000B120 (nvdbgsvc)
 +
* 0100000000000017 (cs)
 +
* 0100000000000011 (shell)
 +
* 010000000000D640 (htcnet) [16.0.0+] [skipped in maintenance]
 +
* 010000000000D633 [14.0.0+] [skipped in maintenance mode]
 +
* 0100000000000042 (pgl)
 +
* 010000000000001F (ns)
 +
* 0100000000000015 (lm)
 +
* 0100000000000010 (ptm)
 +
* 0100000000000013 (hid)
 +
* 0100000000000014 (audio)
 +
* 0100000000000016 (wlan)
 +
* 010000000000000B (bluetooth)
 +
* 0100000000000012 (bsdsockets)
 +
* 0100000000000046 (eth) [15.0.0+]
 +
* 010000000000000F (nifm)
 +
* 0100000000000018 (ldn)
 +
* 010000000000001E (account)
 +
* 0100000000000020 (nfc)
 +
* 010000000000003C (jpegdec)
 +
* 0100000000000022 (capsrv)
 +
* 010000000000001B (capmtp) [11.0.0+]
 +
* 0100000000000024 (sll)
 +
* 0100000000000025 (nim)
 
* 010000000000002B (erpt)
 
* 010000000000002B (erpt)
 
* 0100000000000033 (es)
 
* 0100000000000033 (es)
 
* 010000000000002E (pctl)
 
* 010000000000002E (pctl)
 
* 010000000000002A (btm)
 
* 010000000000002A (btm)
* 0100000000000030 (eupld) [skipped in maintenance]
 
 
* 0100000000000031 (glue)
 
* 0100000000000031 (glue)
 
* 0100000000000032 (eclct)
 
* 0100000000000032 (eclct)
* 010000000000002F (npns) [skipped in maintenance]
+
* 010000000000002F (npns)
 
* 0100000000000034 (fatal)
 
* 0100000000000034 (fatal)
 +
* 0100000000000037 (ro)
 +
* 0100000000000038 (profiler)
 +
* 0100000000000039 (sdb)
 +
* 010000000000003A (migration) [10.0.0-11.0.1]
 +
* 0100000000000035 (grc) [10.0.0-11.0.1]
 +
* 010000000000003E (olsc)
 +
* 0100000000000050 (ngc) [16.0.0+]
 +
* 0100000000000041 (ngct)
 +
* 010000000000000E (friends) [skipped in maintenance mode]
 +
* 010000000000000C (bcat) [skipped in maintenance mode]
 +
* 0100000000000030 (eupld) [skipped in maintenance mode]
 +
 +
After launching all titles, it'll check the "boot!boot_devmenuapp_installer" setting and attempt to launch 01000000000020f0 (devmenuapp_installer) if it's set to true.
 +
 +
= boot2.SafeMode =
 +
Normally it launches the exact same titles as [[#boot2.prodBoot|boot2.prodBoot]] in the same order, but then finishes by launching 0100000000002041 (recovery) before exiting itself.
 +
 +
In maintenance mode its launch order is identical to the launch order in [[#boot2|boot2]] maintenance mode.
 +
 +
= boot2.Minimum =
 +
This is used for recovery mode on development systems on 4.1.0+.
 +
 +
Just like [[#boot2.prodBoot|boot2.prodBoot]], it opens the [[Process_Manager_services#pm:shell|pm:shell]] service and prior to 10.0.0 launches the following titles in order:
 +
* 0100000000000021 (psc)
 +
* 0100000000000009 (settings)
 +
* 0100000000000006 (usb)
 +
* 010000000000001D (pcie)
 +
* 010000000000000A (bus)
 +
* 0100000000000007 (tma)
 +
* 010000000000001A (pcv)
 +
* 0100000000000015 (lm)
 +
* 010000000000000D (dmnt)
 +
* 010000000000001F (ns)
 +
* 0100000000000037 (ro)
 +
* 010000000000B22A (scs)
 +
 +
In 10.0.0 the order was switched up a bit
  
= boot2.manuBoot =
+
It now launches the following titles in order:
When not in maintenance mode, boot2.manuBoot boots exactly the same titles as boot2.prodBoot in the same order, and then finishes by booting 010000000000B14A ([[Manu Services|Manu]]) before exiting.
+
* 0100000000000021 (psc)
 +
* 0100000000000009 (settings)
 +
* 0100000000000006 (usb)
 +
* 010000000000001D (pcie)
 +
* 010000000000000A (bus)
 +
* 010000000000001A (pcv)
 +
* 010000000000000D (dmnt) or 010000000000D609 (dmnt.gen2)
 +
* 0100000000000007 (tma) or 010000000000B240 (htc)
 +
* 0100000000000015 (lm)
 +
* 0100000000000042 (pgl)
 +
* 0100000000000037 (ro)
 +
* 010000000000B22A (scs) [10.0.0-11.0.1]
 +
* 0100000000000017 (cs) [12.0.0+]
 +
 
 +
If the "boot!use_htc_gen2" setting is set to "true", htc and dmnt.gen2 are used, otherwise tma and dmnt are used (Note: dmnt and dmnt.gen2 are not currently present in recovery mode).
  
When in maintenance mode, boot2.manuBoot boots titles in the following order:
+
After launching all titles, it'll check the "boot!boot_devmenuapp_installer" setting and attempt to launch 01000000000020f0 (devmenuapp_installer) if it's set to true.
 +
 
 +
= boot2.ManuBoot =
 +
Just like [[#boot2.prodBoot|boot2.prodBoot]], it opens the [[Process_Manager_services#pm:shell|pm:shell]] service and launches the following titles in order:
 
* 0100000000000021 (psc)
 
* 0100000000000021 (psc)
 
* 0100000000000009 (settings)
 
* 0100000000000009 (settings)
Line 121: Line 304:
 
* 0100000000000007 (tma)
 
* 0100000000000007 (tma)
 
* 010000000000001A (pcv)
 
* 010000000000001A (pcv)
 +
 +
If maintenance mode was requested, it then launches the following titles in order:
 
* 0100000000000023 (am)
 
* 0100000000000023 (am)
 
* 0100000000000019 (nvservices)
 
* 0100000000000019 (nvservices)
 
* 010000000000001C (nvnflinger)
 
* 010000000000001C (nvnflinger)
 
* 010000000000002D (vi)
 
* 010000000000002D (vi)
 +
* 010000000000001F (ns)
 
* 010000000000000D (dmnt)
 
* 010000000000000D (dmnt)
 
* 010000000000001F (ns)
 
* 010000000000001F (ns)
 
* 0100000000000015 (lm)
 
* 0100000000000015 (lm)
 +
* 010000000000001B (ppc) [1.0.0-8.1.0]
 +
* 0100000000000010 (ptm)
 
* 0100000000000017 (cs)
 
* 0100000000000017 (cs)
 
* 0100000000000011 (shell)
 
* 0100000000000011 (shell)
Line 140: Line 328:
 
* 010000000000001E (account)
 
* 010000000000001E (account)
 
* 0100000000000020 (nfc)
 
* 0100000000000020 (nfc)
 +
* 010000000000003C (jpegdec) [4.0.0+]
 
* 0100000000000022 (capsrv)
 
* 0100000000000022 (capsrv)
 
* 0100000000000024 (ssl)
 
* 0100000000000024 (ssl)
Line 149: Line 338:
 
* 0100000000000031 (glue)
 
* 0100000000000031 (glue)
 
* 0100000000000032 (eclct)
 
* 0100000000000032 (eclct)
* 010000000000B120 (???)
+
* 010000000000B120 (nvdbgsvc)
 +
* 010000000000002F (npns) [7.0.0+]
 
* 0100000000000034 (fatal)
 
* 0100000000000034 (fatal)
* 01000000000020D1 (???)
+
* 0100000000000037 (ro) [3.0.0+]
 +
* 0100000000000038 (profiler) [3.0.0+]
 +
* 0100000000000039 (sdb) [3.0.0+]
 +
* 010000000000003A (migration) [4.0.0+]
 +
* 0100000000000035 (grc) [4.0.0+]
 +
* 010000000000003E (olsc) [6.0.0+]
 +
* 0100000000000041 (ngct) [9.0.0+]
 +
* 01000000000020D1 (DevSafeModeUpdater) [1.0.0]
 +
 
 +
Otherwise, it launches exactly the same titles as [[#boot2.prodBoot|boot2.prodBoot]] in the same order, but then finishes by launching 010000000000B14A ([[Manu Services|Manu]]) before exiting itself.
 +
 
 +
After launching all titles, it'll check the "boot!boot_devmenuapp_installer" setting and attempt to launch 01000000000020f0 (devmenuapp_installer) if it's set to true.
 +
 
 +
= boot2.Manu1st =
 +
As of version [[2.1.0|2.1.0]], just like [[#boot2.prodBoot|boot2.prodBoot]], it opens the [[Process_Manager_services#pm:shell|pm:shell]] service and launches the following titles in order:
 +
* 0100000000000021 (psc)
 +
* 0100000000000009 (settings)
 +
* 0100000000000006 (usb)
 +
* 010000000000001D (pcie)
 +
* 010000000000000A (bus)
 +
* 0100000000000007 (tma)
 +
* 010000000000001A (pcv)
 +
 
 +
At this point it checks if the device is being booted in maintenance mode, if it is it opens the [[Process_Manager_services#pm:bm|pm:bm]] service and calls [[Process_Manager_services#pm:bm|SetMaintenanceBoot]] then attempts to to launch titles in the same order that [[#boot2.ManuBoot|boot2.ManuBoot]] does in maintenance mode.
 +
 
 +
Then it attempts to launch the following titles in the following order:
 +
* 010000000000001F (ns)
 +
* 0100000000000015 (lm)
 +
* 0100000000000034 (fatal)
 +
* 010000000000B14A (manu)
 +
 
 +
After launching these processes, it exits.
 +
 
 +
= boot2.FromHost =
 +
Just like [[#boot2.prodBoot|boot2.prodBoot]], it opens the [[Process_Manager_services#pm:shell|pm:shell]] service and launches the following titles in order:
 +
* 0100000000000021 (psc)
 +
* 0100000000000009 (settings)
 +
* 0100000000000006 (usb)
 +
* 010000000000001D (pcie)
 +
* 010000000000000A (bus)
 +
* 0100000000000007 (tma)
 +
* 010000000000001A (pcv)
 +
 
 +
After launching these processes it'll attempt to load a list of process to launch off the host device.
 +
 
 +
First it checks if a "SIGLO_BOOT_LIST_DIR" environmental variable is present on the host device, if it is, it loads the list from "NX-NXFP2-a64.txt" from the directory specified in "SIGLO_BOOT_LIST_DIR".
 +
 
 +
If that fails, it checks if a "SIGLO_BOOT_LIST_PATH" environmental variable is present on the host device, if it is, it loads the list from the path specified by "SIGLO_BOOT_LIST_PATH".
  
Note that these unknown titles are not present in either retail firmware or factory firmware.
+
If that also fails, it defaults to loading "C:/siglo_boot/list.txt" from the host PC.

Latest revision as of 21:43, 31 October 2023

boot2 is the first non-built-in sysmodule. It's hardcoded to be the first sysmodule launched by PM.

On retail systems, the boot2 title is called boot2.prodBoot while on debug systems it's called boot2. Debug systems also have a version called boot2.SafeMode installed in SAFE for safe mode. During the factory setup process the boot2 title is called boot2.manuBoot instead.

boot2.prodBoot

It opens the pm:shell service and prior to 10.0.0 launches the following titles in order:

  • 0100000000000021 (psc)
  • 0100000000000009 (settings)
  • 0100000000000006 (usb)
  • 010000000000001D (pcie)
  • 010000000000000A (bus)
  • 0100000000000007 (tma)
  • 010000000000001A (pcv)

All processes are launched with pm:shell LaunchProgram and launch_flags=0, Abort is used if the returned Result matches certain errors.

It then opens the set:sys service and reads a bool from the "boot" section called "force_maintenance" with default value set to "true".

If the value reads successfully as "false", it opens the gpio service and opens sessions for GPIOs 26 and 25. If both GPIOs read as zero, then maintenance mode is forced despite the setting being false. This checks if both volume up and down keys are held down at the same time.

If it's in maintenance mode then it opens the pm:bm service and calls SetMaintenanceBoot.

Prior to 10.0.0 it then launches the following titles in order:

  • 0100000000000023 (am)
  • 0100000000000019 (nvservices)
  • 010000000000001C (nvnflinger)
  • 010000000000002D (vi)
  • 010000000000001F (ns)
  • 0100000000000015 (lm)
  • 010000000000001B (ppc) [1.0.0-8.1.0]
  • 0100000000000010 (ptm)
  • 0100000000000013 (hid)
  • 0100000000000014 (audio)
  • 0100000000000029 (lbl)
  • 0100000000000016 (wlan)
  • 010000000000000B (bluetooth)
  • 0100000000000012 (bsdsockets)
  • 010000000000000F (nifm)
  • 0100000000000018 (ldn)
  • 010000000000001E (account)
  • 010000000000000E (friends) [skipped in maintenance mode]
  • 0100000000000020 (nfc)
  • 010000000000003C (jpegdec) [4.0.0+]
  • 0100000000000022 (capsrv)
  • 0100000000000024 (ssl)
  • 0100000000000025 (nim)
  • 010000000000000C (bcat) [skipped in maintenance mode]
  • 010000000000002B (erpt)
  • 0100000000000033 (es)
  • 010000000000002E (pctl)
  • 010000000000002A (btm)
  • 0100000000000030 (eupld) [skipped in maintenance mode]
  • 0100000000000031 (glue)
  • 0100000000000032 (eclct)
  • 010000000000002F (npns) [skipped in maintenance mode on 1.0.0-6.2.0]
  • 0100000000000034 (fatal)
  • 0100000000000037 (ro) [3.0.0+]
  • 0100000000000038 (profiler) (doesn't exist on retail systems) [3.0.0+]
  • 0100000000000039 (sdb) [3.0.0+]
  • 010000000000003A (migration) [4.0.0+]
  • 0100000000000035 (grc) [4.0.0+]
  • 010000000000003E (olsc) [6.0.0+]
  • 0100000000000041 (ngct) [9.0.0+]

In 10.0.0 the order was switched up a bit

It now starts by launching the following titles in order:

  • 0100000000000021 (psc)
  • 0100000000000009 (settings)
  • 0100000000000006 (usb)
  • 010000000000001D (pcie)
  • 010000000000000A (bus)
  • 010000000000001A (pcv)
  • 0100000000000007 (tma)

Then it launches the following titles in order:

  • 0100000000000045 (omm) [14.0.0+]
  • 0100000000000023 (am)
  • 0100000000000019 (nvservices)
  • 010000000000001C (nvnflinger)
  • 010000000000002D (vi)
  • 0100000000000042 (pgl)
  • 010000000000001F (ns)
  • 0100000000000015 (lm)
  • 0100000000000010 (ptm)
  • 0100000000000013 (hid)
  • 0100000000000014 (audio)
  • 0100000000000016 (wlan)
  • 010000000000000B (bluetooth)
  • 0100000000000012 (bsdsockets)
  • 0100000000000046 (eth) [15.0.0+]
  • 010000000000000F (nifm)
  • 0100000000000018 (ldn)
  • 010000000000001E (account)
  • 0100000000000020 (nfc)
  • 010000000000003C (jpegdec)
  • 0100000000000022 (capsrv)
  • 010000000000001B (capmtp) [11.0.0+]
  • 0100000000000024 (ssl)
  • 0100000000000025 (nim)
  • 010000000000002B (erpt)
  • 0100000000000033 (es)
  • 010000000000002E (pctl)
  • 010000000000002A (btm)
  • 0100000000000031 (glue)
  • 0100000000000032 (eclct)
  • 010000000000002F (npns)
  • 0100000000000034 (fatal)
  • 0100000000000037 (ro)
  • 0100000000000038 (profiler) (doesn't exist on retail systems)
  • 0100000000000039 (sdb)
  • 010000000000003A (migration) [10.0.0-11.0.1]
  • 0100000000000035 (grc) [10.0.0-11.0.1]
  • 010000000000003E (olsc)
  • 0100000000000050 (ngc) [16.0.0+]
  • 0100000000000041 (ngct)
  • 010000000000000E (friends) [skipped in maintenance mode]
  • 010000000000000C (bcat) [skipped in maintenance mode]
  • 0100000000000030 (eupld) [skipped in maintenance mode]

[16.0.0+] After launching pcv and before tma, it uses ncm cmd15 with input value 0, Aborting on failure (service init/exit is also done in nnMain now).

After launching all titles, it'll check the "boot!boot_devmenuapp_installer" setting and attempt to launch 01000000000020f0 (devmenuapp_installer) if it's set to true.

This list is probably optimized for boot-time. It launches display-related things first presumably to make sure it displays something as soon as possible.

After that, the process exits itself.

boot2

Just like boot2.prodBoot, it opens the pm:shell service and prior to 10.0.0 launches the following titles in order:

  • 0100000000000021 (psc)
  • 0100000000000009 (settings)
  • 0100000000000006 (usb)
  • 010000000000001D (pcie)
  • 010000000000000A (bus)
  • 0100000000000007 (tma)
  • 010000000000001A (pcv)

It then launches the following titles in order:

  • 0100000000000023 (am)
  • 0100000000000019 (nvservices)
  • 010000000000001C (nvnflinger)
  • 010000000000002D (vi)
  • 010000000000001F (ns)
  • 0100000000003003 (DebugMonitor0) [1.0.0-4.1.0]
  • 010000000000000D (dmnt)
  • 0100000000000015 (lm)
  • 010000000000001B (ppc) [1.0.0-8.1.0]
  • 0100000000000010 (ptm)
  • 0100000000000017 (cs)
  • 0100000000000011 (shell)
  • 0100000000000013 (hid)
  • 0100000000000014 (audio)
  • 0100000000000029 (lbl)
  • 0100000000000016 (wlan)
  • 010000000000000B (bluetooth)
  • 0100000000000012 (bsdsockets)
  • 010000000000000F (nifm)
  • 0100000000000018 (ldn)
  • 010000000000001E (account)
  • 010000000000000E (friends) [skipped in maintenance mode]
  • 0100000000000020 (nfc)
  • 010000000000003C (jpegdec) [4.0.0+]
  • 0100000000000022 (capsrv)
  • 0100000000000024 (ssl)
  • 0100000000000025 (nim)
  • 010000000000000C (bcat) [skipped in maintenance mode]
  • 010000000000002B (erpt)
  • 0100000000000033 (es)
  • 010000000000002E (pctl)
  • 010000000000002A (btm)
  • 0100000000000030 (eupld) [skipped in maintenance mode]
  • 0100000000000031 (glue)
  • 0100000000000032 (eclct)
  • 010000000000B120 (nvdbgsvc)
  • 010000000000002F (npns) [skipped in maintenance mode on 1.0.0-6.2.0]
  • 0100000000000034 (fatal)
  • 0100000000000037 (ro) [3.0.0+]
  • 0100000000000038 (profiler)
  • 0100000000000039 (sdb) [3.0.0+]
  • 010000000000003A (migration) [4.0.0+]
  • 0100000000000035 (grc) [4.0.0+]
  • 010000000000003E (olsc) [6.0.0+]
  • 0100000000000041 (ngct) [9.0.0+]

In 10.0.0 the order was switched up a bit

It now starts by launching the following titles in order:

  • 0100000000000021 (psc)
  • 0100000000000009 (settings)
  • 0100000000000006 (usb)
  • 010000000000001D (pcie)
  • 010000000000000A (bus)
  • 010000000000001A (pcv)
  • 0100000000000007 (tma) or 010000000000B240 (htc)
  • 0100000000000051 (dmgr) [17.0.0+]
  • 010000000000000D (dmnt) or 010000000000D609 (dmnt.gen2)

If the "boot!use_htc_gen2" setting is set to "true", htc and dmnt.gen2 are used, otherwise tma and dmnt are used.

Then it launches the following titles in order:

  • 0100000000000045 (omm) [14.0.0+]
  • 0100000000000023 (am)
  • 0100000000000019 (nvservices)
  • 010000000000001C (nvnflinger)
  • 010000000000002D (vi)
  • 010000000000B120 (nvdbgsvc)
  • 0100000000000017 (cs)
  • 0100000000000011 (shell)
  • 010000000000D640 (htcnet) [16.0.0+] [skipped in maintenance]
  • 010000000000D633 [14.0.0+] [skipped in maintenance mode]
  • 0100000000000042 (pgl)
  • 010000000000001F (ns)
  • 0100000000000015 (lm)
  • 0100000000000010 (ptm)
  • 0100000000000013 (hid)
  • 0100000000000014 (audio)
  • 0100000000000016 (wlan)
  • 010000000000000B (bluetooth)
  • 0100000000000012 (bsdsockets)
  • 0100000000000046 (eth) [15.0.0+]
  • 010000000000000F (nifm)
  • 0100000000000018 (ldn)
  • 010000000000001E (account)
  • 0100000000000020 (nfc)
  • 010000000000003C (jpegdec)
  • 0100000000000022 (capsrv)
  • 010000000000001B (capmtp) [11.0.0+]
  • 0100000000000024 (sll)
  • 0100000000000025 (nim)
  • 010000000000002B (erpt)
  • 0100000000000033 (es)
  • 010000000000002E (pctl)
  • 010000000000002A (btm)
  • 0100000000000031 (glue)
  • 0100000000000032 (eclct)
  • 010000000000002F (npns)
  • 0100000000000034 (fatal)
  • 0100000000000037 (ro)
  • 0100000000000038 (profiler)
  • 0100000000000039 (sdb)
  • 010000000000003A (migration) [10.0.0-11.0.1]
  • 0100000000000035 (grc) [10.0.0-11.0.1]
  • 010000000000003E (olsc)
  • 0100000000000050 (ngc) [16.0.0+]
  • 0100000000000041 (ngct)
  • 010000000000000E (friends) [skipped in maintenance mode]
  • 010000000000000C (bcat) [skipped in maintenance mode]
  • 0100000000000030 (eupld) [skipped in maintenance mode]

After launching all titles, it'll check the "boot!boot_devmenuapp_installer" setting and attempt to launch 01000000000020f0 (devmenuapp_installer) if it's set to true.

boot2.SafeMode

Normally it launches the exact same titles as boot2.prodBoot in the same order, but then finishes by launching 0100000000002041 (recovery) before exiting itself.

In maintenance mode its launch order is identical to the launch order in boot2 maintenance mode.

boot2.Minimum

This is used for recovery mode on development systems on 4.1.0+.

Just like boot2.prodBoot, it opens the pm:shell service and prior to 10.0.0 launches the following titles in order:

  • 0100000000000021 (psc)
  • 0100000000000009 (settings)
  • 0100000000000006 (usb)
  • 010000000000001D (pcie)
  • 010000000000000A (bus)
  • 0100000000000007 (tma)
  • 010000000000001A (pcv)
  • 0100000000000015 (lm)
  • 010000000000000D (dmnt)
  • 010000000000001F (ns)
  • 0100000000000037 (ro)
  • 010000000000B22A (scs)

In 10.0.0 the order was switched up a bit

It now launches the following titles in order:

  • 0100000000000021 (psc)
  • 0100000000000009 (settings)
  • 0100000000000006 (usb)
  • 010000000000001D (pcie)
  • 010000000000000A (bus)
  • 010000000000001A (pcv)
  • 010000000000000D (dmnt) or 010000000000D609 (dmnt.gen2)
  • 0100000000000007 (tma) or 010000000000B240 (htc)
  • 0100000000000015 (lm)
  • 0100000000000042 (pgl)
  • 0100000000000037 (ro)
  • 010000000000B22A (scs) [10.0.0-11.0.1]
  • 0100000000000017 (cs) [12.0.0+]

If the "boot!use_htc_gen2" setting is set to "true", htc and dmnt.gen2 are used, otherwise tma and dmnt are used (Note: dmnt and dmnt.gen2 are not currently present in recovery mode).

After launching all titles, it'll check the "boot!boot_devmenuapp_installer" setting and attempt to launch 01000000000020f0 (devmenuapp_installer) if it's set to true.

boot2.ManuBoot

Just like boot2.prodBoot, it opens the pm:shell service and launches the following titles in order:

  • 0100000000000021 (psc)
  • 0100000000000009 (settings)
  • 0100000000000006 (usb)
  • 010000000000001D (pcie)
  • 010000000000000A (bus)
  • 0100000000000007 (tma)
  • 010000000000001A (pcv)

If maintenance mode was requested, it then launches the following titles in order:

  • 0100000000000023 (am)
  • 0100000000000019 (nvservices)
  • 010000000000001C (nvnflinger)
  • 010000000000002D (vi)
  • 010000000000001F (ns)
  • 010000000000000D (dmnt)
  • 010000000000001F (ns)
  • 0100000000000015 (lm)
  • 010000000000001B (ppc) [1.0.0-8.1.0]
  • 0100000000000010 (ptm)
  • 0100000000000017 (cs)
  • 0100000000000011 (shell)
  • 0100000000000013 (hid)
  • 0100000000000014 (audio)
  • 0100000000000029 (lbl)
  • 0100000000000016 (wlan)
  • 010000000000000B (bluetooth)
  • 0100000000000012 (bsdsockets)
  • 010000000000000F (nifm)
  • 0100000000000018 (ldn)
  • 010000000000001E (account)
  • 0100000000000020 (nfc)
  • 010000000000003C (jpegdec) [4.0.0+]
  • 0100000000000022 (capsrv)
  • 0100000000000024 (ssl)
  • 0100000000000025 (nim)
  • 010000000000002B (erpt)
  • 0100000000000033 (es)
  • 010000000000002E (pctl)
  • 010000000000002A (btm)
  • 0100000000000031 (glue)
  • 0100000000000032 (eclct)
  • 010000000000B120 (nvdbgsvc)
  • 010000000000002F (npns) [7.0.0+]
  • 0100000000000034 (fatal)
  • 0100000000000037 (ro) [3.0.0+]
  • 0100000000000038 (profiler) [3.0.0+]
  • 0100000000000039 (sdb) [3.0.0+]
  • 010000000000003A (migration) [4.0.0+]
  • 0100000000000035 (grc) [4.0.0+]
  • 010000000000003E (olsc) [6.0.0+]
  • 0100000000000041 (ngct) [9.0.0+]
  • 01000000000020D1 (DevSafeModeUpdater) [1.0.0]

Otherwise, it launches exactly the same titles as boot2.prodBoot in the same order, but then finishes by launching 010000000000B14A (Manu) before exiting itself.

After launching all titles, it'll check the "boot!boot_devmenuapp_installer" setting and attempt to launch 01000000000020f0 (devmenuapp_installer) if it's set to true.

boot2.Manu1st

As of version 2.1.0, just like boot2.prodBoot, it opens the pm:shell service and launches the following titles in order:

  • 0100000000000021 (psc)
  • 0100000000000009 (settings)
  • 0100000000000006 (usb)
  • 010000000000001D (pcie)
  • 010000000000000A (bus)
  • 0100000000000007 (tma)
  • 010000000000001A (pcv)

At this point it checks if the device is being booted in maintenance mode, if it is it opens the pm:bm service and calls SetMaintenanceBoot then attempts to to launch titles in the same order that boot2.ManuBoot does in maintenance mode.

Then it attempts to launch the following titles in the following order:

  • 010000000000001F (ns)
  • 0100000000000015 (lm)
  • 0100000000000034 (fatal)
  • 010000000000B14A (manu)

After launching these processes, it exits.

boot2.FromHost

Just like boot2.prodBoot, it opens the pm:shell service and launches the following titles in order:

  • 0100000000000021 (psc)
  • 0100000000000009 (settings)
  • 0100000000000006 (usb)
  • 010000000000001D (pcie)
  • 010000000000000A (bus)
  • 0100000000000007 (tma)
  • 010000000000001A (pcv)

After launching these processes it'll attempt to load a list of process to launch off the host device.

First it checks if a "SIGLO_BOOT_LIST_DIR" environmental variable is present on the host device, if it is, it loads the list from "NX-NXFP2-a64.txt" from the directory specified in "SIGLO_BOOT_LIST_DIR".

If that fails, it checks if a "SIGLO_BOOT_LIST_PATH" environmental variable is present on the host device, if it is, it loads the list from the path specified by "SIGLO_BOOT_LIST_PATH".

If that also fails, it defaults to loading "C:/siglo_boot/list.txt" from the host PC.