Boot2: Difference between revisions
mNo edit summary |
|||
(23 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 | 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 | 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) | ||
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. | |||
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 it | 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. | |||
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 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 61: | Line 63: | ||
* 010000000000003E (olsc) [6.0.0+] | * 010000000000003E (olsc) [6.0.0+] | ||
* 0100000000000041 (ngct) [9.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 67: | Line 129: | ||
= boot2 = | = boot2 = | ||
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 75: | 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 80: | Line 144: | ||
* 010000000000002D (vi) | * 010000000000002D (vi) | ||
* 010000000000001F (ns) | * 010000000000001F (ns) | ||
* 0100000000003003 (DebugMonitor0) [ | * 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 96: | 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+] | * 010000000000003C (jpegdec) [4.0.0+] | ||
Line 102: | Line 166: | ||
* 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) | ||
* 010000000000B120 (nvdbgsvc) | * 010000000000B120 (nvdbgsvc) | ||
* 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 121: | Line 185: | ||
* 0100000000000041 (ngct) [9.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) | |||
* 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|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 | |||
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|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 132: | 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 151: | Line 328: | ||
* 010000000000001E (account) | * 010000000000001E (account) | ||
* 0100000000000020 (nfc) | * 0100000000000020 (nfc) | ||
* 010000000000003C (jpegdec) [4.0.0+] | |||
* 0100000000000022 (capsrv) | * 0100000000000022 (capsrv) | ||
* 0100000000000024 (ssl) | * 0100000000000024 (ssl) | ||
Line 161: | Line 339: | ||
* 0100000000000032 (eclct) | * 0100000000000032 (eclct) | ||
* 010000000000B120 (nvdbgsvc) | * 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". | |||
If that also fails, it defaults to loading "C:/siglo_boot/list.txt" from the host PC. |