Line 8: |
Line 8: |
| | | |
| = Structure = | | = Structure = |
− | == NAND ==
| |
| Below is the BCT structure used by the Switch, which is a minimal variation of the Tegra 210 BCT format. | | Below is the BCT structure used by the Switch, which is a minimal variation of the Tegra 210 BCT format. |
| | | |
Line 205: |
Line 204: |
| |} | | |} |
| | | |
− | === customer_data ===
| + | == customer_data == |
| This data block is ignored by the boot ROM, therefore is available for the programmer to use freely. | | This data block is ignored by the boot ROM, therefore is available for the programmer to use freely. |
| The Switch uses 0xB0 bytes of this area, at offset 0x0450, to store the active [[Flash_Filesystem#Keyblob|keyblob]]. All remaining bytes are zero. | | The Switch uses 0xB0 bytes of this area, at offset 0x0450, to store the active [[Flash_Filesystem#Keyblob|keyblob]]. All remaining bytes are zero. |
Line 223: |
Line 222: |
| | 0x80 | | | 0x80 |
| | 0x10 | | | 0x10 |
− | | [[Package1#Stage_1|Stage 1]] key | + | | [[Package1#PK11_Blob|PK11]] key |
| |} | | |} |
| | | |
− | === bootloader0_info ===
| + | == bootloader0_info == |
− | ==== 1.0.0 - 2.3.0 ====
| + | === 1.0.0 - 2.3.0 === |
| The version field is set to 0x01, meaning that the first keyblob is to be used. | | The version field is set to 0x01, meaning that the first keyblob is to be used. |
| | | |
− | ==== 3.0.0 ====
| + | === 3.0.0 === |
| The version field was changed to 0x02, meaning that the second keyblob is now used. | | The version field was changed to 0x02, meaning that the second keyblob is now used. |
| | | |
− | ==== 3.0.1 ====
| + | === 3.0.1 - 3.0.2 === |
| The version field was changed to 0x03, meaning that the third keyblob is now used. | | The version field was changed to 0x03, meaning that the third keyblob is now used. |
| | | |
− | == IRAM == | + | === 4.0.0 - 4.1.0 === |
− | When copied to IRAM, the BCT has an additional header as follows.
| + | The version field was changed to 0x04, meaning that the fourth keyblob is now used. |
− | | |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Field
| |
− | ! Description
| |
− | |-
| |
− | | 0x00
| |
− | | 0x50
| |
− | | bct_global_header
| |
− | | Contains pointers to actual BCT data.
| |
− | 0x4C: bct_data_addr (address of the actual BCT)
| |
− | |-
| |
− | | 0x50
| |
− | | 0x18
| |
− | | bootloader0_header
| |
− | | Unknown structure.
| |
− | 0x00: is_active (if set to 0x01, bootloader0 is used)
| |
− | |-
| |
− | | 0x68
| |
− | | 0x18
| |
− | | bootloader1_header
| |
− | | Unknown structure.
| |
− | 0x00: is_active (if set to 0x01, bootloader1 is used)
| |
− | |-
| |
− | | 0x80
| |
− | | 0x18
| |
− | | bootloader2_header
| |
− | | Unknown structure.
| |
− | 0x00: is_active (if set to 0x01, bootloader2 is used)
| |
− | |-
| |
− | | 0x98
| |
− | | 0x18
| |
− | | bootloader3_header
| |
− | | Unknown structure.
| |
− | 0x00: is_active (if set to 0x01, bootloader3 is used)
| |
− | |-
| |
− | |}
| |