Line 71: |
Line 71: |
| |- | | |- |
| | 0x5C | | | 0x5C |
− | | 0x2 | + | | 0x1 |
− | | Version. HighByte must be <{maxver} and LowByte must be >{minver}, where {maxver} and {minver} are constants used by TZ updated with each package1 update. | + | | Package2 version. Must be >= {minimum valid package2 version} constant in TZ. |
| + | |- |
| + | | 0x5D |
| + | | 0x1 |
| + | | Bootloader version. Must be <= {current bootloader version} constant in TZ. |
| |- | | |- |
| | 0x5E | | | 0x5E |
Line 132: |
Line 136: |
| Before being decrypted, the encrypted header's CTR additionally encodes metadata used to validate package2's contents as follows: | | Before being decrypted, the encrypted header's CTR additionally encodes metadata used to validate package2's contents as follows: |
| * Size of the entire package2 with the raw header = ctr_word2 ^ ctr_word3 ^ ctr_word0 | | * Size of the entire package2 with the raw header = ctr_word2 ^ ctr_word3 ^ ctr_word0 |
− | * Metadata version field = ((ctr_word1 ^ (ctr_word1 >> 16)) & 0xFF) ^ (ctr_word1 >> 24) | + | * Key generation = ((ctr_word1 ^ (ctr_word1 >> 16)) & 0xFF) ^ (ctr_word1 >> 24) |
| | | |
− | In [4.0.0], the metadata version field must be less or equal to 4. | + | In [4.0.0], the key generation must be less or equal to 4. |
| | | |
| == Section 0 == | | == Section 0 == |
Line 145: |
Line 149: |
| | | |
| === INI1 === | | === INI1 === |
− | This is "Initial Process List".
| |
− |
| |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 171: |
Line 173: |
| | | |
| ==== KIP1 ==== | | ==== KIP1 ==== |
− | This is "Kernel Initial Process".
| |
− |
| |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 217: |
Line 217: |
| | 0x2C | | | 0x2C |
| | 0x4 | | | 0x4 |
− | | Reserved | + | | Main Thread Affinity Mask |
| |- | | |- |
| | 0x30 | | | 0x30 |
Line 241: |
Line 241: |
| | 0x5C | | | 0x5C |
| | 0x24 | | | 0x24 |
− | | Reserved (2 unused [[#Segment_Header|Segment Headers]]) | + | | Reserved |
| |- | | |- |
| | 0x80 | | | 0x80 |
Line 261: |
Line 261: |
| | 0x4 | | | 0x4 |
| | 0x4 | | | 0x4 |
− | | Decompressed Size | + | | Size |
| |- | | |- |
| | 0x8 | | | 0x8 |
| | 0x4 | | | 0x4 |
− | | Compressed Size | + | | Compressed/Binary Size |
| |} | | |} |
| | | |
− | Compressed size can be 0 or lower than exepected, this is the case for BSS for example. | + | Compressed/Binary size can be 0 or lower than expected, this is the case for BSS for example. |
| | | |
| ===== Compression ===== | | ===== Compression ===== |
− | The compression used here is BLZ, with a modified footer since 3ds. The footer is now 0xC bytes instead of 0x8, and has the form u32 compressed_data_len; u32 initial_index; u32 additional_len_when_uncompressed; | + | The compression used here is BLZ, with a modified footer since 3ds. The footer is now 0xC bytes instead of 0x8, and has the form u32 compressed_data_len; u32 footer_size; u32 additional_len_when_uncompressed; |
| | | |
| == Section 2 == | | == Section 2 == |
Line 283: |
Line 283: |
| |- | | |- |
| ! System version | | ! System version |
− | ! Package1 maxver constant | + | ! Bootloader current version |
− | ! Package1 minver constant
| + | ! Package2 minimum valid version |
− | ! Package2 version field | |
| |- | | |- |
| | [[1.0.0]] | | | [[1.0.0]] |
| + | | 0x1 |
| + | | 0x4 |
| + | |- |
| + | | [[2.0.0]] |
| | 0x2 | | | 0x2 |
| + | | 0x5 |
| + | |- |
| + | | [[3.0.0]] |
| | 0x3 | | | 0x3 |
− | | 0x0104 | + | | 0x6 |
| |- | | |- |
− | | [[2.0.0]] | + | | [[3.0.2]] |
− | | 0x3
| |
| | 0x4 | | | 0x4 |
− | | 0x0205 | + | | 0x7 |
| |- | | |- |
− | | [[3.0.0]] | + | | [[4.0.0]] |
− | | 0x4
| |
| | 0x5 | | | 0x5 |
− | | 0x0306 | + | | 0x8 |
| |- | | |- |
− | | [[3.0.2]] | + | | [[5.0.0]] |
− | | 0x5
| |
| | 0x6 | | | 0x6 |
− | | 0x0407 | + | | 0x9 |
| |- | | |- |
− | | [[4.0.0]] | + | | [[6.0.0]] |
− | | 0x6
| |
| | 0x7 | | | 0x7 |
− | | 0x0508 | + | | 0xA |
| |- | | |- |
− | | [[5.0.0]] | + | | [[6.2.0]] |
− | | 0x7
| |
| | 0x8 | | | 0x8 |
− | | 0x0609 | + | | 0xB |
| |- | | |- |
− | | [[6.0.0]] | + | | [[7.0.0]] |
− | | 0x8
| |
| | 0x9 | | | 0x9 |
− | | 0x070A | + | | 0xC |
| |- | | |- |
− | | [[6.2.0]] | + | | [[8.1.0]] |
− | | 0x9
| |
| | 0xA | | | 0xA |
− | | 0x080B | + | | 0xD |
| |- | | |- |
− | | [[7.0.0]] | + | | [[9.0.0]] |
− | | 0xA
| |
| | 0xB | | | 0xB |
− | | 0x090C | + | | 0xE |
| |- | | |- |
− | | [[8.1.0]] | + | | [[9.1.0]] |
− | | 0xB
| |
| | 0xC | | | 0xC |
− | | 0x0A0D | + | | 0xF |
| |- | | |- |
− | | [[9.0.0]] | + | | [[10.0.0]] |
− | | 0xC
| |
| | 0xD | | | 0xD |
− | | 0x0B0E | + | | 0x10 |
| |- | | |- |
− | | [[9.1.0]] | + | | [[11.0.0]] |
− | | 0xD
| |
| | 0xE | | | 0xE |
− | | 0x0C0F | + | | 0x11 |
| + | |- |
| + | | [[12.0.2]] |
| + | | 0xF |
| + | | 0x12 |
| + | |- |
| + | | [[12.1.0]] |
| + | | 0xF |
| + | | 0x13 |
| + | |- |
| + | | [[13.0.0]] |
| + | | 0xF |
| + | | 0x14 |
| |} | | |} |
| | | |