Difference between revisions of "BootConfig"

From Nintendo Switch Brew
Jump to navigation Jump to search
Line 5: Line 5:
 
= Format =
 
= Format =
 
Despite having 0x4000 for storage, the actual loaded BootConfig is only 0x640 bytes, with the following format:
 
Despite having 0x4000 for storage, the actual loaded BootConfig is only 0x640 bytes, with the following format:
 +
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 13: Line 14:
 
| 0x0
 
| 0x0
 
| 0x200
 
| 0x200
| Unsigned Configuration
+
| [[#Unsigned Configuration]]
 
|-
 
|-
 
| 0x200
 
| 0x200
Line 21: Line 22:
 
| 0x300
 
| 0x300
 
| 0x100
 
| 0x100
| Signed Configuration
+
| [[#Signed Configuration]]
 
|-
 
|-
 
| 0x400
 
| 0x400
Line 28: Line 29:
 
|}
 
|}
  
 +
= Unsigned Configuration =
 +
This is "nn::bconfig::BootConfig".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x10
 +
|
 +
|-
 +
| 0x10
 +
| 0x1
 +
| IsDebugMode (bit 1) and TakeExtabtSerrorToEl3 (bit 2)
 +
|-
 +
| 0x11
 +
| 0x1
 +
| [[SMC#KernelConfiguration|KernelConfiguration]] (first byte)
 +
|-
 +
| 0x12
 +
| 0xF
 +
|
 +
|-
 +
| 0x21
 +
| 0x1
 +
| [[SMC#KernelConfiguration|KernelConfiguration]] (second byte)
 +
|-
 +
| 0x22
 +
| 0x1
 +
|
 +
|-
 +
| 0x23
 +
| 0x1
 +
| [[SMC#MemoryMode|MemoryMode]]
 +
|-
 +
| 0x24
 +
| 0x1
 +
| HasInitialTscValue
 +
|-
 +
| 0x25
 +
| 0xB
 +
|
 +
|-
 +
| 0x30
 +
| 0x8
 +
| InitialTscValue
 +
|-
 +
| 0x38
 +
| 0x1C8
 +
|
 +
|}
  
= Signed Config =
+
= Signed Configuration =
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 60: Line 114:
 
|  
 
|  
 
|}
 
|}
 
= Unsigned Config =
 

Revision as of 18:47, 16 February 2020

Installed into the first 0x4000 sector of the eMMC storage's BCPKG2 partitions, "BootConfig" contains data used to configure TrustZone/OS behaviors.

BootConfig is normally all-zero for retail units, however TrustZone additionally sets the loaded configuration to all-zero when running on a retail unit anyway.

Format

Despite having 0x4000 for storage, the actual loaded BootConfig is only 0x640 bytes, with the following format:

Offset Size Description
0x0 0x200 #Unsigned Configuration
0x200 0x100 RSA-PSS Signature
0x300 0x100 #Signed Configuration
0x400 0x240 Reserved

Unsigned Configuration

This is "nn::bconfig::BootConfig".

Offset Size Description
0x0 0x10
0x10 0x1 IsDebugMode (bit 1) and TakeExtabtSerrorToEl3 (bit 2)
0x11 0x1 KernelConfiguration (first byte)
0x12 0xF
0x21 0x1 KernelConfiguration (second byte)
0x22 0x1
0x23 0x1 MemoryMode
0x24 0x1 HasInitialTscValue
0x25 0xB
0x30 0x8 InitialTscValue
0x38 0x1C8

Signed Configuration

Offset Size Description
0x0 0x8
0x8 0x1 Package2 Configuration. Bit 0 set means Package2 is stored unencrypted. Bit 1 set means Package2 is unsigned.
0x9 0x7
0x10 0x10 Hardware Info. Must match the Hardware Info read from fuses, or else the loaded Signed Config will be memset to 0 even if signed. This allows Nintendo to set signed configuration on a per-unit basis.
0x20 0x1 DisableProgramVerification. Controls the default value for how to check NCA signatures.
0x21 0xDF