Boot2
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. During the factory setup process the boot2 title is called boot2.manuBoot instead.
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)
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.
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]
- 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+]
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 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]
- 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+]
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)
- 010000000000000D (dmnt)
- 010000000000001F (ns)
- 0100000000000015 (lm)
- 0100000000000017 (cs)
- 0100000000000011 (shell)
- 0100000000000013 (hid)
- 0100000000000014 (audio)
- 0100000000000029 (lbl)
- 0100000000000016 (wlan)
- 010000000000000B (bluetooth)
- 0100000000000012 (bsdsockets)
- 010000000000000F (nifm)
- 0100000000000018 (ldn)
- 010000000000001E (account)
- 0100000000000020 (nfc)
- 0100000000000022 (capsrv)
- 0100000000000024 (ssl)
- 0100000000000025 (nim)
- 010000000000002B (erpt)
- 0100000000000033 (es)
- 010000000000002E (pctl)
- 010000000000002A (btm)
- 0100000000000031 (glue)
- 0100000000000032 (eclct)
- 010000000000B120 (nvdbgsvc)
- 0100000000000034 (fatal)
- 01000000000020D1 (DevSafeModeUpdater)
Otherwise, it launches exactly the same titles as boot2.prodBoot in the same order, but then finishes by launching 010000000000B14A (Manu) before exiting itself.